TiDB 性能测试

测试集群配置

配置 规格
服务器 4台
cpu 16cores
内存 128g
硬盘 500gssd
网络 万兆

使用GA/T1400.3-2017 机动车对象作为标准测试数据, 建表如下:

CREATE TABLE `vehicle` (
    MotorVehicleID VARCHAR(48),
    InfoKind TINYINT,
    SourceID VARCHAR(41) NOT NULL DEFAULT '',
    TollgateID VARCHAR(20) NOT NULL DEFAULT '',
    DeviceID VARCHAR(20) NOT NULL DEFAULT '',
    StorageUrl1 VARCHAR(256) NOT NULL DEFAULT '',
    StorageUrl2 VARCHAR(256) NOT NULL DEFAULT '',
    StorageUrl3 VARCHAR(256) NOT NULL DEFAULT '',
    StorageUrl4 VARCHAR(256) NOT NULL DEFAULT '',
    StorageUrl5 VARCHAR(256) NOT NULL DEFAULT '',
    LeftTopX SMALLINT,
    LeftTopY SMALLINT,
    RightBtmX SMALLINT,
    RightBtmY SMALLINT,
    MarkTime DATETIME,
    AppearTime DATETIME,
    DisappearTime DATETIME,
    LaneNo TINYINT,
    HasPlate VARCHAR(1) NOT NULL DEFAULT '',
    PlateClass VARCHAR(2) NOT NULL DEFAULT '',
    PlateColor VARCHAR(2) NOT NULL DEFAULT '',
    PlateNo VARCHAR(15) NOT NULL DEFAULT '',
    PlateNoAttach VARCHAR(15) NOT NULL DEFAULT '',
    PlateDescribe VARCHAR(64) NOT NULL DEFAULT '',
    IsDecked VARCHAR(1) NOT NULL DEFAULT '',
    IsAltered VARCHAR(1) NOT NULL DEFAULT '',
    IsCovered VARCHAR(1) NOT NULL DEFAULT '',
    Speed DOUBLE(5, 2),
    Direction VARCHAR(1) NOT NULL DEFAULT '',
    DrivingStatusCode VARCHAR(4) NOT NULL DEFAULT '',
    UsingPropertiesCode TINYINT,
    VehicleClass VARCHAR(3) NOT NULL DEFAULT '',
    VehicleBrand VARCHAR(3) NOT NULL DEFAULT '',
    VehicleModel VARCHAR(32) NOT NULL DEFAULT '',
    VehicleStyles VARCHAR(16) NOT NULL DEFAULT '',
    VehicleLength INT(5),
    VehicleWidth INT(4),
    VehicleHeight INT(4),
    VehicleColor VARCHAR(2) NOT NULL DEFAULT '',
    VehicleColorDepth VARCHAR(1) NOT NULL DEFAULT '',
    VehicleHood VARCHAR(64) NOT NULL DEFAULT '',
    VehicleTrunk VARCHAR(64) NOT NULL DEFAULT '',
    VehicleWheel VARCHAR(64) NOT NULL DEFAULT '',
    WheelPrintedPattern VARCHAR(2) NOT NULL DEFAULT '',
    VehicleWindow VARCHAR(64) NOT NULL DEFAULT '',
    VehicleRoof VARCHAR(64) NOT NULL DEFAULT '',
    VehicleDoor VARCHAR(64) NOT NULL DEFAULT '',
    SideOfVehicle VARCHAR(64) NOT NULL DEFAULT '',
    CarOfVehicle VARCHAR(64) NOT NULL DEFAULT '',
    RearviewMirror VARCHAR(64) NOT NULL DEFAULT '',
    VehicleChassis VARCHAR(64) NOT NULL DEFAULT '',
    VehicleShielding VARCHAR(64) NOT NULL DEFAULT '',
    FilmColor VARCHAR(1) NOT NULL DEFAULT '',
    IsModified VARCHAR(1) NOT NULL DEFAULT '',
    HitMarkInfo VARCHAR(1) NOT NULL DEFAULT '',
    VehicleBodyDesc VARCHAR(128) NOT NULL DEFAULT '',
    VehicleFrontItem VARCHAR(2) NOT NULL DEFAULT '',
    DescOfFrontItem VARCHAR(256) NOT NULL DEFAULT '',
    VehicleRearItem VARCHAR(2) NOT NULL DEFAULT '',
    DescOfRearItem VARCHAR(256) NOT NULL DEFAULT '',
    NumOfPassenger SMALLINT,
    PassTime DATETIME,
    NameOfPassedRoad VARCHAR(64) NOT NULL DEFAULT '',
    IsSuspicious VARCHAR(1) NOT NULL DEFAULT '',
    Sunvisor TINYINT,
    SafetyBelt TINYINT,
    Calling TINYINT,
    PlateReliability VARCHAR(3) NOT NULL DEFAULT '',
    PlateCharReliability VARCHAR(64) NOT NULL DEFAULT '',
    BrandReliability VARCHAR(3) NOT NULL DEFAULT '',
    SubImageList VARCHAR(256)  NOT NULL DEFAULT '',
	PRIMARY KEY (`MotorVehicleID`) CLUSTERED
);

