单机部署情况下,insert 操作性能能达到多少?

我的物理机配置是8C32G PC机,硬盘1T。
目前实测向一张小表(5字段,1索引)插入数据,1万条居然要8分多钟?
oceanbase的单机数据插入能力应该是个什么水准?

应该是用的observer 4.1吧,这取决于很多,机器硬件性能先不提了 8c23g的物理机 ,oceanbase的配置参数是多少? 然后测试租户占到的资源是多少,是单纯的insert value这样插么? 具体的表schema长什么样,计划也给一下,麻烦补充下这些信息吧,才能判断合理与否

1 个赞

是observer4.1, oceanbase的配置参数

  1. 一个zone,
  2. 数据和日志在一个目录下
  3. __min_full_resource_pool_memory=2G, datafile_size=2G, log_disk_size=3G,
    enable_syslog_recycle=True, max_syslog_file_count=2, memory_limit=20G, system_memory=10G, cpu_count=16, enable_syslog_wf=false;
    此外还调整了
    enable_sql_audit=false,
    enable_perf_event=false,
    syslog_level=‘PERF’,
    enable_record_trace_log=false;
    enable_monotonic_weak_read=false;
    均无效果
    另外我的表就是建在sys租户内的,不知是否有影响?预研试用,摸测的。
    而且我是通过调用存储过程,在存储过程中插入1万条记录,

不要在sys下测,sys租户承担集群很多其他的管理功能, 建一个自己的测试租户,多少cpu和内存按自己的需求配好, 存储过程会影响影响,但1w条也不至于那么慢,具体给出计划分析,存储过程是你们业务在用的么?如果可以的话信息脱敏下,把相关的schema和sql都发下

1 个赞

你可以别用存储过程,同样的数据看看单独直接insert会是多久

1 个赞

另外表的schema信息也没有,比如你要是insert的是大lob字段呢? 得把信息给全了才好判断

2 个赞

表有四列, cversioncode char(128), nVersionID int, dcreatetime, dupdatetime datetime

单独insert也很慢,大概要0.06秒~0.1秒

嗯,这个我再按您的建议重新建个测试租户来搞,目前发现insert时,cpu占用率就30%不到,是不是没有并发插入导致的?往同一张表插入数据,能并发不?我看ob只有一个数据文件

你先搞个测试租户吧, 你单独一条一条统计是不合理的,insert values (xxx), 光解析这个sql就要占大部分时间了,不能单独用这个*1w来觉得很慢, 对于tp业务,sql的解析本身影响就大,难道你们的存储业务pl就是for循环然后拼成一条条insert sql来插入?

1 个赞

如果你的表是分区表并行效果会好点,普通单表要看数据分布,可以尝试开启pdml并行试下

1 个赞

另外是需要批量插入的,如果你一次只插入一次,然后插1w次也是没什么效果的

1 个赞

sys 租户大约1个多G,把内存比较少。

  • 我这里简单测试单机下mysql ob, tidb压测过程
    不过是租户是2g内存的,4c8g。

  • OceanBase 社区

  • 单机性能 肯定比不过mysql,

推荐使用:
OBD 进行一键测试.里面会自动优化ob系统参数。

文章:

然后用你自己定义表在对比测试一下。

1 个赞

好的,感谢大师指点,我再按您的建议实测一下

嗯,是的,我确实就是一条条insert的,但字段值有通过变量代入。如下

use test;
delimiter //
drop procedure if exists insert_sysinfo //
create procedure insert_sysinfo()
begin
declare v_cnt int;
set v_cnt =10000;
while (v_cnt >0) do
insert /*+ append */ into sysinfo
(cVersionCode, nVersionID, dCreateDate, dUpdateDate)
values
(cast(v_cnt as char), v_cnt, current_timestamp, current_timestamp);
set v_cnt=v_cnt-1;
end while;
end //

PS: sysinfo表是普通表,非分区表。
create table sysinfo
(
cversioncode char(128) not null,
nversionid int not null,
dcreatedate datetime not null,
dupdatedate datetime not null
primary key(cversioncode)
) default charset= utf8mb4 row_format=dynamic compression=‘zstd_1.3.8’ replica_num=1 block_size=16384 use_bloom_filter=false tablet_size=134217728 pctfree=0

测试过程有问题可以继续这里反馈

最终是通过在存储过程中开启事务最后一把提交的方式,实现了批量插入,发现速度是快的惊人。
1万条居然用0.7秒就搞定了。感谢xuyu/wang_cyi/热海。也见识了oceanbase的存储过程中居然可以用事务控制。牛!

不客气,也感谢你最后在社区分享你的经验