首先,我是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;在这方面请帮帮我
发布于 2019-02-16 09:27:28
对INSERTs进行基准测试有几个问题。随着您插入的内容越来越多,速度会发生变化,但不是以一种容易预测的方式。
Insert以这种方式(大致)执行:
如果你有AUTO_INCREMENT或者UUID或者...,会有更多的讨论。
更改缓冲区实际上是对非唯一索引的“延迟写入”。这种延迟最终必须得到解决。也就是说,在某些时候,如果后台进程跟不上变化,事情就会变慢。也就是说,如果您插入100万行,您可能不会遇到这种减速;如果您插入1000万行,您可能会遇到这种减速。
另一个变量:VARCHAR(2048) (以及其他TEXT和BLOB列)可以存储在“非记录”中,也可以不存储。这取决于行的大小、列的大小和“行格式”。较大的字符串可能会受到额外的磁盘命中,从而减慢基准测试,可能会减慢很明显的量。也就是说,如果您只使用较小的字符串和某些行格式进行基准测试,则插入时间会比其他情况下更快。
您需要了解基准程序是如何运行的--以及您的应用程序将如何运行:
事务隔离在单个线程中一次插入一行--在单个线程中每次插入一个事务行--使用每个above.
,在单个transaction.
(我不喜欢基准测试,因为它们有太多缺陷。)比较硬件或有限的模式/应用程序更改的“最佳”基准测试:从正在运行的应用程序捕获“一般日志”;在开始时捕获数据库;对重新应用该日志进行计时。
为50K插入行/秒设计表/插入
PRIMARY KEY(col1, col2);丢弃其余部分;丢弃id。请解释一下col1和col2是什么;这里可能有更多的提示。注释后的
好的,那么在你丢弃数据并重新开始(在2小时内)之前,更像是3TB?为此,我建议使用PARTITION BY RANGE并使用一些时间函数,让您在每个分区中使用5分钟。这将为您提供合理数量的分区(大约25个),并且DROP PARTITION将仅减少大约100 25,这可能不会使文件系统不堪重负。更多讨论:http://mysql.rjweb.org/doc.php/partitionmaint
至于字符串...你建议25KB,但声明不允许这么多?
https://stackoverflow.com/questions/54694433
复制相似问题