测试环境与方法
-
测试操作:使用存储过程
data
向表t1
中插入数据,其中每条记录包含两列a
和b
,每列填充指定大小的文本数据。 -
测试脚本:
sqlCREATE PROCEDURE data(IN base INT, IN count INT) BEGIN DECLARE i INT DEFAULT 1; CREATE TABLE IF NOT EXISTS t1 (id INT AUTO_INCREMENT PRIMARY KEY, a LONGTEXT, b LONGTEXT); WHILE i <= count DO INSERT INTO testrm.t1 (a,b)VALUES(REPEAT('a', base/2*1048576), REPEAT('b', base/2*1048576)); SET i = i + 1; END WHILE; END$
系统页大小与MySQL配置参数的影响
下表展示了在x86和ARM架构下,不同的系统页大小和MySQL配置参数对写入速度的影响。测试通过调用data(100,6)
,即插入5MB数据六次,来衡量写入速度。
操作系统 | 系统页大小 | MySQL参数innodb_page_size | MySQL参数innodb_read_io_threadsinnodb_write_io_threads | 写入速度衡量call data(100,6) |
---|---|---|---|---|
x86 | 4k | 16k | 4 | 164s |
x86 | 4k | 16k | 16 | 97s~120s |
x86 | 4k | 64k | 4 | 109s |
x86 | 4k | 64k | 16 | 98s~104s |
arm | 64k | 16k | 4 | 600s+ |
arm | 64k | 16k | 16 | 460s |
arm | 64k | 64k | 4 | 170s~330s |
arm | 64k | 64k | 16 | 59s~120s |
结论与分析
x86架构(4k页大小)
在x86架构下,系统页大小固定为4k。测试结果显示,当innodb_page_size
设置为16k时,增加innodb_write_io_threads
数量至16线程,写入速度从164秒降低到了97秒至120秒之间,表明I/O线程的优化对写入性能有显著提升。进一步将innodb_page_size
增加到64k时,虽然I/O线程数量保持不变,但写入速度并未出现明显改善,这说明在4k页大小的x86架构下,innodb_page_size增加到4k以上对MySQL写入性能的提升作用有限。
ARM架构(64k页大小)
ARM架构的系统页大小为64k,相较于x86的4k页大小,基础写入速度明显较慢。然而,通过优化innodb_write_io_threads
参数,即使在较大的页大小下,也能显著提升写入速度。例如,当innodb_page_size
设置为16k时,增加I/O线程数量至16,写入速度从600秒以上降低到了460秒左右;而当innodb_page_size
设置为64k时,同样的I/O线程优化策略,写入速度从170秒至330秒降低到了59秒至120秒之间,这表明在ARM架构下,通过合理配置I/O线程数量,可以有效克服较大页大小带来的性能劣势。
总结
- x86架构:在4k页大小下,增加
innodb_write_io_threads
数量对写入速度有显著提升效果,而增大innodb_page_size
至64k对性能影响不大。 - ARM架构:64k页大小导致基础写入速度较慢,但通过优化
innodb_write_io_threads
和innodb_page_size
参数,可以显著提升写入速度,甚至接近x86架构的表现。
因此,在实际应用中,根据硬件架构的特点,合理调整MySQL的配置参数,尤其是I/O线程数量,对于提升数据库写入速度和整体性能至关重要。同时,对于ARM架构,考虑到其较大的系统页大小,更应注重I/O线程的优化以弥补性能差距。