mysql优化

之前对于mysql出在一个会用能用的阶段,最近有个项目因为并发的原因,导致cpu使用率很高,系统很卡,这几天通过设计优化和mysql优化初步
解决了卡顿的问题。记录一下初步心得,后续有进步持续增加输出。

设计优化

对于并发数高的系统,查询频繁的表项,设计上可以放到缓存中的,建议就放到缓存中,比如redis。我在项目优化中,起初将一个170万条表项的数据放在了mysql中,大量的查询,就把数据库的使用率拉的很高,优化之后,效果明显。

mysql优化方向

  1. 增加索引
    频繁查询的字段建议增加索引,可以明显提高查询速度

  2. 最小值最大值查询比较
    对于匹配最小值最大值比较,建议通过order by 方式查询,然后在代码之中进行判断比较,对于性能提升有一定的帮助。

mysql优化定位

初步接触mysql优化,我从最开始的一脸懵逼,到现在有了初步了解,先把这几天学习到的技巧记录如下。

  1. 查看运行的线程
1
MariaDB [xxdb]> show processlist;

如果开着web-server,默认就会有tcp的链接.
show processlist 显示的信息都是来自MySQL系统库 information_schema 中的 processlist 表。所以使用下面的查询语句可以获得相同的结果:

1
MariaDB [xxdb]> select * from information_schema.processlist
  1. 查看执行的命令
1
2
MariaDB [xxdb]> select * from information_schema.`PROCESSLIST` where info is not null;
MariaDB [xxdb]> select * from information_schema.processlist where Command != 'Sleep' order by Time desc;

查看当前执行的现场,并排序,可以找到比较耗时的命令,进一步进行优化。

  1. 开启慢查询日志记录
1
2
MariaDB [xxdb]> show variables like "%slow%";
MariaDB [xxdb]> show variables like 'long_query_time';

上述命令是查询慢查询的配置,可以打开慢查询。
打开慢查询

方法一:全局变量设置

将 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
2
3
4
[mysqld]
slow_query_log = ON
slow_query_log_file = /usr/local/mysql/data/slow.log
long_query_time = 1

重启mysql或者mariadb.

1
# systemctl restart mariadb

测试慢查询
1.执行一条慢查询SQL语句

1
MariaDB [xxdb]> select sleep(3);

2.查看是否生成慢查询日志

1
# ls  /var/log/mariadb/mysql-slow.log

如果日志存在,MySQL开启慢查询设置成功!