Azure Database for PostgreSQL フレキシブル サーバー インスタンスには、パフォーマンスを自動的に強化し、問題を防ぐために設計されたインテリジェントなチューニング機能があります。 インテリジェント チューニングは、Azure Database for PostgreSQL のフレキシブル サーバーの状態を継続的に監視し、データベースをワークロードに合わせて動的に調整します。
この機能は、次の 2 つの自動チューニング機能で構成されています:
- 自動バキューム チューニング: この機能は、肥大化率を追跡し、それに応じて自動バキューム設定を調整します。 現在のリソース使用量と予測リソース使用量の両方を考慮することで、ワークロード中断を防止します。
- 書き込みチューニング: この機能は、書き込み操作のボリュームとパターンを監視し、書き込みパフォーマンスに影響するパラメーターを変更します。 これらの調整により、システムのパフォーマンスと信頼性の両方が向上し、潜在的な問題を事前に回避できます。
インテリジェント チューニングを有効にするには、Azure portal または Azure CLI を使用します。
インテリジェント チューニングを使う理由
自動バキューム プロセスは、Azure Database for PostgreSQL のフレキシブル サーバーの正常性とパフォーマンスを維持するうえで重要な要素です。 これは、"使用されていない" 行によって占有されているストレージを再利用して領域を解放し、データベースの実行をスムーズに続けられるようにします。
同じように重要なのが、データベース内での書き込み操作のチューニングです。 通常、このタスクはデータベース管理者が担当します。 データベースを絶えず監視し、書き込み操作を微調整するのは困難で時間がかかる場合があります。 複数のデータベースを扱っている場合には、このタスクはさらに複雑になります。
ここでインテリジェント チューニングが登場します。 データベースの監視およびチューニングを手動で行う代わりに、インテリジェント チューニングを使用してデータベースの監視とチューニングを自動的に行うことができます。 その分、他の重要なタスクに集中できます。
インテリジェント チューニングの自動バキューム チューニング機能は、肥大化率を監視し、必要に応じて設定を調整することで最適なリソース使用率を実現します。 データベースの "クリーニング" プロセスを予防的に管理し、古いデータが原因で発生する可能性のあるパフォーマンス上の問題を軽減します。
書き込みチューニング関数は、書き込み操作の量とトランザクション パターンを監視します。
bgwriter_delay、checkpoint_completion_target、max_wal_size、min_wal_size などのパラメーターをインテリジェントに調整します。 そうすることで、書き込み負荷が高い場合でもシステムのパフォーマンスと信頼性が向上します。
インテリジェント チューニングを使用する場合は、Azure Database for PostgreSQL フレキシブル サーバー インスタンスに依存してデータベースの最適なパフォーマンスを維持することで、貴重な時間とリソースを節約できます。
インテリジェント チューニングの仕組み
インテリジェント チューニングは、ワークロードの特性について学習するだけでなく、CPU や IOPS といった現在の負荷とリソースの使用状況も追跡する、継続的な監視および分析プロセスです。 アプリケーション ワークロードの通常の操作には影響しません。
このプロセスにより、データベースはインスタンスの現在の肥大化率、書き込みパフォーマンス、チェックポイントの効率を把握することで、ワークロードに応じて動的に調整できます。 これらの分析情報を使用することで、インテリジェント チューニングでは、ワークロードのパフォーマンスを向上させ、潜在的な落とし穴を回避するためのチューニング アクションがデプロイされます。
自動バキュームのチューニング
インテリジェント チューニングでは、自動バキュームに関連する 5 つのパラメーター (autovacuum_vacuum_scale_factor、autovacuum_cost_limit、autovacuum_naptime、autovacuum_vacuum_threshold、autovacuum_vacuum_cost_delay) を調整します。 これらのパラメーターは、以下のコンポーネントを調整します。
-
VACUUMプロセスを開始するテーブルの割合。 - コストベースのバキューム遅延限度。
- 自動バキューム実行間の一時停止間隔。
-
VACUUMプロセス開始に必要な更新済みタプルまたは使用されていないタプルの最小数。 - クリーンアップ ラウンド間の一時停止期間。
重要
インテリジェント チューニングでは、自動バキューム関連のパラメーターは、個々のテーブル レベルではなくサーバー レベルで変更されます。 また、自動バキュームがオフになっている場合、インテリジェント チューニングは正常に動作しません。 インテリジェント チューニングでプロセスを最適化するためには、自動バキューム機能を有効にする必要があります。
自動バキューム デーモンは 2 つの操作 (VACUUM および ANALYZE) をトリガーしますが、インテリジェント チューニングでは VACUUM プロセスのみを微調整します。 現在、この機能では、テーブルの内容に関する統計を収集する ANALYZE プロセスは調整されていません。これにより、Azure Database for PostgreSQL クエリ プランナーが最適なクエリ実行プランを選択するのに役立ちます。
インテリジェント チューニングには CPU や IOPS などのリソースの使用率を測定するセーフガードが含まれています。 インスタンスの負荷が高い場合には、自動バキューム アクティビティを増加させません。 このように、インテリジェント チューニングによって効果的なクリーンアップ操作と、システムの全体的なパフォーマンスのバランスが確保されます。
インテリジェント チューニングが自動バキュームを最適化する際には、有効なタプルと使用されていないタプルに関する統計を使用して、サーバーの平均的な肥大化を考慮します。 肥大化を軽減するために、インテリジェント チューニングでは "scale factor" や "naptime" などのパラメーターを引き下げることがあります。
VACUUM プロセスのトリガーを早め、必要に応じてラウンド間の遅延を短くすることもあります。
一方、肥大化が最小限で、自動バキューム プロセスが過剰になっている場合、インテリジェント チューニングが "delay"、"scale factor"、"naptime" などのパラメーターの値を上げる場合があります。 このバランスにより、肥大化を最小限に抑え、自動バキューム プロセスがリソースを効率的に使用できるようにします。
書き込みのチューニング
インテリジェント チューニングでは、書き込みチューニングに関連する 4 つのパラメーター (bgwriter_delay、checkpoint_completion_target、max_wal_size、min_wal_size) を調整します。
bgwriter_delay パラメーターは、バックグラウンド ライター プロセスが起動して "ダーティ" バッファー (新規または変更されたバッファー) をクリーンにする頻度を決定します。 バックグラウンド ライター プロセスは、書き込み操作を処理する Azure Database for PostgreSQL フレキシブル サーバー インスタンスの 3 つのプロセスのうちの 1 つです。 その他のプロセスは、チェックポインター プロセスとバックエンド書き込み (アプリケーション接続などの標準クライアント プロセス) です。
バックグラウンド ライター プロセスの主要な役割は、中心となるチェックポインター プロセスの負荷を軽減し、かつバックエンド書き込みの負担も軽減することです。
bgwriter_delay パラメーターは、バックグラウンド ライターのラウンドの頻度を制御します。 このパラメーターを調整することで、データ操作言語 (DML) クエリのパフォーマンス最適化も可能です。
checkpoint_completion_target パラメーターは、Azure Database for PostgreSQL フレキシブル サーバー インスタンスがサポートする 2 番目の書き込みメカニズム (特にチェックポイント 処理) の一部です。 チェックポイントは、checkpoint_timeout で定義される一定の間隔で発生します (構成された領域を超えたことで強制実行される場合を除く)。 ページ書き込みの急増に伴う I/O システムの過負荷を回避するために、チェックポイント中のダーティ バッファーの書き込みは一定期間にわたって分散されます。
checkpoint_completion_target パラメーターはこの期間の制御を、checkpoint_timeout を使用してチェックポイント間隔に対する割合として期間を指定することにより行います。
checkpoint_completion_target の既定値は 0.9 です (PostgreSQL 14 以降)。 この値では I/O 負荷が最大期間にわたって分散されるため、一般的に最適な動作が得られます。 まれに、必要な先書きログ (WAL) セグメントの数の予期しない変動が原因で、チェックポイントが時間内に終了しない場合があります。 潜在的なパフォーマンスへの影響が、インテリジェント チューニングにおいて checkpoint_completion_target がターゲット メトリックである理由です。
制限事項と既知の問題
- インテリジェント チューニングでは、特定の範囲でのみ最適化が行われます。 機能により変更が加えられない可能性があります。
- インテリジェント チューニングでは
ANALYZE設定は調節されません。 - 自動バキューム チューニングは現在、General Purpose および Memory Optimized のサーバー コンピューティング レベル (4 個以上の仮想コアを持つもの) に対してサポートされています。 バースト可能サーバー コンピューティング レベルはサポートされていません。
関連コンテンツ
- Azure portal を使用してインテリジェント チューニングを構成します。
- Azure Database for PostgreSQL のトラブルシューティング。
- Azure Database for PostgreSQL での自動バキューム チューニング。
- Azure Database for PostgreSQL での高い IOPS 使用率のトラブルシューティングを行います。
- Azure Database for PostgreSQL にデータを一括アップロードするためのベスト プラクティス。
- Azure Database for PostgreSQL での高い CPU 使用率のトラブルシューティングを行います。
- Azure Database for PostgreSQL の Query Performance Insight。