こんにちは、デジタルトランスフォーメーション事業部の吉倉です。
本番で動いているデータベースの状態って定期的にモニタリングしたいですよね。
CPU使用率、メモリ使用量、ディスクIOは定期的にモニタリングするところですが、データ使用量も気にしたいところですね。
ストレージの割り当ての確認
データの使用量というと、最初に思い当たるのはストレージの割り当てです。
10年ほど前ですが、DBサーバ用にオンプレのサーバを購入するにあたって、「ディスクの容量ってどれくらいにしたらよい?容量見積もって。使うのは5年ね。」ということを、
開発の初期に依頼されて、「作る機能も決まってないんだけど。テーブル設計もしてないのにどうやって見積もるの?」と困りました。
その結果、多めに見積もらざるを得ず、「多めのディスクを用意してくださいね」とお願いしたものの、
5年後の使用率は20%程度だったことを思い出します。
今となってはクラウドのマネージドサービスを使うケースも多いと思います。
例えば、AWSのRDSでSQLServerのDBを作る場合は、ストレージは最大16,384GiBまで割り当てできますし、PostgreSQLの場合は65,536GiBです。
ここまで拡張ができるのであれば、小規模の業務アプリケーションを構築するにあたってはあまり気にする必要はなさそうです。
(マネージドサービスを使わずに構築する時くらいでしょうか)
※ Auroraの場合はストレージの割り当てもする必要ありません。
Aurora クラスターボリュームは、最大 128 tebibytes (TiB)なので、なおさら小規模の業務アプリケーションでは事足ります。
データの使用量を確認
もう一つ、データベース内でのデータの使用量です。
項目としては、テーブルごとのデータの件数や、データベースオブジェクトのサイズです。
以前、保守していたシステムでは定期的に取得していました。
「あれ、このデータ件数だと、おかしくない?」がわかって、潜在バグを発見したり、
「このペースだと、5年持たないのでは?」といったことに気づけたりします。
それではどういう風に取るかを記載します。
SQLServerでSSMSを使う場合
データベース選択>レポート>標準レポート>テーブルごとのディスク使用量
を選択します。
結果はこんなふうに表示されます。
これは、ExcelやPDFにもエクスポートもできますので、保守作業を行った時などに確認すると良いですね!
SQLServerでTransact SQLで実行する場合
SSMSからだと手動で実行しないといけないので、コマンドラインから実行して、結果をストレージに保存、といったことをしたくなりますね。
sp_spaceused
を使えば取得できます。
sp_spaceused
は、@objname を指定する必要があるので、全テーブル指定するにはsp_MSforeachtable
を使用しましょう。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
CREATE TABLE #temp_object_size ( obj_name NVARCHAR(128), rows char(20), reserved_size VARCHAR(18), data_size VARCHAR(18), index_size VARCHAR(18), unused_size VARCHAR(18) ); INSERT INTO #temp_object_size EXEC sp_MSforeachtable 'sp_spaceused ''?'''; SELECT * FROM #temp_object_size ORDER BY obj_name DROP TABLE #temp_object_size |
※ 一時テーブルの型はMicrosoftのページの記載に合わせています。
実行結果はこうなります。
標準レポートと並べると、同じ結果になっていることがわかります。
PostgreSQLで実行する場合
もう一つ、直近の使っているPostgreSQLで同様のモニタリングをする場合は、pg_class
ビューを使います。
ユーザテーブルだけに絞るために、pg_stat_user_tables
ビューも使います。
SQLはこう書きます。
1 2 3 4 5 6 7 8 |
select pc.relname as table_name, pc.relpages as page_size, pc.reltuples as row_count from pg_stat_user_tables psut inner join pg_class pc on psut.relid = pc.oid order by psut.relname |
PostgreSQLは、サンプルデータが用意されているので、サンプルデータで実行してみるとこうなります。
さいごに
保守運用において、データの使用量のモニタリングは重要です。
ここに記載した方法を一例に、モニタリングをしていくことで見えてくることもあるかと思いますので、実施してみてはいかがでしょうか。
ここまでお読みいただき、ありがとうございました。