当前位置:首页 > 编程技术 > MySql > 正文内容

MySql-CPU过高处理-开启MySQL慢查询日志

曾经2年前 (2022-05-05)MySql649

开启MySQL慢查询日志
sudo nano /etc/mysql/my.cnf
log_slow_queries = /var/log/mysql/slow.sql
long_query_time = 0.5
log-queries-not-using-indexes #不使用索引,这句可以不用
sudo service mysql restart
show variables like "%slow%"; 查看慢查询相关配置
SELECT SLEEP(1); 执行一个1秒的查询,上面定义了超过0.5秒的查询是慢查询,所以应该可以在慢查询日志里看到这条查询.
show global status like '%slow%'; 查看一共执行了多少次慢查询,上面执行了1次,这里会增加1.
mysqldumpslow /var/log/mysql/slow.sql > slow.sql
mysqldumpslow -a -s r -t 5 /var/log/mysql/slow.sql > slow.sql 返回最多行数(row)的前(top)5个查询.
mysqldumpslow -a -s c -t 5 /var/log/mysql/slow.sql > slow.sql 按计数(count)顺序返回前(top)5个查询.
日志的命名要注意/etc/logrotate.d/mysql-server的设置,否则可能影响logrotate对日志的归档.

MySQL query cache : 自动缓存SQL查询的结果,被缓存的SQL查询可以被反复地快速执行.
cat /etc/mysql/my.cnf |grep query_cache
mysql -uroot -p -e "show variables" |grep query_cache
show variables like "%query_cache%";
写操作频繁,表经常变化,query cache就会经常被刷新(flush),这时MySQL性能反而会下降.
所以说query cache有利有弊,应视情况合理实用.

MySQL5.6 表定义信息缓存和打开表的缓存数量默认值:
(你的这两个值都偏小)
table_definition_cache    1400
table_open_cache    2000

table_definition_cache 最小值可以设为400,此时mysqld内存占用为70MB,performance_schema_max_table_instances的值为445.
table_definition_cache 默认值为1400,计算公式为400+(table_open_cache/2),此时mysqld内存占用为430MB左右.

table_definition_cache是表定义信息缓存,用来存放表定义信息.当我们的MySQL中使用了较多的表的时候,此缓存无疑会提高对表定义信息的访问效率.
注意,这里设置的是可以缓存的表定义信息的数目,而不是内存空间的大小.

table_open_cache是打开表的缓存数量,不是定义内存的大小,而是定义可以缓存多少打开的表的文件句柄信息.
如果定义的太小,那么MySQL在需要打开新表的时候就要不断的关闭已经打开的表和打开此次需要打开的表,性能会受到影响.

查看size和cache相关值:

mysql -uroot -p -e "show variables like '%size%'"
mysql -uroot -p -e "show variables like '%cache%'"


扫描二维码推送至手机访问。

版权声明:本文由珍惜发布,如需转载请注明出处。

本文链接:https://www.zp68.com/article/16.html

分享给朋友:

“MySql-CPU过高处理-开启MySQL慢查询日志” 的相关文章

MYSQL性能优化之子查询

有时候表大的情况下直接查询会影响查询性能。我们可以先查询出来索引,再利用索引子查询记录。这样可以大大提升性能。SELECT fl.*,u.username FROM  files fl,users u  WHERE&nb...

Mysql 如何开启事件计划和查看开启状态

1、查询mysql的事件计划是否开启:SHOW VARIABLES LIKE 'event_scheduler';OFF 关闭 ON 开启2、开启事件计划开启event_scheduler 的指令,下面任何一个命令都可以SET GLOBAL event_scheduler = ON;...

查看 Mysql 数据库的执行记录

问题有时想要查看不同终端或者web端执行的数据库查询。在学习 sql注入 的时候可以通过数据库执行记录查看真正注入的sql语句。方法开启数据库的日志模式,通过日志查看历史执行记录开启&关闭日志模式(可选择输出到表或文件中)SET GLOBAL log_output&nbs...

发表评论

访客

看不清,换一张

◎欢迎参与讨论,请在这里发表您的看法和观点。