在我的电脑上遇到 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%';

image-20231019092823272

innodb_buffer_pool_reads:表示InnoDB缓冲池无法满足的请求数,需要从磁盘中读取。

innodb_buffer_pool_read_requests:表示从内存中读取逻辑的请求数。

计算 Innodb_buffer_pool_readsInnodb_buffer_pool_read_requests 的比值,结果约为:0.075612863948484050974190839303922,这个比值较大,说明缓存不足,需要大量的从磁盘中读取。

此时我将 innodb_buffer_pool_size 修改为 256M

在配置文件中更改(MySQL 版本不同路径可能不同),路径为:

C:\ProgramData\MySQL\MySQL Server 8.0\my.ini

修改完成后重启 MySQL 服务,然后执行一些 SQL 语句,再次查询则能看到结果:

image-20231019091350159

0.00016967485599892317600870468477426,说明缓存充足,很少请求磁盘。

如果计算得到的比值很小,但是执行 SQL 依然缓慢,则需要其他优化手段,如:添加索引、优化 SQL。

最后修改日期: 2024年11月18日

作者

留言

撰写回覆或留言