暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

查看 OceanBase 执行计划

原创 Xiang 2023-08-13
1300

查看 OceanBase 执行计划

  • benchmarksql 使用时存在问题,使用sysbench tpcc 场景进行测试

sysbench

  • sysbench 压测基于已有的压测脚本
  • 关闭其他指标压测,仅压测 mysql
PRESSURE_CPU=0
PRESSURE_MEMORY=0
PRESSURE_IO=0
PRESSURE_MYSQL=1
MYSQL_PRESSURE_CMD_PATH='/data/mysql/mysql8.0/bin/mysql'
MYSQL_PRESSURE_LUA_PATH="/usr/share/sysbench"
MYSQL_PRESSURE_HOST="10.0.0.107"
MYSQL_PRESSURE_PORT=2883
MYSQL_PRESSURE_USER="root@tenant1"
MYSQL_PRESSURE_PASS="123456"
  • MySQL 仅压测 rw 场景
MYSQL_POINT_SELECT=0
MYSQL_RANDOM_POINTS=0
MYSQL_RANDOM_RANGES=0
MYSQL_READ_ONLY=0
MYSQL_UPDATE_INDEX=0
MYSQL_UPDATE_NO_INDEX=0

MYSQL_INSERT=0
MYSQL_DELETE=0
MYSQL_WRITE_ONLY=0
MYSQL_READ_WRITE=1

执行计划

查看 top 10 sql

> SELECT/*+ PARALLEL(15)*/ SQL_ID, COUNT(*) AS QPS, AVG(t1.elapsed_time) RT FROM oceanbase.gv$ob_sql_audit t1 WHERE tenant_id = 1004 AND IS_EXECUTOR_RPC = 0 AND request_time > (time_to_usec(now()) - 10000000) AND request_time < time_to_usec (now()) GROUP BY t1.sql_id ORDER BY QPS DESC LIMIT 10; +----------------------------------+------+------------+ | SQL_ID | QPS | RT | +----------------------------------+------+------------+ | 70921627094B876D04315FD77C21F5FE | 3490 | 1000.6057 | | 7E1FF0CE5912C76B191984028DE49EBA | 2581 | 3532.8260 | | 6C8667F5A8D653E0AF6CCDDAAFF4915F | 2274 | 3604.4415 | | 8432FCED79046784C575C596216F6539 | 2232 | 12703.6850 | | AF9BAC7C311EC65BB24E49AC6FF5681A | 2000 | 12404.7980 | | 19AAD9F2FE3CE0023298AB83F7E75775 | 1263 | 12653.7474 | | 1D0BA376E273B9D622641124D8C59264 | 1214 | 10633.9662 | | 6F3DA42A230FC6343C31B83131AC02B6 | 367 | 753.2289 | | F76982485FB62D7EDEC0D4588E2F3B39 | 367 | 3685.9700 | | 03BC3F7C4BD7567DABD25583CA325077 | 359 | 10854.3872 | +----------------------------------+------+------------+

查看执行计划

SELECT sum(ol_amount) AS sum_ol_amount FROM bmsql_order_line WHERE ol_w_id = 2 AND ol_d_id = 4 AND ol_o_id = 2119; SELECT s_quantity, s_data, s_dist_01, s_dist_02, s_dist_03, s_dist_04, s_dist_05, s_dist_06, s_dist_07, s_dist_08, s_dist_09, s_dist_10 FROM bmsql_stock WHERE s_w_id = 1 AND s_i_id = 44448 FOR UPDATE; UPDATE bmsql_stock SET s_quantity = 50, s_ytd = s_ytd + 1, s_order_cnt = s_order_cnt + 1, s_remote_cnt = s_remote_cnt + 0 WHERE s_w_id = 2 AND s_i_id = 70921627094B876D04315FD77C21F5FE;

对 elapsed 时间最长的前三条 sql 进行分析

> SELECT sql_id, count(*), round(avg(elapsed_time)) avg_elapsed_time, round(avg(execute_time)) avg_exec_time, s.svr_ip, s.svr_port, s.tenant_id, s.plan_id FROM gv$ob_sql_audit s WHERE 1=1 and request_time >= time_to_usec(DATE_SUB(current_timestamp, INTERVAL 30 MINUTE) ) GROUP BY sql_id order by avg_elapsed_time desc limit 3; +----------------------------------+----------+------------------+---------------+------------+----------+-----------+---------+ | sql_id | count(*) | avg_elapsed_time | avg_exec_time | svr_ip | svr_port | tenant_id | plan_id | +----------------------------------+----------+------------------+---------------+------------+----------+-----------+---------+ | 2756036DAFF4423527C4192A80F591E5 | 311 | 417189 | 2293 | 10.0.0.107 | 2882 | 1004 | 356 | | D3D31C011F9D33282BF87918562043E1 | 247 | 366126 | 1097 | 10.0.0.107 | 2882 | 1004 | 351 | | 35FEB706D54AC5519AC1549CEF760633 | 305 | 339323 | 1656 | 10.0.0.106 | 2882 | 1004 | 1675 | +----------------------------------+----------+------------------+---------------+------------+----------+-----------+---------+
  • 查询时间最长的一条
obclient [oceanbase]> select distinct query_sql from gv$ob_sql_audit where sql_id='D3D31C011F9D33282BF87918562043E1' \G *************************** 1. row *************************** query_sql: UPDATE sbtest4 SET k=k+? WHERE id=?
  • 分析执行计划
obclient [sbtest]> explain UPDATE sbtest4 SET k=k+1 WHERE id=200 ; +-------------------------------------------------------------------------------------------------+ | Query Plan | +-------------------------------------------------------------------------------------------------+ | ============================================= | | |ID|OPERATOR |NAME |EST.ROWS|EST.TIME(us)| | | --------------------------------------------- | | |0 |UPDATE | |1 |35 | | | |1 | TABLE GET|sbtest4|1 |3 | | | ============================================= | | Outputs & filters: | | ------------------------------------- | | 0 - output(nil), filter(nil) | | table_columns([{sbtest4: ({sbtest4: (sbtest4.id, sbtest4.k, sbtest4.c, sbtest4.pad)})}]), | | update([sbtest4.k=column_conv(INT,PS:(11,0),NOT NULL,cast(sbtest4.k + 1, INT(-1, 0)))]) | | 1 - output([sbtest4.id], [sbtest4.k], [sbtest4.c], [sbtest4.pad]), filter(nil), rowset=256 | | access([sbtest4.id], [sbtest4.k], [sbtest4.c], [sbtest4.pad]), partitions(p0) | | is_index_back=false, is_global_index=false, | | range_key([sbtest4.id]), range[200 ; 200], | | range_cond([sbtest4.id = 200]) | +-------------------------------------------------------------------------------------------------+
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论