试用 ob_admin 工具解析 clog

2024年 5月 7日 39.7k 0

这两天看到社区问答区有用户问到了一个 ob_admin 这个工具使用上的问题。之前从来没用过这个工具,这次就试着用一下这个 ob_admin,看看主要有哪些功能,顺便在这里做一个简单的记录。

安装

   先是按照官网资料安装一下 ob_admin,我这里直接通过源码编译安装。

   其中的 make 这步超级慢,条件允许的话,直接改成 make -j 32 ob_admin 去并行编译吧。

   最后 cp 这步,官网上写的路径好像有些小问题,不过大家肯定都能自己调整对。

[xiaofeng.lby@obvos-dev-d3 /home/xiaofeng.lby/work/obn/code_master]

bash build.sh debug --init

cd build_debug

make ob_admin

sudo cp tools/ob_admin/ob_admin /usr/local/bin

使用 log_tool 进行 clog 解析

   先执行一条 dml:insert into t1 values(1, 2);

   然后通过 oceanbase.__all_virtual_sql_audit 可以查到对应 dml 的 transaction_id。

select query_sql, transaction_id from oceanbase.__all_virtual_sql_audit where query_sql like 'insert%' order by request_time desc;
+-----------------------------+----------------+
| query_sql                   | transaction_id |
+-----------------------------+----------------+
| insert into t1 values(1, 2) |       11434882 |
+-----------------------------+----------------+
1 row in set (0.028 sec)

   找到对应的 clog 文件,对应租户(tenant_1002)下最新的这个文件应该就是了,一会儿需要用到这个路径。这里顺带学习了一下 clog 目录探究这篇社区博客。


[xiaofeng.lby@obvos-dev-d3 /data/xiaofeng.lby/obn.xiaofeng.lby.11.158.31.20.obs0.obn/clog/tenant_1002/1001/log]
$ls -ltr
-rw-r--r-- 1 xiaofeng.lby users 67108864 Sep 13 16:17 81

   最后参照 ob_admin log_tool 的官网文档来使用即可,输入 ob_admin log_tool 之后,会给出用法有哪些。

[xiaofeng.lby@obvos-dev-d3 /home/xiaofeng.lby/work/obn/code_master/build_debug]
$ob_admin log_tool
succ to open, filename=ob_admin.log, fd=3, wf_fd=2
old log_file need close, old = ob_admin.log new = ob_admin.log
succ to open, filename=ob_admin.log, fd=3, wf_fd=2
succ to open, filename=ob_admin_rs.log, fd=4, wf_fd=2
Usages:
$ob_admin log_tool dump_log log_files ## ./ob_admin log_tool dump_log log_files... ##将log文件中的内容全部打印出来
$ob_admin log_tool dump_tx_format log_files ## ./ob_admin log_tool dump_tx_format log_files ##将log文件中的事务相关内容以json格式打印
$ob_admin log_tool dump_filter 'filter_conditions' log_files ## ./ob_admin log_tool dump_filter 'tx_id=xxxx;tablet_id=xxx' '$path'## 按照过滤条件将log文件中的事务相关内容打印,目前支持按照事务id(tx_id=xxxx),tablet_id(tablet_id=xxxx)进行过滤,多个条件之间以;隔开
$ob_admin log_tool stat log_files ## ./ob_admin log_tool stat 1
$ob_admin log_tool dmp_meta log_files ## ./ob_admin log_tool dump_meta 1
一些注意事项:
1. 为避免在clog目录生成一些ob_amdin的输出文件,强烈建议使用绝对路径
2. log_files 支持绝对路径、相对路径
3. log_files 支持同时解析多个文件
4. 支持解析归档文件
5. 如何通过LSN快速定位日志:
   1. 获取文件ID: BLOCK_ID=LSN/(64MB-4KB)
   2. 根据LSN去输出文件中执行grep操作

   可以通过上面查到的 tx_id 进行过滤,不过结果不是 json 格式,不太好看。

[xiaofeng.lby@obvos-dev-d3 /home/xiaofeng.lby/work/obn/code_master/build_debug]
$ob_admin log_tool dump_filter 'tx_id=11434882' /data/xiaofeng.lby/obn.xiaofeng.lby.11.158.31.20.obs0.obn/clog/tenant_1002/1001/log/81

