Skip to Content

目的
このドキュメントでは、SQL Anywhere があなたのデバイスでどれくらいのディスク容量を使用しているかをモニタする際に役立つ情報を提供します。

概要
ディスク容量の使用状況をモニタするだけでなく、ディスク容量の少ないシナリオの場合に対応できるようにするには、すべてのデータベース管理者の”Todo”リストに表示されている必要があります。
それを効果的に行うためには、データベースサーバーによって使用されるファイルとその場所を理解することが重要です。

前提条件
MANAGE ANY DBSPACE システム権限が必要です。

ディスク容量のモニタリング
一般に、SQL Anywhereデータベースは3種類のファイルで構成されています。

  • “dbspace”  (ひとつ以上の)データベースオブジェクトが格納される場所(たとえばテーブル、インデックス、プロシージャ、データ)。
    このファイルの拡張子は通常”.db”または”.dbs”です。
  • トランザクションログ(ミラーログがある場合もあります)トランザクションログはデータベースをリカバリーするためにすべてのトランザクションを保存します。このファイルの拡張子は通常”.log”または”.mlg”です。
  • テンポラリファイル データベースサーバのすべての一時的なデータを保存します。
    (例:ソートに使用されるテンポラリテーブル、メモリに収まらないデータページのストレージ、その他)

各ファイルのサイズと場所を調べるために、SQL AnywhereはSQLコマンドで問い合わせできるデータベースプロパティを提供しています。

