首先,我是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;
请帮帮我
基准测试INSERTs
有几个问题。当您插入越来越多时,速度会发生变化,但不会以容易预测的方式变化。
Insert(大致)以这种方式执行:
如果你有AUTO_INCREMENT
或UUID
或......,会有更多的讨论。
更改缓冲区实际上是对非唯一索引的“延迟写入”。这种延迟最终必须得到处理。也就是说,在某个时候,如果后台进程无法跟上变化,事情就会变慢。也就是说,如果你插入100万行,你可能不会遇到这种减速;如果您插入1000万行,您可能会点击它。
另一个变量:VARCHAR(2048)
(以及其他TEXT
和BLOB
列)可能会或可能不会存储“不记录”。这取决于行的大小,该列的大小和“行格式”。一个大的字符串可能需要额外的磁盘命中,从而减慢基准,可能是一个显着的数量。也就是说,如果仅使用小字符串和某些行格式进行基准测试,则插入时间会比其他方式更快。
您需要了解基准程序的运行方式 - 与应用程序的运行方式相比:
(由于他们有多少缺陷,我不喜欢基准测试。)用于比较硬件或有限模式/应用程序更改的“最佳”基准:从正在运行的应用程序中捕获“常规日志”;在开始时捕获数据库;重新申请该日志的时间。
设计一个50K插入行/秒的表/插入
PRIMARY KEY(col1, col2)
;折腾剩下的;扔id
。请解释col1和col2是什么;这里可能还有更多提示。评论后
好的,所以在你丢弃数据并重新开始(2小时)之前更像3TB?为此,我建议使用PARTITION BY RANGE
并使用一些时间函数,在每个分区中给你5分钟。这将为您提供合理数量的分区(大约25个),DROP PARTITION
将仅下降大约100GB,这可能不会压倒文件系统。更多讨论:http://mysql.rjweb.org/doc.php/partitionmaint
至于字符串...你建议25KB,但声明不允许那么多???