在这篇文章中,我们将讲述在SSD设备下,一个更小的innodb_page_size
是怎么提高MySQL性能的。
在我之前写的一篇文章中,我对比和测试了不同的三星SSD设备。大部分SSD使用4KB作为内部页的大小,而innodb存储引擎的默认页大小是16KB。我想知道不同的innodb_page_size
是否会影响数据库的性能。
幸运的是,MySQL 5.7新增了一个innodb_page_size
配置项,从而让你可以自定义innodb的页大小,然而这个配置项目前使用起来还不是很方便。你不能改变一个已有的数据库的页大小,只能通过创建一个全新的数据库,在上面配置不同的innodb_page_size
,然后再导入旧数据库的数据。这种不方便性会严重阻碍在线上系统的使用。但是你可以为单个数据表或索引设置innodb_page_size
,你可以通过一个简单的语句ALTER TABLE foo page_size=4k
来设置它。
无论如何,这都不会影响我们在测试环境中使用这个配置项。我们使用之前一篇文章里的相同的测试条件来进行测试,然后看看在innodb_page_size=4k
的页大小下,测试结果会发生什么变化。
译者注:图中的X轴是Buffer Pool的内存大小,单位GB;Y轴是每分钟的新事务数量(New Order Transactions Per Minute)(NOTPM),值越大越好。
从图中可以看出,在Buffer Pool比较小的情况下,PM1725设备的性能优于SAM863,当内存逐渐增大后,两者的性能几乎相等。
那么,innodb_page_size=4k
和16k
两者的性能对比呢?
这是两者对比的测试结果图:
表格结果:
有趣的是,使用4k的页大小后,数据库的性能提升了70%,但仅限于PM1725、SAM863两块SSD。而低端的SAM850,在内存逐渐增大后,表现反而变糟糕。
我认为70%的性能提升太重要了,不容忽视,即使配置innodb_page_size
需要额外的工作。
我认为值得评估使用不同的innodb_page_size
设置是否有助于提升你的SSD数据库性能。
最后希望MySQL 8.0可以让我们更方便的配置不同的innodb页大小。
原文链接:https://www.percona.com/blog/2016/08/10/small-innodb_page_size-performance-boost-ssd/