例: SQL Anywhere 16 Demo データベースを使用する(http://dcx.sap.com/index.html#sa160/ja/saintro/fg-sademo.html 参照)

-- dbspace "dbspace1" を作成します
CREATE DBSPACE "dbspace1" AS 'dbspace1.db';
-- 2MBプリアロケートします
ALTER DBSPACE "dbspace1" ADD 2 MB;
-- どのようなdbspaceが割り当てられているか調べます
SELECT file_name FROM sysfile;
-- 'system' db spaceのファイルサイズを取得します。
SELECT DB_EXTENDED_PROPERTY( 'FileSize' );
-- dbspace のサイズ、この場合、dbspace1.db 
SELECT DB_EXTENDED_PROPERTY( 'FileSize', 'dbspace1' );
-- トランザクションログの名前
SELECT DB_PROPERTY( 'LogName');
-- トランザクションログのサイズ
SELECT DB_EXTENDED_PROPERTY( 'FileSize', 'translog' );
-- テンポラリファイルの名前
SELECT DB_PROPERTY( 'TempFileName');
-- テンポラリファイルファイルが作成されたディレクトリの場所
SELECT PROPERTY('TempDir');
-- テンポラリファイルのサイズ
SELECT DB_EXTENDED_PROPERTY( 'FileSize', 'temporary' );

データベースで現在予約された”空き領域”がどれだけあるかという情報を作成する:

-- データベース中の空きページの数
SELECT DB_EXTENDED_PROPERTY( 'FreePages');
-- ページサイズ
SELECT DB_PROPERTY('PAGESIZE');
-- データベースの空き領域
SELECT DB_EXTENDED_PROPERTY( 'FreePages')*DB_PROPERTY('PAGESIZE');

SQL Anywhereは、データベースプロパティに加えて、システム上の現在のディスク領域使用状況を自動的にチェックするイベントを作成する機能を提供し、ストアドプロシージャを使用してレポートを生成するために使用できます。

-- ディスク領域情報を格納するためのグローバルテンポラリテーブルの作成
CREATE GLOBAL TEMPORARY TABLE "DBA"."satmp_db_space" (
"ts" TIMESTAMP NOT NULL,
"dbspace_name" CHAR(128) NOT NULL,
"space_in_bytes" NUMERIC(30,0) NULL,
PRIMARY KEY ( "ts" ASC, "dbspace_name" ASC )
) NOT TRANSACTIONAL SHARE BY ALL;
-- 300秒ごとにトリガし、いくつかのSQLコマンドを実行する 'LowDBSpace'イベントを作成する
CREATE EVENT "LowDBSpace" TYPE "DBDiskSpace"
WHERE EVENT_CONDITION('DBFreePercent') < 10 AND EVENT_CONDITION('Interval') >= 300
HANDLER
BEGIN
DECLARE ts datetime;
-- set the time as of when the time sample was taken
SET ts = NOW();
-- populate satmp_db_space table with file size statistics
INSERT INTO DBA.satmp_db_space (ts,dbspace_name,space_in_bytes)
SELECT ts,dbspace_name, DB_EXTENDED_PROPERTY( 'FileSize',dbspace_name) * DB_PROPERTY('PAGESIZE') tot From sys.sysfile
UNION
SELECT ts,'translog',DB_EXTENDED_PROPERTY( 'FileSize', 'translog' ) * DB_PROPERTY('PAGESIZE') tot
UNION
SELECT ts,'TotalDBSpace',SUM(t.tot) FROM 
(
SELECT DB_EXTENDED_PROPERTY( 'FileSize',dbspace_name) * DB_PROPERTY('PAGESIZE') tot From sys.sysfile
UNION
SELECT DB_EXTENDED_PROPERTY( 'FileSize', 'translog' ) * DB_PROPERTY('PAGESIZE') tot
) t
UNION
SELECT ts,'DBFreeSpace', EVENT_PARAMETER('DBFreeSpace') * 1024*1024 ;
COMMIT;
-- コンソールログにメッセージをストアします
MESSAGE 'Database Free Disk Space: '|| EVENT_PARAMETER( 'DBFreeSpace') 
|| ' MB (' || convert(numeric(10,2),(EVENT_PARAMETER( 'DBFreeSpace')/1024)) || ' GB)';
-- 空き領域についての情報をdbadminにメールする (メールは最初にセットアップする必要があります)
-- CALL xp_sendmail( recipient='DBAdmin',subject='Low disk space',"message"='Database Free Disk Space '|| EVENT_PARAMETER( 'DBFreeSpace' ) );
END;

上記のイベントがデータベースにインストールされて有効になると、ファイルシステムの容量が逼迫しているときに、
データベース領域の増加に関するレポートを生成するためにテーブルを照会することは簡単です。
これは、容量の問題をトラブルシューティングしたり、将来のディスク容量要件を見積もったりする場合に役立ちます。
この例では、30分間でデータベースの合計サイズが200MB以上増加しています。

SELECT ts,dbspace_name,CONVERT(numeric(30,0), space_in_bytes / 1024/1024) as space_in_MB 
FROM satmp_db_space 
WHERE dbspace_name IN ('DBFreeSpace','TotalDbSpace') 
ORDER BY ts ASC;
 
Ts dbspace_name space_in_MB
2011-03-30 13:52:43.578 TotalDBSpace 105
2011-03-30 13:57:44.281 DBFreeSpace 24594
2011-03-30 13:57:44.281 TotalDBSpace 105
2011-03-30 14:02:45.031 DBFreeSpace 24594
2011-03-30 14:02:45.031 TotalDBSpace 105
2011-03-30 14:07:45.750 DBFreeSpace 24493
2011-03-30 14:07:45.750 TotalDBSpace 207
2011-03-30 14:12:46.562 DBFreeSpace 24390
2011-03-30 14:12:46.562 TotalDBSpace 309
2011-03-30 14:17:47.218 DBFreeSpace 24390
2011-03-30 14:17:47.218 TotalDBSpace 309
2011-03-30 14:22:48.062 DBFreeSpace 24390

 

SMTP経由でメールを送る方法
データベース管理者の代わりにアラートをメールで送るために、管理者はSQL Anywhereのイベントでxp_startsmtpxp_sendmail、およびxp_stopsmtpコマンドを使用してSMTPサーバへ接続できます。
詳細につきましては下記を参照してください:
http://scn.sap.com/community/sql-anywhere/blog/2010/01/15/using-sql-anywhere-innsbruck-to-send-emails-through-gmail.

メモ:Secure SMTP経由のメールをGoogleのGMailで送りたい場合、GMailのパブリック証明書をGeoTrust証明書のリンク)からダウンロードすることができます。

CREATE EVENT "LowDBSpace" TYPE "DBDiskSpace"
  WHERE EVENT_CONDITION('DBFreePercent') < 10 AND EVENT_CONDITION('Interval') >= 300
  HANDLER
BEGIN
  CALL xp_startsmtp('john.doe@gmail.com', 'smtp.gmail.com', 587, 60, 'John Doe','john.doe@gmail.com', 'itsasecret', 'C:\certs\Equifax_Secure_Certificate_Authority.pem'); 
  CALL xp_sendmail( recipient='john.doe@gmail.com',subject='Low disk space',"message"='Database Free Disk Space '|| EVENT_PARAMETER( 'DBFreeSpace' ) );
  CALL xp_stopsmtp();
END;

このページは、以下の英語ページの抄訳です。
How to Monitor Disk Space Usage with SQL Anywhere

To report this post you need to login first.

Be the first to leave a comment

You must be Logged on to comment or reply to a post.

Leave a Reply