利用tpcc-mysql工具对oceanbase压测,并查看sql执行计划
一、测试环境
三台openEuler release 20.03 (LTS-SP3)通过obd部署的1-1-1集群。 [root@node1 rx-0]# cat /etc/openEuler-release openEuler release 20.03 (LTS-SP3) [root@node1 rx-0]# df -Th Filesystem Type Size Used Avail Use% Mounted on devtmpfs devtmpfs 7.6G 0 7.6G 0% /dev tmpfs tmpfs 7.6G 0 7.6G 0% /dev/shm tmpfs tmpfs 7.6G 25M 7.6G 1% /run tmpfs tmpfs 7.6G 0 7.6G 0% /sys/fs/cgroup /dev/mapper/openeuler-root ext4 23G 20G 2.2G 90% / tmpfs tmpfs 7.6G 0 7.6G 0% /tmp /dev/sdb xfs 12G 2.2G 9.8G 19% /fcfs /dev/sda1 ext4 976M 244M 665M 27% /boot tmpfs tmpfs 1.6G 0 1.6G 0% /run/user/0 tmpfs tmpfs 1.6G 0 1.6G 0% /run/user/1001
复制
二、准备数据加载工具tpcc-mysql
git clone https://github.com/Percona-Lab/tpcc-mysql.git cd tpcc-mysql/src make
复制
三、测试环境相关设置
1、修改sys超时参数
obclient -uroot@sys -pobroot123 -h127.1 -P2883 -c -A oceanbase alter system set enable_auto_leader_switch=false; alter system set enable_one_phase_commit=false; alter system set enable_monotonic_weak_read = true; alter system set weak_read_version_refresh_interval='5s'; alter system _ob_minor_merge_schedule_interval='5s'; alter system set memory_limit_percentage = 90; alter system set memstore_limit_percentage = 55; alter system set freeze_trigger_percentage = 70; alter system set minor_freeze_times = 50; alter system set minor_warm_up_duration_time = 0; alter system set merge_thread_count = 32; alter system set minor_merge_concurrency = 8; alter system set _mini_merge_concurrency = 4;
复制
2、修改PROXY 参数
alter proxyconfig set proxy_mem_limited='4G'; --防止 oom,可根据实际环境动态调整 alter proxyconfig set enable_compression_protocol=false; --关闭压缩,降低 CPU 百分率 alter proxyconfig set work_thread_num=32; -- 调整工作线程数,寻找最优性能 alter proxyconfig set enable_compression_protocol=false; alter proxyconfig set enable_metadb_used=false; alter proxyconfig set enable_standby=false; alter proxyconfig set enable_strict_stat_time=false; alter proxyconfig set use_local_dbconfig=true;
复制
3. 查看当前集群资源使用情况:
MySQL [oceanbase]> select -> a.zone, -> concat(a.svr_ip, ':', a.svr_port) observer, -> cpu_total, -> (cpu_total-cpu_assigned) cpu_free, -> round(mem_total / 1024 / 1024 / 1024) mem_total_gb, -> round((mem_total-mem_assigned)/ 1024 / 1024 / 1024) mem_free_gb, -> usec_to_time(b.last_offline_time) last_offline_time, -> usec_to_time(b.start_service_time) start_service_time, -> b.status, -> b.build_version , -> usec_to_time(a.stop_time) stop_time -> from -> __all_virtual_server_stat a -> join __all_server b on -> (a.svr_ip = b.svr_ip -> and a.svr_port = b.svr_port) -> order by -> a.zone, -> a.svr_ip; +-------+-------------------+-----------+----------+--------------+-------------+----------------------------+----------------------------+--------+----------------------------------------------------------------------------------------+----------------------------+ | zone | observer | cpu_total | cpu_free | mem_total_gb | mem_free_gb | last_offline_time | start_service_time | status | build_version | stop_time | +-------+-------------------+-----------+----------+--------------+-------------+----------------------------+----------------------------+--------+----------------------------------------------------------------------------------------+----------------------------+ | zone1 | 192.168.56.7:2882 | 30 | 19.5 | 10 | 3 | 1970-01-01 08:00:00.000000 | 2022-02-20 08:22:51.343304 | active | 3.1.2_10000392021123010-d4ace121deae5b81d8f0b40afbc4c02705b7fc1d(Dec 30 2021 02:47:29) | 1970-01-01 08:00:00.000000 | | zone2 | 192.168.56.8:2882 | 30 | 19.5 | 10 | 3 | 1970-01-01 08:00:00.000000 | 2022-02-20 08:23:44.476628 | active | 3.1.2_10000392021123010-d4ace121deae5b81d8f0b40afbc4c02705b7fc1d(Dec 30 2021 02:47:29) | 1970-01-01 08:00:00.000000 | | zone3 | 192.168.56.9:2882 | 30 | 19.5 | 10 | 3 | 1970-01-01 08:00:00.000000 | 2022-02-20 08:23:36.482777 | active | 3.1.2_10000392021123010-d4ace121deae5b81d8f0b40afbc4c02705b7fc1d(Dec 30 2021 02:47:29) | 1970-01-01 08:00:00.000000 | +-------+-------------------+-----------+----------+--------------+-------------+----------------------------+----------------------------+--------+----------------------------------------------------------------------------------------+----------------------------+ 3 rows in set (0.041 sec)
复制
可用资源情况
MySQL [oceanbase]> select a.zone, concat(a.svr_ip, ':', a.svr_port) observer, cpu_total, cpu_assigned, (cpu_total-cpu_assigned) cpu_free, mem_total / 1024 / 1024 / 1024 mem_total_gb, mem_assigned / 1024 / 1024 / 1024 mem_assign_gb, (mem_total-mem_assigned)/ 1024 / 1024 / 1024 mem_free_gb from __all_virtual_server_stat a join __all_server b on (a.svr_ip = b.svr_ip and a.svr_port = b.svr_port) order by a.zone, a.svr_ip ; +-------+-------------------+-----------+--------------+----------+-----------------+----------------+----------------+ | zone | observer | cpu_total | cpu_assigned | cpu_free | mem_total_gb | mem_assign_gb | mem_free_gb | +-------+-------------------+-----------+--------------+----------+-----------------+----------------+----------------+ | zone1 | 192.168.56.7:2882 | 30 | 10.5 | 19.5 | 10.000000000000 | 7.000000000000 | 3.000000000000 | | zone2 | 192.168.56.8:2882 | 30 | 10.5 | 19.5 | 10.000000000000 | 7.000000000000 | 3.000000000000 | | zone3 | 192.168.56.9:2882 | 30 | 10.5 | 19.5 | 10.000000000000 | 7.000000000000 | 3.000000000000 | +-------+-------------------+-----------+--------------+----------+-----------------+----------------+----------------+ 3 rows in set (0.005 sec)
复制
MySQL [oceanbase]> select t1.name resource_pool_name, t2.`name` unit_config_name, t2.max_cpu, t2.min_cpu, t2.max_memory/1024/1024/1024 max_mem_gb, t2.min_memory/1024/1024/1024 min_mem_gb, t3.unit_id, t3.zone, concat(t3.svr_ip,':',t3.`svr_port`) observer,t4.tenant_id, t4.tenant_name -> from __all_resource_pool t1 join __all_unit_config t2 on (t1.unit_config_id=t2.unit_config_id) -> join __all_unit t3 on (t1.`resource_pool_id` = t3.`resource_pool_id`) -> left join __all_tenant t4 on (t1.tenant_id=t4.tenant_id) -> order by t1.`resource_pool_id`, t2.`unit_config_id`, t3.unit_id -> ; +--------------------+------------------+---------+---------+----------------+----------------+---------+-------+-------------------+-----------+-------------+ | resource_pool_name | unit_config_name | max_cpu | min_cpu | max_mem_gb | min_mem_gb | unit_id | zone | observer | tenant_id | tenant_name | +--------------------+------------------+---------+---------+----------------+----------------+---------+-------+-------------------+-----------+-------------+ | sys_pool | sys_unit_config | 5 | 2.5 | 2.399999999440 | 2.000000000000 | 1 | zone1 | 192.168.56.7:2882 | 1 | sys | | sys_pool | sys_unit_config | 5 | 2.5 | 2.399999999440 | 2.000000000000 | 2 | zone2 | 192.168.56.8:2882 | 1 | sys | | sys_pool | sys_unit_config | 5 | 2.5 | 2.399999999440 | 2.000000000000 | 3 | zone3 | 192.168.56.9:2882 | 1 | sys | | pool1 | unit1 | 8 | 4 | 5.000000000000 | 3.000000000000 | 1001 | zone1 | 192.168.56.7:2882 | 1001 | t_obdemo | | pool1 | unit1 | 8 | 4 | 5.000000000000 | 3.000000000000 | 1002 | zone2 | 192.168.56.8:2882 | 1001 | t_obdemo | | pool1 | unit1 | 8 | 4 | 5.000000000000 | 3.000000000000 | 1003 | zone3 | 192.168.56.9:2882 | 1001 | t_obdemo | +--------------------+------------------+---------+---------+----------------+----------------+---------+-------+-------------------+-----------+-------------+ 6 rows in set (0.004 sec)
复制
修改资源单元规格,cpu,memory大小一致
MySQL [oceanbase]> alter resource unit unit1 min_cpu 8,min_memory '5g'; Query OK, 0 rows affected (0.009 sec)
复制
修改后
MySQL [oceanbase]> select t1.name resource_pool_name, t2.`name` unit_config_name, t2.max_cpu, t2.min_cpu, t2.max_memory/1024/1024/1024 max_mem_gb, t2.min_memory/1024/1024/1024 min_mem_gb, t3.unit_id, t3.zone, concat(t3.svr_ip,':',t3.`svr_port`) observer,t4.tenant_id, t4.tenant_name -> from __all_resource_pool t1 join __all_unit_config t2 on (t1.unit_config_id=t2.unit_config_id) -> join __all_unit t3 on (t1.`resource_pool_id` = t3.`resource_pool_id`) -> left join __all_tenant t4 on (t1.tenant_id=t4.tenant_id) -> order by t1.`resource_pool_id`, t2.`unit_config_id`, t3.unit_id -> ; +--------------------+------------------+---------+---------+----------------+----------------+---------+-------+-------------------+-----------+-------------+ | resource_pool_name | unit_config_name | max_cpu | min_cpu | max_mem_gb | min_mem_gb | unit_id | zone | observer | tenant_id | tenant_name | +--------------------+------------------+---------+---------+----------------+----------------+---------+-------+-------------------+-----------+-------------+ | sys_pool | sys_unit_config | 5 | 2.5 | 2.399999999440 | 2.000000000000 | 1 | zone1 | 192.168.56.7:2882 | 1 | sys | | sys_pool | sys_unit_config | 5 | 2.5 | 2.399999999440 | 2.000000000000 | 2 | zone2 | 192.168.56.8:2882 | 1 | sys | | sys_pool | sys_unit_config | 5 | 2.5 | 2.399999999440 | 2.000000000000 | 3 | zone3 | 192.168.56.9:2882 | 1 | sys | | pool1 | unit1 | 8 | 8 | 5.000000000000 | 5.000000000000 | 1001 | zone1 | 192.168.56.7:2882 | 1001 | t_obdemo | | pool1 | unit1 | 8 | 8 | 5.000000000000 | 5.000000000000 | 1002 | zone2 | 192.168.56.8:2882 | 1001 | t_obdemo | | pool1 | unit1 | 8 | 8 | 5.000000000000 | 5.000000000000 | 1003 | zone3 | 192.168.56.9:2882 | 1001 | t_obdemo | +--------------------+------------------+---------+---------+----------------+----------------+---------+-------+-------------------+-----------+-------------+ 6 rows in set (0.002 sec) MySQL [oceanbase]> \q Bye
复制
4、租户超时参数设置
[root@node1 rx-0]# obclient -h192.168.56.7 -uroot@t_obdemo -P2883 -c -A -p Enter password: Welcome to the OceanBase. Commands end with ; or \g. Your MySQL connection id is 6 Server version: 5.6.25 OceanBase 3.1.2 (r10000392021123010-d4ace121deae5b81d8f0b40afbc4c02705b7fc1d) (Built Dec 30 2021 02:47:29) Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. set global ob_timestamp_service='GTS' ; set global autocommit=ON; set global ob_query_timeout=36000000000; set global ob_trx_timeout=36000000000; set global max_allowed_packet=67108864; set global ob_sql_work_area_percentage=100; set global parallel_max_servers=800; set global parallel_servers_target=800;
复制
加载数据
./tpcc_start -h127.0.0.1 -P 2883 -d tpcc -utpcc@t_obdemo -w3 -c32 -r10 -l10800 -pobroot123 650, trx: 90, 95%: 1910.877, 99%: 2234.053, max_rt: 2922.950, 91|6224.477, 9|69.716, 9|1662.910, 9|4545.140 660, trx: 96, 95%: 2406.932, 99%: 2910.815, max_rt: 3755.202, 91|4636.709, 10|78.115, 9|1836.132, 10|5019.699 670, trx: 87, 95%: 1876.864, 99%: 2341.551, max_rt: 2442.926, 91|6018.072, 9|61.740, 10|1913.560, 9|4638.209 680, trx: 89, 95%: 2388.272, 99%: 3246.872, max_rt: 3330.305, 84|5604.641, 9|63.627, 9|1751.144, 9|4664.569 690, trx: 90, 95%: 2118.133, 99%: 2218.725, max_rt: 2638.818, 96|5018.650, 9|67.924, 9|1708.576, 8|4653.324 700, trx: 91, 95%: 2322.703, 99%: 2547.030, max_rt: 2618.710, 88|5347.387, 9|81.798, 8|1995.720, 9|4895.266 710, trx: 87, 95%: 1943.761, 99%: 2376.861, max_rt: 2440.083, 90|5216.277, 9|87.353, 9|1576.101, 9|4399.511 720, trx: 85, 95%: 1841.801, 99%: 2258.258, max_rt: 2284.648, 82|6504.917, 8|53.452, 8|1692.168, 9|4796.165 730, trx: 79, 95%: 2040.343, 99%: 3060.024, max_rt: 3392.892, 82|9933.464, 8|69.372, 9|1766.271, 9|3795.509 740, trx: 92, 95%: 2275.221, 99%: 2556.196, max_rt: 2728.911, 94|9653.868, 10|86.866, 9|1670.054, 8|4516.399 750, trx: 88, 95%: 2358.434, 99%: 2833.443, max_rt: 3817.807, 90|5598.837, 8|67.313, 9|1681.954, 8|4489.902 760, trx: 89, 95%: 2376.149, 99%: 2930.048, max_rt: 3534.046, 84|5621.660, 8|53.893, 9|1684.145, 10|4392.274
复制
查询前10条语句
MySQL [oceanbase]>select sql_id, count(*), round(avg(elapsed_time)) avg_elapsed_time, round(avg(execute_time)) avg_exec_time from gv$sql_audit s where 1 = 1 and user_name = 'tpcc' and request_time >= time_to_usec(DATE_SUB(current_timestamp, interval 30 minute) ) group by sql_id order by avg_elapsed_time desc limit 10; +----------------------------------+----------+------------------+---------------+ | sql_id | count(*) | avg_elapsed_time | avg_exec_time | +----------------------------------+----------+------------------+---------------+ | CB9A79DD757E45A3BE7702F0DDBCBF0D | 1 | 294648 | 111390 | | FA4D3F470B119C8D1532D0F5191F6BDC | 13 | 205235 | 68770 | | A9056669703DDD218DF758A97E5E9A33 | 4 | 141845 | 33050 | | B8576DF65DB3D93972D427F6407899C5 | 16 | 126625 | 26919 | | D12FDB84894224F16092581EBCB2E131 | 1 | 108310 | 73763 | | 511ADC3F4679AC7B5C0EF9446AB5308C | 1 | 97767 | 68079 | | DCCCB4046CF77DC97CFDCFD5369521A9 | 1 | 93194 | 2890 | | C6838B13E9801C95ADF36A70B85EC85D | 5 | 91687 | 68177 | | 35D668394AE81ED0095DE5C25225A8D1 | 1 | 90081 | 68660 | | 0147BA89B7F422CDBE96E5326C8CDBA6 | 2 | 89629 | 80144 | +----------------------------------+----------+------------------+---------------+ 10 rows in set (0.268 sec)
复制
选择前两条进行分析
select distinct query_sql from gv$plan_cache_plan_stat where sql_id='FA4D3F470B119C8D1532D0F5191F6BDC'; MySQL [oceanbase]> select query_sql from gv$plan_cache_plan_stat where sql_id='FA4D3F470B119C8D1532D0F5191F6BDC'; +-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | query_sql | +-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | 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 stock WHERE s_i_id = ? AND s_w_id = ? FOR UPDATE | +-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ 2 rows in set (0.266 sec) MySQL [tpcc]> explain 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 tpcc.stock WHERE s_i_id = 1 AND s_w_id = 1 FOR UPDATE\G *************************** 1. row *************************** Query Plan: =================================== |ID|OPERATOR |NAME |EST. ROWS|COST| ----------------------------------- |0 |TABLE GET|stock|1 |54 | =================================== Outputs & filters: ------------------------------------- 0 - output([stock.s_quantity], [stock.s_data], [stock.s_dist_01], [stock.s_dist_02], [stock.s_dist_03], [stock.s_dist_04], [stock.s_dist_05], [stock.s_dist_06], [stock.s_dist_07], [stock.s_dist_08], [stock.s_dist_09], [stock.s_dist_10]), filter(nil), access([stock.s_w_id], [stock.s_i_id], [stock.s_quantity], [stock.s_data], [stock.s_dist_01], [stock.s_dist_02], [stock.s_dist_03], [stock.s_dist_04], [stock.s_dist_05], [stock.s_dist_06], [stock.s_dist_07], [stock.s_dist_08], [stock.s_dist_09], [stock.s_dist_10]), partitions(p0) 1 row in set (0.017 sec) select distinct query_sql from gv$plan_cache_plan_stat where sql_id='CB9A79DD757E45A3BE7702F0DDBCBF0D'; MySQL [oceanbase]> select distinct query_sql from gv$plan_cache_plan_stat where sql_id='CB9A79DD757E45A3BE7702F0DDBCBF0D'; +-------------------------------------------------------------------------------+ | query_sql | +-------------------------------------------------------------------------------+ | SELECT count(*) FROM stock WHERE s_w_id = ? AND s_i_id = ? AND s_quantity < ? | +-------------------------------------------------------------------------------+ 1 row in set (0.082 sec) MySQL [tpcc]> explain SELECT count(*) FROM tpcc.stock WHERE s_w_id = 1 AND s_i_id = 1 AND s_quantity < 20\G *************************** 1. row *************************** Query Plan: ========================================= |ID|OPERATOR |NAME |EST. ROWS|COST| ----------------------------------------- |0 |SCALAR GROUP BY| |1 |53 | |1 | TABLE GET |stock|1 |53 | ========================================= Outputs & filters: ------------------------------------- 0 - output([T_FUN_COUNT(*)]), filter(nil), group(nil), agg_func([T_FUN_COUNT(*)]) 1 - output([1]), filter([stock.s_quantity < 20]), access([stock.s_quantity]), partitions(p0) 1 row in set (0.041 sec)
复制
测试期间系统负载情况
最后修改时间:2022-02-20 10:11:14
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。
评论
谢谢您投稿第二期 OceanBase 技术征文大赛🌹本次活动将于3月11日截止征稿,欢迎您多多投稿!
3年前