succ to open, filename=ob_admin.log, fd=3, wf_fd=2
old log_file need close, old = ob_admin.log new = ob_admin.log
succ to open, filename=ob_admin.log, fd=3, wf_fd=2
succ to open, filename=ob_admin_rs.log, fd=4, wf_fd=2
 { BlockId: 81: LSN: 5489661028  TxID: 11434882  scn: 1694591575020587545  TxBlockHeader: {org_cluster_id:1, log_entry_no:0, tx_id:{txid:11434882}, scheduler:"11.158.31.20:22602"}  ###<TxRedoLog>: { txctxinfo: {LOG_TYPE:1, mutator_size_:308, ctx_redo_info_.cluster_version_:17180000256}  MutatorMeta: 0x7ffead794a50 data_crc=af37ea8 meta_size=28 data_size=280 row_count=4  MutatorRows: { RowHeader: {mutator_type_str_:"MUTATOR_TABLE_LOCK", mutator_type_:1, tablet_id_:{id:49403}}  TableLock: {row_size:40, table_id:18446744073709551615, table_version:0, lock_id:{obj_type:2, obj_id:202273}, owner_id:{id:0}, mode:4, lock_type:1, seq_no:1694591575014936, create_timestamp:1694591575019964, create_schema_version:1694522384895568}  RowHeader: {mutator_type_str_:"MUTATOR_ROW", mutator_type_:0, tablet_id_:{id:202273}}  NORMAL_ROW: { RowKey: {"BIGINT UNSIGNED":10}  TableVersion: 1694522384895568  NewRow Cols: { 0: {len: 8, flag: 0, null: 0, ptr: 0x7ffead793978, hex: 0A00000000000000, int: 10}  1: {len: 8, flag: 0, null: 0, ptr: 0x7ffead7939b0, hex: 0100000000000000, int: 1, num_digit0: 0}  2: {len: 8, flag: 0, null: 0, ptr: 0x7ffead7939e8, hex: 0200000000000000, int: 2} }  OldRow Cols: {}  DmlFlag: INSERT  ModifyCount: 0  AccChecksum: 2829748958  Version: 1694590221627542  Flag: 0  SeqNo: 1694591575014936  NewRowSize: 27  OldRowSize: 0  ColumnCnt: 3 }  RowHeader: {mutator_type_str_:"MUTATOR_TABLE_LOCK", mutator_type_:1, tablet_id_:{id:49403}}  TableLock: {row_size:40, table_id:18446744073709551615, table_version:0, lock_id:{obj_type:2, obj_id:1152921504606849140}, owner_id:{id:0}, mode:4, lock_type:1, seq_no:1694591575014937, create_timestamp:1694591575020277, create_schema_version:1694522384895544}  RowHeader: {mutator_type_str_:"MUTATOR_ROW", mutator_type_:0, tablet_id_:{id:1152921504606849140}}  NORMAL_ROW: { RowKey: {"INT":1},{"BIGINT UNSIGNED":10}  TableVersion: 1694522384895568  NewRow Cols: { 0: {len: 8, flag: 0, null: 0, ptr: 0x7ffead793978, hex: 0100000000000000, int: 1, num_digit0: 0}  1: {len: 8, flag: 0, null: 0, ptr: 0x7ffead7939b0, hex: 0A00000000000000, int: 10} }  OldRow Cols: {}  DmlFlag: INSERT  ModifyCount: 0  AccChecksum: 1763018073  Version: 1694590221628685  Flag: 0  SeqNo: 1694591575014937  NewRowSize: 24  OldRowSize: 0  ColumnCnt: 2 } } }  ###<TxCommitInfoLog>: { Size: 40  Members: {LOG_TYPE:64, scheduler_:"11.158.31.20:22602", participants_:[{id:1001}], upstream_:{id:-1}, is_sub2pc_:false, is_dup_tx_:false, can_elr_:true, incremental_participants_:[], cluster_version_:17180000256, app_trace_id_str_:"", app_trace_info_:"", prev_record_lsn_:{lsn:18446744073709551615}, redo_lsns_:[], xid_:{gtrid_str:"", bqual_str:"", format_id:1, gtrid_str_.ptr():"data_size:0, data:", bqual_str_.ptr():"data_size:0, data:", g_hv:0, b_hv:0}} }  ###<TxCommitLog>: { Size: 30  Members: {LOG_TYPE:256, commit_version_:{val:18446744073709551615, v:3}, checksum_:2311708179, incremental_participants_:[], multi_source_data_:[], trans_type_:0, tx_data_backup_:{start_log_ts_:{val:18446744073709551615, v:3}}, prev_lsn_:{lsn:18446744073709551615}, ls_log_info_arr_:[]} } }

   也可以先不过滤,让结果是 json 格式,再在结果中 grep 一下之前查到的 tx_id 对应的数字 11434882。这种比上面的那种更易读。

{
    "BlockId": "81",
    "LSN": 5489661028,
    "TxID": 11434882,
    "scn": 1694591575020587545,
    "TxBlockHeader": "{org_cluster_id:1, log_entry_no:0, tx_id:{txid:11434882}, scheduler:\"11.158.31.20:22602\"}",
    "###<TxRedoLog>": {
        "txctxinfo": "{LOG_TYPE:1, mutator_size_:308, ctx_redo_info_.cluster_version_:17180000256}",
        "MutatorMeta": "0x7fff1e2bb2d0 data_crc=af37ea8 meta_size=28 data_size=280 row_count=4",
        "MutatorRows": {
            "RowHeader": "{mutator_type_str_:\"MUTATOR_TABLE_LOCK\", mutator_type_:1, tablet_id_:{id:49403}}",
            "TableLock": "{row_size:40, table_id:18446744073709551615, table_version:0, lock_id:{obj_type:2, obj_id:202273}, owner_id:{id:0}, mode:4, lock_type:1, seq_no:1694591575014936, create_timestamp:1694591575019964, create_schema_version:1694522384895568}",
            "RowHeader": "{mutator_type_str_:\"MUTATOR_ROW\", mutator_type_:0, tablet_id_:{id:202273}}",
            "NORMAL_ROW": {
                "RowKey": "{\"BIGINT UNSIGNED\":10}",
                "TableVersion": 1694522384895568,
                "NewRow Cols": {
                    "0": "{len: 8, flag: 0, null: 0, ptr: 0x7fff1e2ba1f8, hex: 0A00000000000000, int: 10}",
                    "1": "{len: 8, flag: 0, null: 0, ptr: 0x7fff1e2ba230, hex: 0100000000000000, int: 1, num_digit0: 0}",
                    "2": "{len: 8, flag: 0, null: 0, ptr: 0x7fff1e2ba268, hex: 0200000000000000, int: 2}"
                },
                "OldRow Cols": {},
                "DmlFlag": "INSERT",
                "ModifyCount": 0,
                "AccChecksum": 2829748958,
                "Version": 1694590221627542,
                "Flag": 0,
                "SeqNo": 1694591575014936,
                "NewRowSize": 27,
                "OldRowSize": 0,
                "ColumnCnt": 3
            },
            "RowHeader": "{mutator_type_str_:\"MUTATOR_TABLE_LOCK\", mutator_type_:1, tablet_id_:{id:49403}}",
            "TableLock": "{row_size:40, table_id:18446744073709551615, table_version:0, lock_id:{obj_type:2, obj_id:1152921504606849140}, owner_id:{id:0}, mode:4, lock_type:1, seq_no:1694591575014937, create_timestamp:1694591575020277, create_schema_version:1694522384895544}",
            "RowHeader": "{mutator_type_str_:\"MUTATOR_ROW\", mutator_type_:0, tablet_id_:{id:1152921504606849140}}",
            "NORMAL_ROW": {
                "RowKey": "{\"INT\":1},{\"BIGINT UNSIGNED\":10}",
                "TableVersion": 1694522384895568,
                "NewRow Cols": {
                    "0": "{len: 8, flag: 0, null: 0, ptr: 0x7fff1e2ba1f8, hex: 0100000000000000, int: 1, num_digit0: 0}",
                    "1": "{len: 8, flag: 0, null: 0, ptr: 0x7fff1e2ba230, hex: 0A00000000000000, int: 10}"
                },
                "OldRow Cols": {},
                "DmlFlag": "INSERT",
                "ModifyCount": 0,
                "AccChecksum": 1763018073,
                "Version": 1694590221628685,
                "Flag": 0,
                "SeqNo": 1694591575014937,
                "NewRowSize": 24,
                "OldRowSize": 0,
                "ColumnCnt": 2
            }
        }
    },
    "###<TxCommitInfoLog>": {
        "Size": 40,
        "Members": "{LOG_TYPE:64, scheduler_:\"11.158.31.20:22602\", participants_:[{id:1001}], upstream_:{id:-1}, is_sub2pc_:false, is_dup_tx_:false, can_elr_:true, incremental_participants_:[], cluster_version_:17180000256, app_trace_id_str_:\"\", app_trace_info_:\"\", prev_record_lsn_:{lsn:18446744073709551615}, redo_lsns_:[], xid_:{gtrid_str:\"\", bqual_str:\"\", format_id:1, gtrid_str_.ptr():\"data_size:0, data:\", bqual_str_.ptr():\"data_size:0, data:\", g_hv:0, b_hv:0}}"
    },
    "###<TxCommitLog>": {
        "Size": 30,
        "Members": "{LOG_TYPE:256, commit_version_:{val:18446744073709551615, v:3}, checksum_:2311708179, incremental_participants_:[], multi_source_data_:[], trans_type_:0, tx_data_backup_:{start_log_ts_:{val:18446744073709551615, v:3}}, prev_lsn_:{lsn:18446744073709551615}, ls_log_info_arr_:[]}"
    }
}

其他功能

   官网上说 ob_admin 还支持一些其他功能,这些就等后面有需求的时候再去试用了~

相关文章

pt-kill工具的使用
pt-ioprofile工具包的使用
数据库管理-第216期 Oracle的高可用-01(20240703)
DBMS_REPAIR EXAMPLE SCRIPT WITH PARTITION
数据库事务的四大特性: ACID 
使用BBED修复损坏的SYSTEM文件头

发布评论