observerが配置されているノードのI/O負荷が高くなる原因は多岐にわたります。トラフィックの増加以外では、通常は移行レプリケーションやメジャーコンパクションなどの要因が重なって発生します。対処のアプローチとしては、一般的にI/O負荷の高いワークロードをダウングレードすることが考えられます。本記事では、さまざまな状況について詳細に分析します。
緊急時の対応手順
ノードのディスクI/Oが高すぎる場合、一般的にI/O負荷の高いワークロードをダウングレードすることが対処のアプローチです。具体的な手順は以下のように分類されます。
実行中のメジャーコンパクションを一時停止します。
ディスクI/Oが高すぎるノードでメジャーコンパクションが実行中の場合、I/O負荷を軽減するために一時停止できます。メジャーコンパクションを一時停止するコマンドは以下のとおりです:
ALTER SYSTEM SUSPEND MERGE [ZONE [=] 'zone'];I/O負荷が軽減された後、必要に応じてメジャーコンパクションを再開できます。構文は以下のとおりです:
ALTER SYSTEM RESUME MERGE [ZONE [=] 'zone'];実行中のバックアップタスクを一時停止します。
OCPを使用して、現在のノードでバックアップが実行されているかどうかを確認できます。もしそうであれば、I/O負荷を軽減するためにバックアップを一時停止できます。
実行中のデータ転送またはインポート/エクスポートタスクを一時停止します。
OCPのTOPSQLやセッション管理機能を使用して、バッチ書き込み中のSQLを直接調査できます。バッチタスクがどのシステムから来ているかを迅速に判断できない場合は、OMSを使用して、現在のノードでデータ転送タスクが実行されているかどうかを確認できます。もしそうであれば、必要に応じて一時停止し、I/O負荷を軽減した後に実行を続けることができます。
詳細については、データ移行プロジェクトの管理を参照してください。
また、ODCを使用して、現在のノードでデータ導入が実行されているかどうかを確認できます。ODCのチケットタブでインポートをクリックしてタスクリストを表示します。インポートタスクが実行待ちの場合、必要に応じてタスクを終了できます。さらに、他のサードパーティのビッグデータプラットフォームやDataXコンポーネントにも定期的に実行されるタスクが存在する可能性があります。必要に応じて手動で停止できます。
ダンプスレッド数を削減します。
ダンプ時の並列度が高すぎると、ディスクのI/Oが増加します。
compaction_high_thread_scoreは並列ダンプスレッド数を制御するパラメータであり、このパラメータ値を下げることでディスクのI/O利用率を低下させることができます。このパラメータのデフォルト値は0で、適応型を意味します。64Cの場合は通常10ですが、状況に応じて小さく調整できます。このパラメータを変更しても再起動なしで即時に反映されます。構文は以下のとおりです:ALTER SYSTEM SET compaction_high_thread_score= 5;変更が成功した後、
SHOW PARAMETERSステートメントを使用して変更が正しく行われたかどうかを確認できます。SHOW PARAMETERS LIKE 'compaction_high_thread_score';バックグラウンドタスクのネットワーク帯域幅を削減します。
以下のコマンドを使用して、バックグラウンドタスクのネットワーク帯域幅を削減できます:
ALTER SYSTEM SET sys_bkgd_net_percentage=30; --デフォルト値 60ロードの高いSQLの実行を制限し、インデックスを追加します。
ディスクI/Oが高すぎる場合、特定のSQLを特定したら、SQLの実行計画にhint max_concurrentを追加してSQLの並列を制限し、SQLの制限を実現できます。
インデックスの欠落による全表スキャンがI/Oの上昇を引き起こしている場合、必要に応じて関連するテーブルにインデックスを追加できます。
実行中のインデックス作成をキャンセルします。
現在のクラスタで大規模テーブルのインデックス作成が実行されている場合、状況に応じてキャンセルし、クラスタが回復した後に再度作成できます。