适用版本
OceanBase 数据库 V2.x、V3.x、V4.x 版本
操作步骤
登录 SYS 租户,执行如下命令打开 mem_leak 监控。
OceanBase 数据库 V2.x、V3.x 版本,可通过如下命令打开 mem_leak 监控。
obclient> alter system set leak_mod_to_check='OB_COMMON_ARRAY';OceanBase 数据库 4.0 及以上版本支持跟踪指定租户的指定模块内存,具体命令如下。
obclient> alter system set leak_mod_to_check='OB_COMMON_ARRAY@tenant_id';
等待内存模块增长一段时间后,执行如下 SQL 查看泄露堆栈。
obclient>SELECT * FROM oceanbase.__all_virtual_mem_leak_checker_info ORDER BY alloc_count DESC;找到
alloc_count最多的堆栈,通过addr2line获取函数名。addr2line -pCfe /home/admin/oceanbase/bin/observer xxxxx返回结果如下。
$oceanbase_root/src/lib/utility/utility.cpp:58 $oceanbase_root/src/lib/../../src/lib/allocator/ob_mem_leak_checker.h:125 $oceanbase_root/src/lib/allocator/ob_tc_malloc.cpp:399 $oceanbase_root/src/lib/allocator/ob_tc_malloc.cpp:218 $oceanbase_root/src/observer/../../src/lib/allocator/ob_malloc.h:38 $oceanbase_root/src/lib/allocator/ob_malloc.cpp:121 $oceanbase_root/src/lib/../../src/lib/allocator/ob_malloc.h:116 $oceanbase_root/src/sql/../../src/lib/container/ob_array.h:295 $oceanbase_root/src/sql/../../src/lib/container/ob_array.h:291 $oceanbase_root/src/sql/../../src/lib/container/ob_array.h:468 $oceanbase_root/src/sql/optimizer/ob_log_table_scan.cpp:85 $oceanbase_root/src/sql/optimizer/ob_log_plan.cpp:1183 $oceanbase_root/src/sql/optimizer/ob_log_plan.cpp:1484 $oceanbase_root/src/sql/optimizer/ob_log_plan.cpp:1557 $oceanbase_root/src/sql/optimizer/ob_log_plan.cpp:2092 $oceanbase_root/src/sql/optimizer/ob_select_log_plan.cpp:467 $oceanbase_root/src/sql/optimizer/ob_select_log_plan.cpp:455 $oceanbase_root/src/sql/optimizer/ob_select_log_plan.cpp:890 $oceanbase_root/src/sql/optimizer/ob_select_log_plan.cpp:378 $oceanbase_root/src/sql/optimizer/ob_select_log_plan.cpp:450 $oceanbase_root/src/sql/optimizer/ob_select_log_plan.cpp:568 $oceanbase_root/src/sql/optimizer/ob_optimizer.cpp:23 $oceanbase_root/src/sql/ob_sql.cpp:1160 $oceanbase_root/src/sql/ob_sql.cpp:887 $oceanbase_root/src/sql/ob_sql.cpp:152 $oceanbase_root/src/observer/mysql/obmp_query.cpp:263联系技术支持人员协助排查。
关闭 mem_leak。
打开 checker 后执行性能会显著下降,问题定位后及时将 checker 关闭。
obclient> alter system set leak_mod_to_check='';