在我的电脑上遇到 MySQL(8.0.34) 执行 SQL 缓慢,但是在服务器上非常快,速度可以差十倍以上,可能是因为我的电脑是 windows,默认的 innodb_buffer_pool_size
为 8M,可以使用命令:
show variables like '%innodb_buffer_pool%';
在得到的结果中 innodb_buffer_pool_size
就是缓存大小,单位是 bit 因此需要除以 (1024*1024)
。
想要分析是否是缓存不足造成的,还是SQL语句造成的,可以使用命令来查看是否是这个值的问题:
show status like 'innodb_buffer_pool_read%';
innodb_buffer_pool_reads
:表示InnoDB缓冲池无法满足的请求数,需要从磁盘中读取。
innodb_buffer_pool_read_requests
:表示从内存中读取逻辑的请求数。
计算 Innodb_buffer_pool_reads
与 Innodb_buffer_pool_read_requests
的比值,结果约为:0.075612863948484050974190839303922,这个比值较大,说明缓存不足,需要大量的从磁盘中读取。
此时我将 innodb_buffer_pool_size
修改为 256M
在配置文件中更改(MySQL 版本不同路径可能不同),路径为:
C:\ProgramData\MySQL\MySQL Server 8.0\my.ini
修改完成后重启 MySQL 服务,然后执行一些 SQL 语句,再次查询则能看到结果:
0.00016967485599892317600870468477426,说明缓存充足,很少请求磁盘。
如果计算得到的比值很小,但是执行 SQL 依然缓慢,则需要其他优化手段,如:添加索引、优化 SQL。
留言