VCSA データベースストレージ "/storage/db" が完全に、またはほとんど枯渇する
search cancel

VCSA データベースストレージ "/storage/db" が完全に、またはほとんど枯渇する

book

Article ID: 415670

calendar_today

Updated On:

Products

VMware vCenter Server

Issue/Introduction

免責事項:これは英文の記事「VCSA database storage "/storage/db" is full or nearly full」の日本語訳です。記事はベストエフォートで翻訳を進めているため、ローカライズ化コンテンツは最新情報ではない可能性があります。最新情報は英語版の記事で参照してください。


この記事では、アプリケーションを停止せずにディスク上のデータベースのフットプリントを削減する手順について説明します。

  • /var/log/vmware/vpxd/vpxd.log ファイルで、以下のようなエントリが確認できます。
No Space left on the device
  • /storage/db/vpostgres/pg_log/postgresql.log ファイルで、以下のようなエントリが確認できます。

    psql.bin:  could not extend file "pg_tblspc/16392/PG_9.4_201409291/16385/8126296": No space left on device
  • df -h を実行すると、以下のような結果が確認できます。
50G 50G 0G 100% /storage/db


: 上記ログの抜粋はあくまで例です。日付や時間、環境変数は環境によって異なる場合があります。

ログファイルについてより詳細に確認するには Location of vCenter Server log files を確認してください。

Environment

VMware vCenter Server Appliance 6.5.x

VMware vCenter Server Appliance 6.7.x

VMware vCenter Server 7.0.x

VMware vCenter Server 8.0.x

Cause

データベースに冗長なデータが保存されている可能性が高いと考えられます。データベースが保持している冗長なデータは bloat と呼称されます。 

Bloat は多様な原因で発生します。

  • データベースに接続するアプリケーションの不具合
  • 長期実行されているアイドル状態のトランザクション
  • 内部データベースプロセスのハウスキーピング処理が十分に積極的でないこと
  • VCSA OS が、データベース自動クリーンアップユーティリティのスレッドの制御を失っていること

Resolution

  1. vCenter Server の再起動

スレッドの制御を失っていることに起因する問題は、全てこの方法で解消できると考えられます。
  1. df -h コマンドを実行し、容量枯渇時の使用率を記録
  2. VCSA 仮想マシンが他の vCenter Server に管理されているかを確認
    vCenter Server がクラスタ内のホスト上に存在する場合は、どの ESXi ホストが vCenter Server 仮想マシンを管理しているか確認します。Web ブラウザで https://<ホスト IP or FQDN> に接続し、host client にアクセスしてください。
  3. VCSA 仮想マシンのコンソールウィンドウを開く
  4. ゲスト OS のシャットダウンを選択
    パワーオフしないでください。
  5. 再起動後 30 分待機してから、 df -h を再度実行して空き容量を確認
  6. 以前より空き容量が増加していない場合、次のステップへ進む

 

  1. パーティション枯渇を解消

    1. データベースディスクが 100% 枯渇した場合、ディスクの拡張が必要と考えられます。クリーンアップユーティリティが機能するには、オーバーヘッドとしてある程度の空き容量が必要です。ディスクサイズを増加させ、df -h の出力で枯渇していることを確認したパーティションを拡張してください。
    2. ディスクサイズを増加させるには、 Increasing the disk space for the VMware vCenter Server Appliance in vSphere 6.5, 6.7 and 7.0 を参照してください。

 

  1. Bloat の確認

    1. VCSA database storage "/storage/db" is full or nearly full に添付されているスクリプト 51981_check_bloat.sql をダウンロード
    2. DB に接続
      /opt/vmware/vpostgres/current/bin/psql -U postgres -d VCDB
    3. スクリプト内容をコピーアンドペーストし、Enter を入力
    4. 結果を確認
      tbloat 列か、ibloat 列の値が 25 を超える場合、このデータベースの bloat の削減のため、メンテナンス期間を設けてください。
: このクエリはテーブル、インデックス構造、テーブル行数を確認し、そのデータの保持に最低限必要なサイズを推定します。その後、bloat の推定のため、推定値を実際の値と比較します。

VCSA vPostgres で使用量が大きいテーブルを特定するためには、次のクエリを実行してください。

SELECT nspname || '.' || relname AS "relation",
pg_size_pretty(pg_total_relation_size(C.oid)) AS "total_size"
FROM pg_class C
LEFT JOIN pg_namespace N ON (N.oid = C.relnamespace)
WHERE nspname NOT IN ('pg_catalog', 'information_schema')
AND C.relkind <> 'i'
AND nspname !~ '^pg_toast'
ORDER BY pg_total_relation_size(C.oid) DESC
LIMIT 20;

 

  1. Bloat の削除

    1. 全てのサービスの停止
service-control --stop --all
  1. 以下コマンドを実行し、vpostgres を起動
service-control --start vmware-vpostgres
  1. 以下コマンドを実行し、Postgres service に接続
/opt/vmware/vpostgres/current/bin/psql -U postgres -d VCDB
  1. 全てのテーブルとインデックスを再構築
vacuum full;
 
: このコマンドは全ての bloat を削除します。
  1. パフォーマンス最適化のため、最新の統計情報を収集
vacuum analyze;
  1. 終了
\q
  1. 以下コマンドを実行し、全てのサービスを再起動
service-control --start --all

Additional Information

vCenter Server Appliance Data Integrity Best Practices

影響/リスク

vmware-vpxd サービスが起動せず、VCSA に vSphere Client で接続できなくなると考えられます。