本文介绍使用JMeter测试OceanBase性能的方法。
这个方法适用于所有关系数据库(包括分布式的)。
测试方法。
在前文《分布式数据库选型测试(一)——测试需求》里已经就数据库性能对比测试的方法做过总结,这里再补充一些内容。
测试OceanBase集群性能的方法有很多,如sysbench
、benchmarksql
。不过如果想对比OceanBase数据库跟传统数据库、其他友商分布式数据库产品的性能差异,还需要找到一个能适用彼此的测试方案。sysbench
的功能太弱,且只有0.4 支持ORACLE,不同版本的sql还不完全一样。benchmarksql
倒是很合适,有一定业务模型,内部复杂但是评测标准简单,容易统一比较。不过如果客户还想测试一点点业务sql,那就只能自己写程序了。如果嫌写程序麻烦,还有个简单的办法就是使用JMeter
。
数据库驱动
使用JMeter测试OceanBase性能的时候也需要加载OceanBase的Java驱动。文件可以从官网的下载文件中获取,或者从这个途径:https://github.com/obpilot/benchmarksql-5.0/blob/master/lib/oracle/oceanbase-client-1.0.9.jar
下载的oceanbase-client-1.0.9.jar
需要放到Jmeter
的lib
文件夹夹中。
业务场景定义
建表语句
请在OB-ORACLE租户下业务账户执行下面SQL 。
$obclient -h127.1 -utpcc@obbmsql#obdemo -P2883 -p123456 -c -A tpcc
CREATE TABLE account(id number NOT NULL PRIMARY KEY
, name varchar2(50) NOT NULL UNIQUE
, value number NOT NULL
, gmt_create date DEFAULT sysdate NOT NULL
, gmt_modified date DEFAULT sysdate NOT NULL );
CREATE SEQUENCE seq_account START WITH 1 INCREMENT BY 1 nocycle;
delimiter /
CREATE OR REPLACE TRIGGER trg_before_ins_account
BEFORE INSERT
ON account
FOR EACH ROW
BEGIN
select seq_account.nextval INTO :NEW.id FROM DUAL ;
END;
/
delimiter ;
示例中的触发器和序列不是必须的。这只是一种常用的用法。ORACLE租户的序列能保证值递增(序列属性是NOCYCLE
),但不一定保证连续(事务回滚时会浪费序列值)。这里的测试案例期望产生的测试数据是连续的。