Mysql5.7 生产环境调优
随着数据的增多,作为Mysql的最后一个免费的版本5.7开始出现查询缓慢的问题。
开始我会按照explain的方式去查询sql是否进缓存等因素,良好的sql在数据库中是必要的,但是当你连select * from [table]这样的语句都能查询很久的时候,你就应该意识到,很可能并不是sql的问题,而问题最多的往往是因为mysql的默认配置。
而针对mysql的配置文件,My.cnf这个文件的优化网上有很多教程,但是都是层次不齐,很多配置即使他注释了,你也知道了这个配置的意思,却一配置上去往往连mysql的重启报错了。
# 打开配置文件 vim /etc/my.cnf
非集群的Mysql往往没有那么复杂,而网上能查到的多半是集群模式下需要配置的,这些配置极其复杂。你需要研读mysql的文档,但是基于这些历史版本的文档往往需要大量的时间。
今天碰到有个表只有1000多条数据,虽然列很多,但是1000多条数据即使是没有索引,也不可能这么慢。需要10s钟,显然我需要解决这个问题。我首先先把数据和表导到自己本地的Mysql8.0,8.0发现这个表查询连1s都不需要。
根据这个发现,我开始意识到这不是sql或者索引的问题,而是mysql本身的问题。
我打开服务器,查询Mysql的配置文件My.cnf文件,这个配置文件除了配置了端口密码等信息外,几乎没什么配置。
我配置了16g的数据服务器,给了6g的数据缓冲区,原来只有16M,显然这个量来说,对于数据库来说,是远远不够的,当我调节了这个参数后,数据查询开始加快,很多语句从原来的十几秒变成了1-2秒,如果你是用mysql的InnoDb的引擎,这个配置是必须的。
#数据缓冲区buffer pool大小,建议使用物理内存的 75% innodb_buffer_pool_size = 6G