ログで「dump tenant info」というキーワードを検索すると、テナントの仕様、スレッド、キュー、リクエスト統計などの情報が確認できます。
説明
OceanBaseデータベースV4.xバージョンでは、このログは各テナントごとに30秒ごとに出力されます。3.xバージョン以下では、10秒ごとに出力されます。
この記事のログは、OceanBaseデータベースV4.xバージョンを例にしています。その他のバージョンでは、以下のログ例の一部のフィールドのみ含まれます。
grep 'dump tenant info.tenant={id:1002' log/observer.log | sed 's/,/,\n/g'
[2022-07-20 14:55:40.774143] INFO [SERVER.OMT] run1 (ob_multi_tenant.cpp:1993) [80700][MultiTenant][T0][Y0-0000000000000000-0-0] [lt=621]
dump tenant info(tenant={id:1002, // テナントID
tenant_meta:{unit:{tenant_id:1002, // tenant_metaはテナントメタデータで、Unit構成情報、SuperBlock、およびcreate_statusが含まれます
unit_id:1001, //Unit ID
has_memstore:true, // MemTableの有無
unit_status:"NORMAL", //Unitの状態: UNIT_NORMAL/UNIT_MIGRATE_IN/UNIT_MIGRATE_OUT/UNIT_MARK_DELETING/UNIT_WAIT_GC_IN_OBSERVER/UNIT_DELETING_IN_OBSERVER/UNIT_ERROR_STAT
config:{unit_config_id:1003, // Unitの構成ID
name:"2c2g", //Unit構成名
resource:{min_cpu:2, //Unit構成の最小CPU数
max_cpu:2, // Unit構成の最大CPU数
memory_size:"1.5GB", // Unit構成のメモリサイズ
log_disk_size:"5.4GB", // Unit構成のログディスクサイズ
min_iops:20000, // Unit構成の最小ディスクIOPS
max_iops:20000, // Unit構成の最大ディスクIOPS
iops_weight:2}}, // Unit構成のIOPS重み
mode:1, // CompatMode 0:MYSQL 1:ORACLE
create_timestamp:1658298418435426, // Unitの作成時間
is_removed:false}, // このUnitが削除マークされているかどうか
super_block:{tenant_id:1002, // ObTenantSuperBlock情報
replay_start_point:ObLogCursor{file_id=1, // テナントslogのログ再生ポイント
log_id=440,
offset=343322},
ls_meta_entry:[140](ver=0, // テナントls metaのslogチェックポイントエントリポイント
mode=0,
seq=139),
tablet_meta_entry:[141](ver=0, // テナントtablet metaのslogチェックポイントのエントリポイント
mode=0,
seq=140)},
create_status:1}, // テナントの作成状態: CREATING = 0,CREATE_COMMIT=1,CREATE_ABORT=2,DELETING=3,DELETE_COMMIT=4
unit_min_cpu:"2.000000000000000000e+00", //保証される最小CPUコア数
unit_max_cpu:"2.000000000000000000e+00", //制限上限の最大CPUコア数
slice:"0.000000000000000000e+00",
slice_remain:"0.000000000000000000e+00",
token_cnt:8, //スケジューラーが割り当てたToken数。1つのTokenは1つのワーカースレッドに変換されます
sug_token_cnt:8,
ass_token_cnt:8, //テナントが現在確認しているToken数(token_cntに基づいて確認され、通常は両者は等しい)
lq_tokens:2, //Large Query Tokenの数。token_cntに大規模リクエストの割合を掛けて設定します
used_lq_tokens:0, //現在LQ Tokenを保持しているWorker数
stopped:false, //テナントUnitが削除中かどうか
idle_us:6076629, //1ラウンド(10秒)中のワーカースレッドのアイドル総時間。いわゆるアイドルは、待機キューの時間のみを集計しています
recv_hp_rpc_cnt:1, //テナントが累計で受信した異なるレベルのRPCリクエスト数。hp(High)、np(Normal)、lp(Low)
recv_np_rpc_cnt:5,
recv_lp_rpc_cnt:0,
recv_mysql_cnt:24, //テナントが累計で受信したmysqlリクエスト数
recv_task_cnt:1, //テナントが累計で受信した内部タスク数
recv_large_req_cnt:0, //テナントが累計で予測した大規模リクエスト数。増加のみで、リセットされません。実際には再試行時に増加します。
tt_large_quries:0, //テナントが累計で処理した大規模リクエスト数。増加のみで、リセットされません。実際にはチェックポイントチェック時に増加します。
pop_normal_cnt:1024555,
actives:8, //アクティブワーカースレッド数。通常はWorkersと等しく、その差には以下が含まれます:テナントワーカースレッドキャッシュ + ワーカースレッドを持つ大規模リクエストキャッシュ
workers:8, //テナントが保持しているワーカースレッド数。実際にはworkers_ listのサイズです。
nesting workers:7, //テナントが保持しているネストリクエスト専用スレッド数。合計7個のスレッドが7つのネストレベルに対応します。
lq waiting workers:0, //大規模クエリと判断され、スケジューリングを待機しているワーカースレッド
req_queue:total_size=0 queue[0]=0 queue[1]=0 queue[2]=0 queue[3]=0 queue[4]=0 queue[5]=0 , //異なる優先順位のワークキュー。数字が小さいほど優先順位が高い
large queued:0, //現在予測されている大規模リクエスト数
multi_level_queue:total_size=0 queue[0]=0 queue[1]=0 queue[2]=0 queue[3]=0 queue[4]=0 queue[5]=0 queue[6]=0 queue[7]=0, queue[8]=0, queue[9]=0, //ネストリクエストを格納するワークキュー。1~7は7つのネストレベルに対応します(queue[5]はinnersqlリクエストも格納します)。
recv_level_rpc_cnt:cnt[0]=0 cnt[1]=0 cnt[2]=0 cnt[3]=0 cnt[4]=0 cnt[5]=0 cnt[6]=0 cnt[7]=0 cnt[8]=0 cnt[9]=0, //各ネストレベルで累計で受信したリクエスト数
group_map:group_id = 1, //Group_mapの後には、各group_idに対応するGroupのスレッドとキュー状況が続きます
queue_size = 0, //Groupキューのキュー状況
recv_req_cnt = 13526, //GroupがキューにPushした累計リクエスト数
pop_req_cnt = 13526, //GroupスレッドがPopした累計リクエスト数
token_cnt = 2, //Groupが割り当てたToken数。1つのTokenは1つのワーカースレッドに変換されます
min_token_cnt = 2,
max_token_cnt = 2,
ass_token_cnt = 2 , //Groupが現在確認しているToken数(token_cntに基づいて確認され、通常は両者は等しい)
rpc_stat_info: pcode=0x150a:cnt=1489 pcode=0x150b:cnt=1091}) //テナントが一定期間内に受信した最多RPC pcode。統計期間は10秒で、上位5つを表示します