ログ内で「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 queue[6]=0 queue[7]=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を最大で出力