插入性能

通过jdbc进行性能写入, 连接开启rewriteBatchedStatements=true属性, 关于该属性作用:

insert into tb values (1,'a');
insert into tb values (2,'b');
insert into tb values (3,'c');
-- 可以将多条insert语句优化为一条insert, 显著提高插入性能
insert into tb values (1,'a'),(2,'b'),(3,'c');

当有大批量数据需要插入时, 并且确定不会有主键冲突, 选用此种插入方式, 插入效率最高!

插入sql如下:

insert into test.vehicle (MotorVehicleID,InfoKind,SourceID,TollgateID,DeviceID,StorageUrl1,StorageUrl2,StorageUrl3,StorageUrl4,StorageUrl5,LeftTopX,LeftTopY,RightBtmX,RightBtmY,MarkTime,AppearTime,DisappearTime,LaneNo,HasPlate,PlateClass,PlateColor,PlateNo,PlateNoAttach,PlateDescribe,IsDecked,IsAltered,IsCovered,Speed,Direction,DrivingStatusCode,UsingPropertiesCode,VehicleClass,VehicleBrand,VehicleModel,VehicleStyles,VehicleLength,VehicleWidth,VehicleHeight,VehicleColor,VehicleColorDepth,VehicleHood,VehicleTrunk,VehicleWheel,WheelPrintedPattern,VehicleWindow,VehicleRoof,VehicleDoor,SideOfVehicle,CarOfVehicle,RearviewMirror,VehicleChassis,VehicleShielding,FilmColor,IsModified,HitMarkInfo,VehicleBodyDesc,VehicleFrontItem,DescOfFrontItem,VehicleRearItem,DescOfRearItem,NumOfPassenger,PassTime,NameOfPassedRoad,IsSuspicious,Sunvisor,SafetyBelt,Calling,PlateReliability,PlateCharReliability,BrandReliability,SubImageList) values(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)
并行度 总插入速度 records/second
4 9088
8 13264
16 22208

替换性能

当大批量数据导入时, 并且不能确定该数据是否已存在时, 采用以下插入方式(也配置rewriteBatchedStatements=true):

replace into test.vehicle (MotorVehicleID,InfoKind,SourceID,TollgateID,DeviceID,StorageUrl1,StorageUrl2,StorageUrl3,StorageUrl4,StorageUrl5,LeftTopX,LeftTopY,RightBtmX,RightBtmY,MarkTime,AppearTime,DisappearTime,LaneNo,HasPlate,PlateClass,PlateColor,PlateNo,PlateNoAttach,PlateDescribe,IsDecked,IsAltered,IsCovered,Speed,Direction,DrivingStatusCode,UsingPropertiesCode,VehicleClass,VehicleBrand,VehicleModel,VehicleStyles,VehicleLength,VehicleWidth,VehicleHeight,VehicleColor,VehicleColorDepth,VehicleHood,VehicleTrunk,VehicleWheel,WheelPrintedPattern,VehicleWindow,VehicleRoof,VehicleDoor,SideOfVehicle,CarOfVehicle,RearviewMirror,VehicleChassis,VehicleShielding,FilmColor,IsModified,HitMarkInfo,VehicleBodyDesc,VehicleFrontItem,DescOfFrontItem,VehicleRearItem,DescOfRearItem,NumOfPassenger,PassTime,NameOfPassedRoad,IsSuspicious,Sunvisor,SafetyBelt,Calling,PlateReliability,PlateCharReliability,BrandReliability,SubImageList) values(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)
并行度 总插入速度 records/second
4 5404
8 8984
16 14272

