はじめに
SQLServerのことはほとんど分かってません。初心者なので。
なんやかんやでSQLServerを触ることになってタイトルの通りの処理をしないといけないことに。
まだ完全に完成してないので、後で弄るとき困るといけないのでメモ書き程度に置いておきます。
容量の確認
- とりあえず確認用に作ったデータベース「testdb」に適当に詰め込み容量を確認する。
use testdb
go
EXEC sp_spaceused
go
database_name database_size unallocated space
-------------------------------------------------------------------------------------------------------------------------------- ------------------ ------------------
testdb 9232.00 MB 780.26 MB
reserved data index_size unused
------------- ------------- ------------- -------------
61176 KB 59248 KB 1304 KB 624 KB
database_nameやdatabase_sizeは分かるけどそれ以外はなんて書いてあるのか分からない(英語力皆無)
ということで調べていく。
見るところはやっぱりMicrosoft Docs
列名 | 説明 |
---|---|
database_name | 現在のDB名 |
database_size | DBサイズ(データ+ログ) |
unallocated space | 未割当の領域 |
reserved | DB内で割り当てられた領域 |
data | データ使用領域の合計 |
index_size | インデックスの使用領域の合計 |
unused | DB内でオブジェクト用に予約されているが使用されていない領域の合計 |
・・・なるほど?少しだけ分かった気がする。
使用率を調べるには
ここから使用率を調べるために資料を漁っていると
FILEPROPERTY ( file_name , property )
というものを発見。
SpaceUsedというプロパティがあり指定したファイルで使用されている容量を確認できるらしい。
組んでみた
- ということで
組んでみた組んでもらった
use testdb
go
select
name,
size * 8/1024 AS [ファイルサイズ(MB)] ,
FILEPROPERTY(file_name(fileid),'SpaceUsed')*8192.0/power(1024.0,2) AS [使用領域(MB)] ,
FLOOR((FILEPROPERTY(file_name(fileid),'SpaceUsed')*8192.0/power(1024.0,2))
/(convert(numeric(20),size) * 8192/1024/1024) * 100 ) as [データ使用率(%)]
from dbo.sysfiles
go
name ファイルサイズ(MB) 使 用領域(MB) 使用率(%)
-------------------------------------------------------------------------------------------------------------------------------- ----------- ---------------------------------------- ----------------------------------------
testdb 840 60.1250000000000000000000 7.1577381
testdb_log 8392 9.7109375000000000000000 .1157166
おわり
ちゃんと動いてる・・・けどdatabase_size単体での使用率は出せないのかな?そこはよくわかりません。
そこより気になるのが小数点以下の0が多いことだけど、切り上げ、切り捨て、四捨五入にはFLOORやCEILINGやROUNDというものがあるらしい。
ここはまた今度調べてみたいところ。
とりあえず使用率の表示はできたからここからバッチファイルかPowershellで使用率を取り出して云々しないといけないから頑張ろう。