首先,我是mysqlslap的新手 我想在现有数据库上使用mysqlslap测试插入查询。我要测试的表具有唯一的主键和复合键。
那么,如何同时使用mysqlslap在此表上进行性能测试?
我不应该面对mysql错误重复键
下面是我桌子的骨架:
CREATE TABLE data (
id bigint(20) NOT NULL,
column1 bigint(20) DEFAULT NULL,
column2 varchar(255) NOT NULL DEFAULT '0',
datacolumn1 VARCHAR(255) NOT NULL DEFAULT '',
datacolumn2 VARCHAR(2048) NOT NULL DEFAULT '',
PRIMARY KEY (id),
UNIQUE KEY profiles_UNIQUE (column1,column2),
INDEX id_idx (id),
INDEX unq_id_idx (column1, column2) USING BTREE
) ENGINE=innodb DEFAULT CHARSET=latin1;
请帮助我
答案 0 :(得分:2)
基准测试INSERTs
存在几个问题。速度会随着您插入的越来越多而改变,但不会以容易预测的方式发生。
插入(大致)以这种方式执行
:如果您有AUTO_INCREMENT
或UUID
或...,将会有更多的讨论。
更改缓冲区实际上是对非唯一索引的“延迟写入”。这种延迟必须最终解决。也就是说,在某些时候,如果后台进程无法跟上这些更改,事情将会变慢。也就是说,如果您插入100万行,则可能不会达到此速度;如果您插入1000万行,则可以点击它。
另一个变量:VARCHAR(2048)
(以及其他TEXT
和BLOB
列)可能或可能“不在记录中” ”。这取决于行的大小,该列的大小和“行格式”。大字符串可能会占用更多磁盘空间,从而降低基准测试速度,可能会显着降低。也就是说,如果仅使用小字符串和某些行格式进行基准测试,则插入时间将比其他情况更快。
您需要了解基准程序的运行方式-以及应用程序的运行方式:
(我不喜欢基准测试,因为它们有多少缺陷。)比较硬件或有限的架构/应用程序更改的“最佳”基准测试:从正在运行的应用程序中捕获“常规日志”。在开始时捕获数据库;重新记录该日志的时间。
为每秒插入5万行的数据设计表/插入
PRIMARY KEY(col1, col2)
;扔剩下的折腾id
。请解释一下col1和col2是什么;这里可能会有更多提示。评论后
好吧,更像是3TB,然后再扔数据并重新开始(在2小时内)?为此,我建议PARTITION BY RANGE
并使用一些时间函数,在每个分区中给您5分钟。这将为您提供合理数量的分区(大约25个),而DROP PARTITION
仅将丢失约100GB,这可能不会使文件系统不堪重负。更多讨论:http://mysql.rjweb.org/doc.php/partitionmaint
至于字符串...您建议使用25KB,但声明中并没有那么多?