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

实战OceanBase社区版性能测试探索- sysbench篇之局部索引

原创 大数据模型 2022-05-05
1489

前文

目标是在我的小弱鸡的1-1-1架构(租户总资源是3C12G)上得出sysbench极限性能测试探索,前面已经实验验证表的物理建模和haproxy加速,下面提升思路是拿OB大神的独门配方优化参数和官方优化参数。

调优参数

ob大神的调味料如下,主要是OB的参数的变化,这里描述为计算层的优化


alter  system  set net_thread_count=4;
alter  system  set  cpu_quota_concurrency=8;
alter  system  set use_large_pages="true";
alter  system  set  enable_sql_audit=false;
alter  system  set  enable_perf_event=false;
alter  system  set  _clog_aggregation_buffer_amount=4  tenant=all;
alter  system  set  _flush_clog_aggregation_buffer_timeout='1ms';

alter  proxyconfig  set enable_compression_protocol=false;
sysctl   kernel.sched_migration_cost_ns=0;

经过反复调试,本人在这里的两个配置如下,但是设置数值再大始终没有把CPU打满
alter system set net_thread_count=32;
alter system set cpu_quota_concurrency=16;

测试思路

image.png

基于ob大神的的调味料混合haproxy和表结构启用bloom_filter、blocksize做四组测试。

  • ob大神调味料+原表结构+obproxy【主要目标是优化OB参数看性能提升了多少】
  • ob大神调味料+原表结构+haproxy【主要目标是优化OB参数结合接入层的obproxy看提升了多少】
  • ob大神调味料+原表blom filter以及blocksize+obproxy【主要目标是优化OB参数结合存储层的设置变动看提升了多少】
  • ob大神调味料+原表blom filter以及blocksize+haproxy【主要目标是优化OB参数结合存储层的设置变动再加上接入层的 haproxy看提升了多少】

测试过程

同样100万的数据,基于原表结构,obproxy或者haproxy分别执行两次
image.png

同样100万的数据,设置use_bloom_filter等于true,提高blocksize,基于obproxy或者基于haproxy分别执行两次

image.png

数据解读

  • 测试性能有质的飞跃,主要动力加速来源于OB大神的调味料,相对之前大幅度的提升,笔者前面说过OB默认的参数较温和,马上打脸。
  • 前面两篇文章测试,haproxy与use_bloom_filter和blocksize 和sysbench有直接相关的联系,但是现在基于100万数据,haproxy的加速甚少,use_bloom_filter和blocksize设置性能反而有所降低,笔者认为haproxy与sysbench有强联系,而use_bloom_filter与blocksize是弱联系。强联系通过深一层的优化,还可以有所提高,其中一个节点的2883的连接特别多,其它两个节点的连接特别少,弱联系则是影响不大,如今基于100万的数据 use_bloom_filter与blocksize没有起作用了。
  • 使用haproxy测试,一个obproxy接收的请求连接远远大于其它两个obrpxy,所以haproxy这里还是有优化的空间。

准备通过应用层的层面,看性能有没有进一步提高 的可能性。sysbench的业务逻逻辑全看oltp_common.lua ,如下

local stmt_defs = { point_selects = { "SELECT c FROM sbtest%u WHERE id=?", t.INT}, simple_ranges = { "SELECT c FROM sbtest%u WHERE id BETWEEN ? AND ?", t.INT, t.INT}, sum_ranges = { "SELECT SUM(k) FROM sbtest%u WHERE id BETWEEN ? AND ?", t.INT, t.INT}, order_ranges = { "SELECT c FROM sbtest%u WHERE id BETWEEN ? AND ? ORDER BY c", t.INT, t.INT}, distinct_ranges = { "SELECT DISTINCT c FROM sbtest%u WHERE id BETWEEN ? AND ? ORDER BY c", t.INT, t.INT}, index_updates = { "UPDATE sbtest%u SET k=k+1 WHERE id=?", t.INT}, non_index_updates = { "UPDATE sbtest%u SET c=? WHERE id=?", {t.CHAR, 120}, t.INT}, deletes = { "DELETE FROM sbtest%u WHERE id=?", t.INT}, inserts = { "INSERT INTO sbtest%u (id, k, c, pad) VALUES (?, ?, ?, ?)", t.INT, t.INT, {t.CHAR, 120}, {t.CHAR, 60}}, }

笔者现在还有两招, 一个是网上的方法,另外还有自己的一个自己的想法,

网上的方法,就把表分区,然后id和k一起做局部索引。

CREATE TABLE sbtest( id int(11), k INTEGER DEFAULT '0' NOT NULL, c CHAR(120) DEFAULT '' NOT NULL, pad CHAR(60) DEFAULT '' NOT NULL, PRIMARY KEY (id), KEY `k_1` (id,k) BLOCK_SIZE 16384 LOCAL ) PARTITION BY HASH(k) PARTITIONS 8 ;

实践出真知,经过笔者测试发现好慢啊,比原来更慢。最后试了笔者自己想的办法。笔者就是对余下两个也做局部索引, 虽说sysbench看上去与这两个字段没有关系,最关键的id和k已经做索引了,先补刀了再说,在原表上面再加了两个字段局部索引,

create index c1 on 表名© local;
create index pad1 on 表名(pad) local;

把得到跑的最好一份数据如下,别小看这份数据,比以前好多了。虽说延迟降不了多少,但是吞吐量的QPS比以前强多了。基于1C4G,集群总资源是3C和12G,CPU用的是Intel® Xeon® Silver 4210 CPU @ 2.20GHz,主要变量变动是局部索引。 笔者还打算做个全局索引与局部索引比对,再观察内部活动SQL Trace、SQL Audit 表、慢查询日志的变化,很不幸,第二天虚拟机回收删除了,没有办法继续测试。多次测试的数据差不多逼近了我想要的结果,单就sysbench这个业务场景,OceanBase擅长做海量OLTP的业务场景,它不像TiDB那样松散耦合,协调、计算、存储分离,而是单个observer里面SQL、计算、存储紧密耦合,单独在本地节点完成称为本地作业、尽量避免远程作业和分布式作业。其中local建的就是局部索引,可以争取本地作业。

image.png

image.png

测试总结及问题归纳

  • 永无止境 ,还有提升的空间,现在测试的 状态,磁盘IO在一瞬间快写满了,可以考虑SLOG与CLOG分开,最高峰时,一个节点的CPU用上80%左右,而另外两个节点用上接近70%左右。
  • 整个过程最费时间和精力的就是填数,连续创建30个表需要大量的内存,因为内存太少,可以先创建10个100万的表,然后建空表,执行 insert into 空表名 select * from 100万表名 ,每填 充一个执行echo 3 > /proc/sys/vm/drop_caches, 这样不会发生租户内存错误。
  • sysbench这个业务场景的OLTP都是基于单表的修改或删除,最好充分利用局部索引,因为局部索引,发生在单机,笔者在这里的调整还不够优化。
  • haproxy与bloom filter、 blocksize对sysbench性能提升,要排在局部索引之后,要提高性能,先想好如何发挥OceanBase的集中式 优势, 然后再是如何发挥OceanBase的分布式 优势,现在来看haproxy与bloom filter、 blocksize属于分布式因素。
最后修改时间:2022-05-07 14:09:52
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

文章被以下合辑收录

评论