IOPSリソースの分離を制御する前に、ディスク性能のキャリブレーションを行うことができます。IOPSの実際の性能精度に対する要件が高くない場合は、この手順をスキップできます。
説明
V4.3.5バージョンでは、V4.3.5 BP2バージョン以降、CPUおよびIOPSリソースの分離はディスク性能のキャリブレーション操作に強く依存しなくなりました。
IOPS基準値の計算
ディスク性能のキャリブレーションは、主にディスクのIOPS値を校正することです。IOPS基準値の計算式は以下の通りです:
IOPS基準値 = Min(ディスク制限のIOPS値, (目標帯域幅 / I/O操作のデータ量))
ここで、目標帯域幅の値は以下のいくつかの側面を考慮して決定する必要があります:
マシンの仕様、つまり実際に申請したディスクの制限帯域幅。
ビジネスにおけるRT(応答時間)の感度要件。
IO Managerが使用する帯域幅を差し引く必要があります。
通常、clog用に10~20MBの帯域幅を予約する必要があります。
16KBの読み取りデータを例にとると、ディスクの16KB読み取りデータに対応するIOPS基準値を計算する方法は以下の通りです。現在使用しているディスクの制限帯域幅が600MB、IOPSが30000であり、ビジネスがRTに対して高い感度を持つ場合、600MBをすべて使用するとジッター発生の確率が大幅に増加します。さらにclog用に予約された帯域幅を差し引き、総合的に考慮して目標帯域幅を400MBとします。16KBの読み取りデータを使用して計算した400MB帯域幅で達成可能な最大IOPSは(400 * 1024 KB)/16 KB=25600であるため、IOPS値を25600に校正できます。計算されたIOPS値がそのディスクのIOPS上限に達している場合、またはそれを超えている場合、例えば特定のディスクのIOPS上限が10000である場合は、IOPS値を10000に校正できます。
キャリブレーション方法
OceanBaseデータベースのディスク性能キャリブレーション機能は、OBServerノードが配置されるディスクの読み書き性能を校正するために使用されます。OceanBaseデータベースは現在、以下の2つの方法でディスク性能のキャリブレーションをサポートしています:
自動キャリブレーション:
JOBステートメントを使用してバックグラウンドタスクをトリガーし、自動的にキャリブレーションを行います。手動キャリブレーション:ディスクキャリブレーション情報を積極的に更新することで手動でキャリブレーションを行います。
自動キャリブレーション
現在のOceanBaseクラスタがアイドル状態で、かつディスクに十分な空き容量がある場合、JOB ステートメントを使用してバックグラウンドタスクをトリガーすることで、ディスク性能を自動的にキャリブレーションできます。この方法では、システムはデフォルトでデータディスクに対して1回のディスクキャリブレーションタスクを実行します。
rootユーザーでクラスタのsysテナントにログインします。接続例は以下のとおりです。データベースへの接続時は、実際の環境に基づいてください。
obclient -h10.xx.xx.xx -P2883 -uroot@sys#obdemo -p***** -Aより詳細なデータベース接続操作については、データベース接続の概要を参照してください。
ビジネスの使用シナリオに応じて、適切なコマンドを選択し、ディスクキャリブレーションタスクをトリガーします。
クラスタ内のすべてのOBServerノードに対してディスクキャリブレーションタスクをトリガーします
ALTER SYSTEM RUN JOB "job_name";ここで、
job_nameは指定されたバックグラウンドタスク名です。ディスクキャリブレーションタスクに対応するバックグラウンドタスク名はio_calibrationです。例:
ALTER SYSTEM RUN JOB "io_calibration";指定されたZone内のすべてのOBServerノードに対してディスクキャリブレーションタスクをトリガーします
ステートメントは次のとおりです:
ALTER SYSTEM RUN JOB "job_name" ZONE [=] zone_name;関連パラメータの説明は以下のとおりです:
job_name:指定されたバックグラウンドタスク名。ディスクキャリブレーションタスクに対応するバックグラウンドタスク名はio_calibrationです。zone_name:ディスクキャリブレーションタスクをトリガーするZoneを指定します。現在は1つのZoneのみを指定できます。
例:
ALTER SYSTEM RUN JOB "io_calibration" ZONE = zone1;指定された特定のOBServerノードに対してディスクキャリブレーションタスクをトリガーします
ステートメントは次のとおりです:
ALTER SYSTEM RUN JOB "job_name" SERVER [=] 'svr_ip:svr_port';関連パラメータの説明は以下のとおりです:
job_name:指定されたバックグラウンドタスク名。ディスクキャリブレーションタスクに対応するバックグラウンドタスク名はio_calibrationです。svr_ip:ディスクキャリブレーションタスクをトリガーするOBServerノードのIPアドレス。現在は1つのOBServerノードのみを指定できます。svr_port:ディスクキャリブレーションタスクをトリガーするOBServerノードのRPCポート。
例:
ALTER SYSTEM RUN JOB "io_calibration" SERVER = 'xx.xx.xx.1:2882';
ディスクI/Oキャリブレーションのステータスを確認します。
ディスクキャリブレーションタスクをトリガーした後、
GV$OB_IO_CALIBRATION_STATUSまたはV$OB_IO_CALIBRATION_STATUSビューを使用してI/Oキャリブレーションのステータスを確認できます。SELECT * FROM oceanbase.V$OB_IO_CALIBRATION_STATUS;クエリ結果は次のとおりです:
+----------------+----------+--------------+-------------+----------------------------+-------------+ | SVR_IP | SVR_PORT | STORAGE_NAME | STATUS | START_TIME | FINISH_TIME | +----------------+----------+--------------+-------------+----------------------------+-------------+ | xx.xx.xx.197 | 2882 | DATA | IN PROGRESS | 2023-06-27 14:30:38.393482 | NULL | +----------------+----------+--------------+-------------+----------------------------+-------------+ 1 row in setディスクI/Oキャリブレーションのステータスには、以下のような種類があります:
NOT AVAILABLE:I/Oキャリブレーションが開始されていないことを示します。IN PROGRESS:I/Oキャリブレーションが進行中であることを示します。READY:I/Oキャリブレーションが完了したことを示します。FAILED:I/Oキャリブレーションの実行に失敗したことを示します。
クエリ結果から、
STATUSフィールドの値がIN PROGRESSであることがわかります。これは、ディスクI/Oキャリブレーションが進行中であることを示します。ディスクI/Oキャリブレーションが完了すると、STATUSフィールドの値はREADYに変わり、ディスクキャリブレーションが完了したことを示します。同時に、FINISH_TIMEフィールドに完了時間が表示されます。+----------------+----------+--------------+--------+----------------------------+----------------------------+ | SVR_IP | SVR_PORT | STORAGE_NAME | STATUS | START_TIME | FINISH_TIME | +----------------+----------+--------------+--------+----------------------------+----------------------------+ | xx.xx.xx.197 | 2882 | DATA | READY | 2023-06-27 14:25:20.202022 | 2023-06-27 14:27:00.398748 | +----------------+----------+--------------+--------+----------------------------+----------------------------+ 1 row in setディスクI/Oキャリブレーションが有効になっているかどうかを確認します。
ディスクI/Oキャリブレーションが完了した後、
GV$OB_IO_BENCHMARKまたはV$OB_IO_BENCHMARKビューを使用して、ディスクI/Oキャリブレーションが有効になっているかどうかを確認できます。SELECT * FROM oceanbase.GV$OB_IO_BENCHMARK;クエリ結果の例は次のとおりです:
+----------------+----------+--------------+-------+---------+--------+------+---------+ | SVR_IP | SVR_PORT | STORAGE_NAME | MODE | SIZE | IOPS | MBPS | LATENCY | +----------------+----------+--------------+-------+---------+--------+------+---------+ | xx.xx.xx.197 | 2882 | DATA | READ | 4096 | 124648 | 486 | 128 | | xx.xx.xx.197 | 2882 | DATA | READ | 8192 | 118546 | 926 | 134 | | xx.xx.xx.197 | 2882 | DATA | READ | 16384 | 98870 | 1544 | 161 | | xx.xx.xx.197 | 2882 | DATA | READ | 32768 | 73857 | 2308 | 216 | | xx.xx.xx.197 | 2882 | DATA | READ | 65536 | 48015 | 3000 | 332 | | xx.xx.xx.197 | 2882 | DATA | READ | 131072 | 33780 | 4222 | 473 | | xx.xx.xx.197 | 2882 | DATA | READ | 262144 | 20650 | 5162 | 774 | | xx.xx.xx.197 | 2882 | DATA | READ | 524288 | 12111 | 6055 | 1321 | | xx.xx.xx.197 | 2882 | DATA | READ | 1048576 | 6237 | 6237 | 2565 | | xx.xx.xx.197 | 2882 | DATA | READ | 2097152 | 2762 | 5524 | 5795 | | xx.xx.xx.197 | 2882 | DATA | WRITE | 4096 | 49771 | 194 | 321 | | xx.xx.xx.197 | 2882 | DATA | WRITE | 8192 | 48566 | 379 | 329 | | xx.xx.xx.197 | 2882 | DATA | WRITE | 16384 | 42784 | 668 | 373 | | xx.xx.xx.197 | 2882 | DATA | WRITE | 32768 | 35187 | 1099 | 454 | | xx.xx.xx.197 | 2882 | DATA | WRITE | 65536 | 24892 | 1555 | 642 | | xx.xx.xx.197 | 2882 | DATA | WRITE | 131072 | 12720 | 1590 | 1257 | | xx.xx.xx.197 | 2882 | DATA | WRITE | 262144 | 6889 | 1722 | 2322 | | xx.xx.xx.197 | 2882 | DATA | WRITE | 524288 | 3452 | 1726 | 4636 | | xx.xx.xx.197 | 2882 | DATA | WRITE | 1048576 | 1689 | 1689 | 9481 | | xx.xx.xx.197 | 2882 | DATA | WRITE | 2097152 | 876 | 1752 | 18296 | +----------------+----------+--------------+-------+---------+--------+------+---------+ 20 rows in set関連フィールドの説明は以下のとおりです:
STORAGE_NAME:ストレージ名を示します。DATAはデータディスクを示します。MODE:I/Oモードが読み取りまたは書き込みであることを示します。SIZE:単一のI/Oリクエストのデータ量をバイト単位で示します。IOPS:1秒間に完了するI/Oリクエストの数を示します。MBPS:ディスク帯域幅をMB/s単位で示します。LATENCY:ディスクの応答時間をus単位で示します。
手動キャリブレーション
現在のOceanBaseクラスタに負荷がある場合、ディスクキャリブレーション情報をアクティブに更新することで、ディスク性能を手動でキャリブレーションできます。
rootユーザーでクラスタのsysテナントにログインします。接続例は以下のとおりです。データベースへの接続時は、実際の環境に基づいてください。
obclient -h10.xx.xx.xx -P2883 -uroot@sys#obdemo -p***** -Aデータベース接続の詳細な操作ガイドについては、データベース接続の概要を参照してください。
ビジネスの使用シナリオに応じて、適切なコマンドを選択し、ディスクキャリブレーション情報をアクティブに更新します。
クラスタ内のすべてのOBServerノードのディスク性能情報を一度更新
ALTER SYSTEM REFRESH IO CALIBRATION [STORAGE [=] 'storage_name'] [CALIBRATION_INFO [=] ("mode : size : latency : iops" [, "mode : size : latency : iops"])];クラスタ内のすべてのOBServerノードのディスク性能情報をクリア
ALTER SYSTEM REFRESH IO CALIBRATION [STORAGE [=] 'storage_name'] CALIBRATION_INFO = ("");指定されたZone内のすべてのOBServerノードのディスクキャリブレーション情報を一度更新
ALTER SYSTEM REFRESH IO CALIBRATION [STORAGE [=] 'storage_name'] [CALIBRATION_INFO [=] ("mode : size : latency : iops "[, "mode : size : latency : iops"])] ZONE [=] zone_name;指定されたOBServerノードのディスクキャリブレーション情報を一度更新
ALTER SYSTEM REFRESH IO CALIBRATION [STORAGE [=] 'storage_name'] [CALIBRATION_INFO [=] ("mode : size : latency : iops" [, "mode : size : latency : iops"])] SERVER [=] 'svr_ip:svr_port';
関連パラメータの説明は以下のとおりです:
STORAGE:OceanBaseデータベースのストレージディスク名を指定します。現在はDATAのみサポートされており、これはデータディスクを指します。CALIBRATION_INFO:更新対象のディスクキャリブレーション情報を指定します。指定しない場合、デフォルトでは内部テーブルからディスク性能情報を更新します。CALIBRATION_INFOリストでは、読み取りモードに少なくとも1件のレコードを指定する必要があります。そうでない場合、システムはエラーを報告します。説明
ディスクキャリブレーション情報を指定する際、関連するディスクのストレステストデータがない場合は、FIOツールを使用してパフォーマンスストレステストを実行して、現在のディスクのパフォーマンスデータを取得できます。FIOツールの詳細な紹介と使用方法については、FIOツール公式サイトを参照してください。
mode:I/Oモードを指定します。r、w、read、またはwriteをサポートします。size:単一のI/Oリクエストのデータ量を指定します。設定時には、単位を含む値を指定する必要があります。例:4K。単位はK、KB、M、MB、G、GBをサポートします。latency:ディスクの応答時間を指定します。デフォルトの単位は秒です。指定された値が純粋な数字の場合、その単位はデフォルトで秒となります。設定時には単位を指定し、デフォルトの単位を使用しないよう強く推奨します。単位はus、ms、s、min、hをサポートします。iops:1秒間に完了するI/Oリクエストの数を指定します。単位は1です。
zone_name:ディスクキャリブレーション情報を更新するZoneを指定します。現在は1つのZoneのみ指定できます。svr_ip:ディスクキャリブレーション情報を更新するOBServerノードのIPアドレスを指定します。svr_port:ディスクキャリブレーション情報を更新するOBServerノードのRPCポートを指定します。
例:
クラスタ内のすべてのOBServerノードのデータディスクのディスク性能情報を内部テーブルから一度更新
ALTER SYSTEM REFRESH IO CALIBRATION;クラスタ内のすべてのOBServerノードのデータディスクのディスク性能情報をクリア
ALTER SYSTEM REFRESH IO CALIBRATION CALIBRATION_INFO = ("");zone1内のすべてのOBServerノードのデータディスクのディスクキャリブレーション情報を一度更新ALTER SYSTEM REFRESH IO CALIBRATION STORAGE = 'DATA' CALIBRATION_INFO = ("read:4K:100us:200000","write:2M:5ms:1500") ZONE = zone1;この例では、更新されるディスクキャリブレーション情報は次のとおりです:4KBのデータランダム読み取りのRTは100マイクロ秒、IOPSは200000、2MBのデータランダム書き込みのRTは5ミリ秒、IOPSは1500です。
指定されたOBServerノードのデータディスクのディスクキャリブレーション情報を一度更新
ALTER SYSTEM REFRESH IO CALIBRATION STORAGE = 'DATA' CALIBRATION_INFO = ("read:4K:100us:200000","write:2M:5ms:1500") SERVER = 'xx.xx.xx.1:2882';
ディスクI/Oキャリブレーションが有効になっているかどうか確認します。
ディスクキャリブレーション情報の更新が完了したら、
GV$OB_IO_BENCHMARKまたはV$OB_IO_BENCHMARKビューを使用して、ディスクI/Oキャリブレーションが有効になっているかどうか確認できます。SELECT * FROM oceanbase.GV$OB_IO_BENCHMARK;クエリ結果の例は次のとおりです:
+----------------+----------+--------------+-------+---------+--------+------+---------+ | SVR_IP | SVR_PORT | STORAGE_NAME | MODE | SIZE | IOPS | MBPS | LATENCY | +----------------+----------+--------------+-------+---------+--------+------+---------+ | xx.xx.xx.197 | 2882 | DATA | READ | 4096 | 200000 | 781 | 100 | +----------------+----------+--------------+-------+---------+--------+------+---------+ 1 rows in set関連フィールドの説明は以下のとおりです:
STORAGE_NAME:ストレージ名を表します。DATAはデータディスクを表します。MODE:I/Oモードが読み取りまたは書き込みであることを表します。SIZE:単一のI/Oリクエストのデータ量を表します。単位はバイトです。IOPS:1秒間に完了するI/Oリクエストの数を表します。MBPS:ディスク帯域幅を表します。単位はMB/sです。LATENCY:ディスクの応答時間を表します。単位はマイクロ秒です。