記事
· 2022年4月8日 4m read

SYS.Database クラスの FreeSpace クエリを使用してデータベースのあるディスクの空き容量を確認する方法

これは、InterSystems FAQサイトの記事です。

システムユーティリティクラス:SYS.Database のクエリ:FreeSpace を利用してディスクの空き容量を任意のタイミングで確認することができます。

IRIS ターミナルで試す方法は以下の通りです(%SYSネームスペースに移動してから実行します)。

zn "%SYS"
set stmt=##class(%SQL.Statement).%New()
set st=stmt.%PrepareClassQuery("SYS.Database","FreeSpace")
set rset=stmt.%Execute()
//全件一括表示
do rset.%Display()

出力結果例は以下の通りです。

※コマンド実行例では、全データベースが同じディスクに置かれているので、ディスクの空き容量(DiskFreeSpace)はすべて同じ値が返っています。

Dumping result #1
DatabaseName    Directory       MaxSize Size    ExpansionSize   AvailableFreeDiskFreeSpace      Status  SizeInt AvailableNum    DiskFreeSpaceNum        ReadOnly
IRISSYS c:\intersystems\irishealth3\mgr\        無制限  159MB   システムデフォル           ト      18MB    11.32   245.81GB        マウント/RW     159     18      2517050
ENSLIB  c:\intersystems\irishealth3\mgr\enslib\ 無制限  226MB   システムデフォル           ト      19MB    8.4     245.81GB        マウント/R      226     19      2517051
   <一部省略>
IRISTEMP        c:\intersystems\irishealth3\mgr\iristemp\       無制限  51MBシス     テムデフォルト  49MB    96.07   245.81GB        マウント/RW     51      49251705           0
USER    c:\intersystems\irishealth3\mgr\user\   無制限  31MB    システムデフォル           ト      8.5MB   27.41   245.81GB        マウント/RW     31      8.5     2517050

参照したいデータベースディレクトリを指定したい場合は、以下のように実行します。

// 参照したいデータベースディレクトリのフルパスを $LISTBUILD() 関数を使用して用意します。
set dbdir=$LISTBUILD("c:\intersystems\irishealth3\mgr","c:\intersystems\irishealth3\mgr\user")
set rset=stmt.%Execute(dbdir)
do rset.%Display()

指定のデータベースディレクトリのデータベース名(DatabaseName)、現在サイズ(Size)MB、利用可能空き容量(Available)MB、空きサイズ(Free)%、ディスクの空き容量サイズ(DiskFreeSpace)GB のみを取得したい場合は以下の流れで実行します(VSCodeやスタジオで %SYSネームスペースに接続した状態でルーチン/クラスを作成し、コードを記述してください)。

Class ZMyClass.Utils
{
ClassMethod GetDiskFreeSpace()
{
    set dbdir=$LISTBUILD("c:\intersystems\irishealth3\mgr","c:\intersystems\irishealth3\mgr\user")
    set stmt=##class(%SQL.Statement).%New()
    set st=stmt.%PrepareClassQuery("SYS.Database","FreeSpace")
    set rset=stmt.%Execute(dbdir)
    while(rset.%Next()) {
        write rset.%Get("DatabaseName")," - ",
        rset.%Get("Size")," - ",rset.%Get("Available")," - ",
        rset.%Get("Free"),"% - ",rset.%Get("DiskFreeSpace"),!
    }
}
}

メモ:%SYSネームスペースにユーザ定義のルーチンやクラスを置く場合、Zから始まる名称で作成することで、アップグレードインストール後にもユーザ定義のソースコードが残ります。

実行例は以下の通りです。

USER>zn "%SYS"

%SYS>do ##class(ZMyClass.Utils).GetDiskFreeSpace()

IRISSYS - 159MB - 18MB - 11.32% - 245.81GB
USER - 31MB - 8.5MB - 27.41% - 245.81GB

%SYS>

 

この記事の関連記事もあります。以下ご参照ください。

ディスカッション (0)1
続けるにはログインするか新規登録を行ってください