Azure Database for PostgreSQL - フレキシブル サーバーでのインテリジェント チューニングの実行
適用対象: Azure Database for PostgreSQL - フレキシブル サーバー
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 およびメモリ最適化のサーバー コンピューティング レベル (4 個以上の仮想コアを持つもの) に対してサポートされています。 バースト可能のサーバー コンピューティング レベルはサポートされていません。
次のステップ
- Azure portal を使用して Azure Database for PostgreSQL - フレキシブル サーバー用のインテリジェント チューニングを構成する
- Azure CLI を使用して Azure Database for PostgreSQL - フレキシブル サーバー用のインテリジェント チューニングを構成する
- 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 - フレキシブル サーバー