• 由于数据库连接timeout产生页面5xx错误
• 由于慢查询造成页面无法加载
• 由于阻塞造成数据无法提交
• 很多数据库的问题都是由于低效的查询引起的
• 流畅页面的访问速度
• 良好的网站功能体验
• sql和索引,写出健壮的sql,索引不是越多越好
• 数据表结构(存储引擎,字段大小,字段类型,索引,第三规范)
• 系统配置(打开文件系统次数,文件安全性)
• 硬件,选择最适合数据库的cpu,更快的IO,更大的内存,cpu不是越多越好,IO并不能减少锁的机制, 也就是不能减少阻塞,所以说硬件的优化成本最高,效果最差
使用MySQL慢查日志对有效问题的SQL进行监控
• show variables like ‘%slow_query_log%‘
可查出两条: slow_query_log ——查看是否开启慢查日志 ON开启 OFF关闭
slow_query_log_file——日志存储位置
• set global slow_query_log = on 开启慢查日志
• show variables like ‘long_query_time‘ 什么样的SQL才会被记录到慢日志中由long_query_time控制,默认情况下为10秒,可以使用命令修改,也可以在my.cnf参数里面修改。关于运 行时间正好等于long_query_time的情况,并不会被记录下来。也就是说,在mysql源码里是判断大于long_query_time,而非大于等于。如果我修改了变量long_query_time,但是查询变量long_query_time的值还是10,难道没有修改到呢?注意:使用命令 set global long_query_time=4修改后,需要重新连接或新开一个会话才能看到修改值。你用show variables like ‘long_query_time‘查看是当前会话的变量值,你也可以不用重新连接会话,而是用show global variables like ‘long_query_time‘
• set global log_queries_not_using_indexes = on 设置没有索引的记录到慢查询日志中
#使用set global slow_query_log=1开启了慢查询日志只对当前数据库生效,MySQL重启后则会失效。如果要永久生效,就必须修改配置文件my.cnf(其它系统变量也是如此)
原文:https://www.cnblogs.com/cuijiade/p/10819332.html