我试图在我的MariaDB10.0.14上执行一个基准测试,以使用多个线程读取MyISAM表上的数据,并且我不断地得到一个异常来处理主键的重复条目。MyISAM是否支持使用多线程进行读取?我使用sysbench进行基准测试,我的配置如下:
Prepare testing dataset
#sysbench --test=/usr/share/doc/sysbench/tests/db/oltp.lua --mysql-table-engine=myisam
--oltp-table-size=1000000 --mysql-db=sbread --mysql-user=testdb --mysql-password=testpw
--mysql-socket=/var/lib/mysql/mysql.sock prepare
Reads
#sysbench --num-threads=1 --max-requests=500000 --test=/usr/share/doc/sysbench/tests/
db/oltp.lua -- oltp-table-size=1000000 --mysql-socket=/var/lib/mysql/mysql.sock
--oltp-read-only --mysql-db=sbread --mysql-user=testdb --mysql-password=testpw run
因此,正如你在"准备测试数据集"中看到的那样,正在创建的测试数据库的表有MyISAM存储引擎。当我尝试用一个线程读取时,它运行良好。但当我尝试使用多个线程访问数据库(--num threads=16)时,我会得到以下错误:
ALERT: mysql_drv_query() for query 'INSERT INTO sbtest1 (id, k, c, pad) VALUES (498360, 567750,
'84578502161-76498916585-15177095459-91229149818-13877895508-00429671145-18341319379-39103937662-
51579802230-43663801413', '79741072395-37018170150-53859605676-72598517156-41247843127')' failed:
1062 Duplicate entry '498360' for key 'PRIMARY'
您使用的是--oltp-read-only而不是--oltp-read-only=on,因此您没有运行预期的只读基准测试。