之前对于mysql出在一个会用能用的阶段,最近有个项目因为并发的原因,导致cpu使用率很高,系统很卡,这几天通过设计优化和mysql优化初步
解决了卡顿的问题。记录一下初步心得,后续有进步持续增加输出。
设计优化
对于并发数高的系统,查询频繁的表项,设计上可以放到缓存中的,建议就放到缓存中,比如redis。我在项目优化中,起初将一个170万条表项的数据放在了mysql中,大量的查询,就把数据库的使用率拉的很高,优化之后,效果明显。
mysql优化方向
增加索引
频繁查询的字段建议增加索引,可以明显提高查询速度最小值最大值查询比较
对于匹配最小值最大值比较,建议通过order by 方式查询,然后在代码之中进行判断比较,对于性能提升有一定的帮助。
mysql优化定位
初步接触mysql优化,我从最开始的一脸懵逼,到现在有了初步了解,先把这几天学习到的技巧记录如下。
- 查看运行的线程
1 | MariaDB [xxdb]> show processlist; |
如果开着web-server,默认就会有tcp的链接.
show processlist 显示的信息都是来自MySQL系统库 information_schema 中的 processlist 表。所以使用下面的查询语句可以获得相同的结果:
1 | MariaDB [xxdb]> select * from information_schema.processlist |
- 查看执行的命令
1 | MariaDB [xxdb]> select * from information_schema.`PROCESSLIST` where info is not null; |
查看当前执行的现场,并排序,可以找到比较耗时的命令,进一步进行优化。
- 开启慢查询日志记录
1 | MariaDB [xxdb]> show variables like "%slow%"; |
上述命令是查询慢查询的配置,可以打开慢查询。
打开慢查询
方法一:全局变量设置
将 slow_query_log 全局变量设置为“ON”状态
1 | MariaDB [xxdb]> set global slow_query_log='ON'; |
设置慢查询日志存放的位置
1 | MariaDB [xxdb]> set global slow_query_log_file='/var/log/mariadb/mysql-slow.log'; |
查询超过1秒就记录
1 | MariaDB [xxdb]> set global long_query_time=1; |
方法二:配置文件设置
修改配置文件my.cnf,在[mysqld]下的下方加入
1 | [mysqld] |
重启mysql或者mariadb.
1 | # systemctl restart mariadb |
测试慢查询
1.执行一条慢查询SQL语句
1 | MariaDB [xxdb]> select sleep(3); |
2.查看是否生成慢查询日志
1 | # ls /var/log/mariadb/mysql-slow.log |
如果日志存在,MySQL开启慢查询设置成功!