插入更新性能

当大批量数据导入时, 并且不能确定该数据是否已存在时, 而且数据不完整时, 采用以下插入方式:

sql中字段自行选取拼接, 关闭事务自动提交, 使用tidb的乐观事务, 手动提交

insert into test.vehicle (MotorVehicleID,InfoKind,SourceID,TollgateID,DeviceID,StorageUrl1,StorageUrl2,StorageUrl3,StorageUrl4,StorageUrl5,LeftTopX,LeftTopY,RightBtmX,RightBtmY,MarkTime,AppearTime,DisappearTime,LaneNo,HasPlate,PlateClass,PlateColor,PlateNo,PlateNoAttach,PlateDescribe,IsDecked,IsAltered,IsCovered,Speed,Direction,DrivingStatusCode,UsingPropertiesCode,VehicleClass,VehicleBrand,VehicleModel,VehicleStyles,VehicleLength,VehicleWidth,VehicleHeight,VehicleColor,VehicleColorDepth,VehicleHood,VehicleTrunk,VehicleWheel,WheelPrintedPattern,VehicleWindow,VehicleRoof,VehicleDoor,SideOfVehicle,CarOfVehicle,RearviewMirror,VehicleChassis,VehicleShielding,FilmColor,IsModified,HitMarkInfo,VehicleBodyDesc,VehicleFrontItem,DescOfFrontItem,VehicleRearItem,DescOfRearItem,NumOfPassenger,PassTime,NameOfPassedRoad,IsSuspicious,Sunvisor,SafetyBelt,Calling,PlateReliability,PlateCharReliability,BrandReliability,SubImageList) values(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?) ON DUPLICATE KEY UPDATE InfoKind=?,StorageUrl1=?,StorageUrl2=?,StorageUrl3=?,StorageUrl4=?,StorageUrl5=?,LeftTopX=?,LeftTopY=?,RightBtmX=?,RightBtmY=?,MarkTime=?,AppearTime=?,DisappearTime=?,LaneNo=?,HasPlate=?,PlateClass=?,PlateColor=?,PlateNo=?,PlateNoAttach=?,PlateDescribe=?,IsDecked=?,IsAltered=?,IsCovered=?,Speed=?,Direction=?,DrivingStatusCode=?,UsingPropertiesCode=?,VehicleClass=?,VehicleBrand=?,VehicleModel=?,VehicleStyles=?,VehicleLength=?,VehicleWidth=?,VehicleHeight=?,VehicleColor=?,VehicleColorDepth=?,VehicleHood=?,VehicleTrunk=?,VehicleWheel=?,WheelPrintedPattern=?,VehicleWindow=?,VehicleRoof=?,VehicleDoor=?,SideOfVehicle=?,CarOfVehicle=?,RearviewMirror=?,VehicleChassis=?,VehicleShielding=?,FilmColor=?,IsModified=?,HitMarkInfo=?,VehicleBodyDesc=?,VehicleFrontItem=?,DescOfFrontItem=?,VehicleRearItem=?,DescOfRearItem=?,NumOfPassenger=?,PassTime=?,NameOfPassedRoad=?,IsSuspicious=?,Sunvisor=?,SafetyBelt=?,Calling=?,PlateReliability=?,PlateCharReliability=?,BrandReliability=?,SubImageList=?
并行度 总插入速度 records/second
4 988
8 1952
16 3392