パフォーマンスチューニング手法
理想的には、バックアップ・リカバリのパフォーマンスはデータの分布(パーティション数とパーティションサイズ)およびハードウェア(CPU、ディスク、ネットワーク)の性能にのみ制限されるべきですが、デフォルト設定ではハードウェアの性能を十分に活用できない場合があります。そのため、OceanBaseデータベースではリソース分離ポリシーと以下の構成パラメータを提供し、バックアップ・リカバリのパフォーマンスチューニングを行います。
ネットワーク設定:構成パラメータ
sys_bkgd_net_percentageは、バックグラウンドシステムタスク(バックアップ・リカバリタスクを含む)が使用できる総ネットワーク帯域幅の割合を制限するために使用されます。sys_bkgd_net_percentageを適切な値に設定することで、フロントエンド業務に影響を与えることなく、バックアップ・リカバリタスクがネットワーク帯域幅リソースを最大限に活用できるようになります。CPU、I/O設定:同時に、OceanBaseデータベースはResource Managerによるリソース分離メカニズムも提供しており、異なるタイプのタスクのCPUおよびI/O使用量を制限します。バックアップ・リカバリタスクにリソース分離を設定した場合は、実際のリソースとビジネス要件に基づいて上限を設定し、バックアップ・リカバリタスクのCPUおよびI/O使用量がボトルネックに達するのを防ぐ必要があります。
その他の設定:CPU、I/O、およびネットワークリソースが十分であることを確保した上で、関連する構成パラメータ(
ha_low_thread_score、log_archive_concurrency、log_restore_concurrency、ha_high_thread_scoreなど)を設定することで、バックアップ・リカバリタスクの並列処理を向上させ、さらにパフォーマンスを高めることができます。
リソース構成関連
クラスタレベルの構成パラメータ sys_bkgd_net_percentage
構成パラメータ sys_bkgd_net_percentage は、バックグラウンドシステムタスクが使用できるネットワーク帯域幅の割合を設定します。デフォルト値はマシンのNIC速度の60%です。帯域幅が上限の場合、業務リクエストに影響を与えない範囲で、構成パラメータ sys_bkgd_net_percentage の値を適宜引き上げることができます。
設定が成功した後、次の方法でログを確認できます:
adminユーザーでOBServerノードが存在するマシンにログインします。OceanBaseデータベースソフトウェアのインストールディレクトリに移動します。
以下は、OceanBaseデータベースソフトウェアのインストールパスが
/home/admin/oceanbase/である場合の例です。実際の環境に基づいて操作してください。[admin@xxx /]$ cd /home/admin/oceanbase以下のコマンドを実行して、NIC速度を確認します。
[admin@xxx oceanbase]$ grep -E 'print band limit|succeed to init_bandwidth_throttle' log/observer.log*ここで、
observer.logはクラスタ起動時のobserverログです。たとえば、クエリ結果は次のとおりです:
log/observer.log.20210811100806:[2021-08-11 10:06:32.934433] INFO [SERVER] ob_server.cpp:1783 [76957] [0] [Y0-0000000000000000] [lt=4] [dc=0] succeed to init_bandwidth_throttle(sys_bkgd_net_percentage_=60,ethernet_speed_=1310720000,rate=786432000) log/observer.log.20210811100806:[2021-08-1110:07:42.351813] INFO [COMMON] utility.cpp:1487 [77169][418] [Y9FA64586E9E-0005C93F15DAE715] [lt=11] [dc=0] print band limit(comment= in , copy_KB=0, sleep_ms_sum=0, speed_KB_per_s=0, total_sleep_ms=0,total__bytes=531, rate_KB/s=786432,print_interval_ms=69417)最初のクエリ結果では、
sys_bkgd_net_percentage_=60はバックグラウンドシステムタスクが使用できるネットワーク帯域幅がマシンのNIC速度の60%であることを示します。network_speed=1310720000は、OceanBaseデータベースが認識するマシンのNICの最大速度が1310720000 B/sであることを示します。rate=786432000は、制限後の最大速度が786432000 B/sであり、かつrate = network_speed * sys_bkgd_net_percentageであることを示します。2番目のクエリ結果では、
rate_KB/s=786432は、OceanBaseデータベースが認識する制限後の最大速度(rate)が786432 KB/sであることを示します。
OceanBaseデータベースが認識するNIC速度が不正確な場合があるため、ログを確認した後、OceanBaseデータベースが認識する速度と実際の速度が一致しない場合は、NIC速度の確認 を参照して変更することができます。
変更後、ビュー V$OB_NIC_INFO を確認して、変更後のNIC速度が有効になっているかどうかを確認できます。
Resource Managerのリソース分離
Resource ManagerはOceanBaseデータベースのリソース分離メカニズムであり、関数レベルのリソース分離を通じて、CPU、IOPS、ネットワーク帯域幅など、異なるバックグラウンドタスクのリソース上限を設定できます。リソース分離の詳細については、リソース分離の概要を参照してください。
関数レベルのリソース分離において、バックアップ・リカバリに関連するバックグラウンドタスクは以下のとおりです:
- ha_high:レプリケーション、Rebuild、リカバリなど、高優先度かつ高信頼性のタスク。
- ha_mid:ミグレーションタスクなど、中優先度かつ高信頼性のタスク。
- ha_low:バックアップやバックアップクリーンアップなど、低優先度かつ高信頼性のタスク。
ビューDBA_OB_RSRC_DIRECTIVESを使用して、現在のテナントが設定したリソース分離計画を確認できます。クエリ結果が空の場合、テナントにリソース分離計画が設定されていないことを意味します。バックグラウンドタスクに対応するレコードが検索された場合、まずCPU、I/O、ネットワーク帯域幅などがボトルネックに達し、かつリソース分離の制限と一致しているかどうかを観察します。一致していることを確認したら、フロントエンド業務に影響を与えない範囲で、適宜リソース分離計画を変更することを推奨します。リソース計画の変更手順の詳細については、リソース管理計画の更新(MySQLモード)およびリソース管理計画の更新(Oracleモード)を参照してください。
バックアップ・リカバリのパフォーマンステストを実行する際には、リソース分離計画を設定することは推奨されません。
データバックアップ関連
| パラメータ | 説明 | デフォルト値 | 設定の説明 |
|---|---|---|---|
| ha_low_thread_score | テナントレベルのパラメータで、データバックアップの並列数を制御します。 | 0、デフォルトの並列数は2を表します | スペックの小さいテナント(テナントCPU ≤ 4C)にはデフォルト値を設定することを推奨します。スペックの大きいテナントは、まず10に設定し、バックアップ速度が遅い場合は必要に応じて2倍に調整できます。バックアップ復旧の性能テストを実行する際は、最大値の100に直接調整することを推奨します。 |
ログアーカイブ関連
| パラメータ | 説明 | デフォルト値 | 設定の説明 |
|---|---|---|---|
| log_archive_concurrency | テナントレベルのパラメータで、ログアーカイブの並列数を制御します。 | 0、現在のバージョンでは、テナントのMAX_CPUに基づいて以下の適応ルールでアーカイブワーカースレッド数を計算します。
|
大規模および小規模のテナントについても、デフォルト値を維持し、適応ルールに基づいてワーカースレッド数を計算することを推奨します。 |
物理復旧関連
| パラメータ | 説明 | デフォルト値 | 設定の説明 |
|---|---|---|---|
| log_restore_concurrency | テナントレベルのパラメータで、ログ復元の並列数を制御します。 | 0。テナントのMAX_CPUのコア数を並列数として使用します。 |
この構成パラメータの値を大きくすると、ワーカースレッドが増加し、同時にメモリリソースのオーバーヘッドも増加します。デフォルト値の0に統一して設定し、復元速度が遅い場合にのみ、マシンの実際のリソースに応じて適切に値を大きくすることを推奨します。 |
| ha_high_thread_score | テナントレベルのパラメータで、データ復元の並列数を制御します。 | 0。デフォルトの並列数は8を表します。 | パフォーマンステストではデフォルト値を使用し、バックアップ復元のパフォーマンステストを実行する場合は、最大値の100に調整することを推奨します。 |
| _restore_idle_time | クラスタレベルの非表示パラメータで、RS復元のスケジューリング間隔を制御します。 | 1m。1分を表します。 | 10sに調整すると、データ復元にかかる時間は数十秒から2分程度短縮されます。パフォーマンス要件が高い小規模テナント(テナントCPU ≤ 4C)に対して調整することを推奨します。そうでない場合は、効果は明らかではありません。 |
テーブル単位の復旧関連
物理復旧補助テナント段階
テーブル単位の復旧関連ビューの紹介に記載されているビューを使用して、このタスクに関連する一時的な補助テナントの名前を取得します。補助テナントの名前は、デフォルトでAUXをプレフィックスとして先頭に付けて識別されます。
テーブル単位の復旧における物理復旧補助テナント段階は、物理復旧と同じです。この段階に関連するパフォーマンスチューニングについては、本記事の物理復旧関連の内容を参照してください。
テナント間のテーブルエクスポート段階
| パラメータ | 説明 | デフォルト値 | 設定の説明 |
|---|---|---|---|
| ddl_thread_score | テナントレベルのパラメータで、テナントが属するOBServerノード上のテーブル単位の復旧スレッドプールの容量を制御します。 | 0、デフォルトのテーブル単位の復旧スレッドプールの容量は2を意味します |
|
| recover_table_concurrency | テナントレベルのパラメータで、複数のテーブルを並行して復旧する際の並列度を制御し、同時に実行できるテナント間のテーブルエクスポートの数を設定します。 | 0、デフォルトでは1つのテーブルがテナント間のテーブルエクスポートを実行できることを意味します | デフォルト値0に統一的に設定することを推奨します。さらに:
注意テナント間のテーブルエクスポートは、大量の一時ストレージ容量とメモリリソースを消費します。テナントのリソース状況に応じて適切に増やすことを推奨します。そのうち、一時ストレージ容量の消費はインデックス再構築段階で発生し、テーブルのデータ量が非常に大きい場合、大量の一時容量を消費する可能性があります。一時容量の消費が多いと、クエリ失敗、トランザクションロールバック、サービス利用不可などの問題が発生する可能性があります。 |
| recover_table_dop | テナントレベルのパラメータで、単一テーブルの復旧の並列度を制御します。 | 0、デフォルトの並列度は1を意味します | 8または16に統一的に設定することを推奨します。これにより、ほとんどのシナリオ要件を満たすことができます。 復旧対象のテーブルがデータ量の多い非パーティションテーブルである場合、または復旧対象のテーブルにデータ量の多いパーティションが存在する場合は、パーティションデータ量に応じて |