评论
相关阅读
2025年4月中国数据库流行度排行榜:OB高分复登顶,崖山稳驭撼十强
墨天轮编辑部
2527次阅读
2025-04-09 15:33:27
2025年4月国产数据库大事记:4个千万级中标项目诞生!2024年达梦净利3.6亿、金仓净利8006.6万……
墨天轮编辑部
1709次阅读
2025-04-30 17:39:54
2025年4月国产数据库中标情况一览:4个千万元级项目,GaussDB与OceanBase大放异彩!
通讯员
671次阅读
2025-04-30 15:24:06
919万!南航信息中心采购OceanBase数据库软件许可及服务
通讯员
275次阅读
2025-04-29 16:13:34
AI关键场景得到全面支持!OceanBase入选Forrester报告三大领域代表厂商
OceanBase数据库
259次阅读
2025-04-19 22:27:54
数据库管理-第313期 分布式挑战单机,OceanBase单机版试玩(20250411)
胖头鱼的鱼缸
250次阅读
2025-04-10 22:41:56
瓜分 10 万奖金!OceanBase 首届 AI 黑客松等你来战
OceanBase数据库
242次阅读
2025-04-10 18:19:58
OceanBase单机版产品解读
多明戈教你玩狼人杀
211次阅读
2025-04-11 15:28:33
1364万!2024年中国联通软研院OceanBase扩容单一来源采购公示
通讯员
178次阅读
2025-04-21 15:55:59
OceanBase单机版保姆级安装
薛晓刚
172次阅读
2025-04-10 17:30:42