在查看mysql的配置文件my.ini时看到这俩个参数,于是研究了一下
# InnoDB, unlike MyISAM, uses a buffer pool to cache both indexes and
# row data. The bigger you set this the less disk I/O is needed to
# access data in tables. On a dedicated database server you may set this
# parameter up to 80% of the machine physical memory size. Do not set it
# too large, though, because competition of the physical memory may
# cause paging in the operating system. Note that on 32bit systems you
# might be limited to 2-3.5G of user level memory per process, so do not
# set it too high.
innodb_buffer_pool_size=8M
与MyISAM不同,InnoDB使用缓冲池来缓存索引和 行数据。 设置得越大,需要的磁盘I / O就越少访问表中的数据。 在专用数据库服务器上,您可以设置此项参数高达机器物理内存大小的80%。 但是不要设置它太大,因为物理记忆的竞争可能会太大导致操作系统中的分页。 请注意,在32位系统上你每个进程可能限制为2-3.5G的用户级内存,所以不要设得太高了。
# The number of regions that the InnoDB buffer pool is divided into.
# For systems with buffer pools in the multi-gigabyte range, dividing the buffer pool into separate instances can improve concurrency,
# by reducing contention as different threads read and write to cached pages.
innodb_buffer_pool_instances=8
官方给出的解释如下:InnoDB缓冲池分区的区域数。 对于具有数千兆字节范围的缓冲池的系统,将缓冲池划分为单独的实例可以提高并发性, 通过减少争用,因为不同的线程读取和写入缓存的页面。
我的电脑是16G内存,将原来的innodb_buffer_pool_size=8M改为2G
俩个表数据量均在160W左右, select count(1) 查询从原来的13s多直接降到0.5s,性能一下提升几十倍,如图:
修改前查询结果:
修改后查询结果:
结果对比很明显,通过命令 show VARIABLES LIKE '%innodb_buffer_pool_size%' 查看当前值的大小。
总结:innodb缓存池设置大些且在合理范围内能减少磁盘的IO访问,是mysql性能优化的重点之一(Mysql索引优化,合理的表结构设计等)相信小伙伴们等不及了,快去尝试下吧!