个人网站要备案嘛,网站建设模板删不掉,小程序开发合同,四川省建设厅官方网站电话Mysql第三篇—响应太慢#xff1f;数据库卡顿#xff1f;如何优化#xff1f;
统计SQL的查询成本#xff1a;last_query_cost
一条SQL查询语句在执行前需要确定查询执行计划#xff0c;如果存在多种执行计划的话#xff0c;MySQL会计算每个执行计划所需要的成本#x…Mysql第三篇—响应太慢数据库卡顿如何优化
统计SQL的查询成本last_query_cost
一条SQL查询语句在执行前需要确定查询执行计划如果存在多种执行计划的话MySQL会计算每个执行计划所需要的成本从中选择成本最小的一个作为最终执行的执行计划。 如果想要查看某条SQL语句的查询成本可以在执行完这条SQL语句之后通过查看当前会话中的last_query_cost变量值来得到当前查询的成本。它通常也是评价一个查询的执行效率的一个常用指标。这个查询成本对应的是SQL语句所需要读取的页的数量。 sql命令如下
SHOW STATUS LIKE last_query_cost;比如我们现在创建了一个数据库表代码如下
CREATE TABLE part_tab19 (id int,c1 int,test_time datetime,PRIMARY KEY(id, test_time))engineINNODB PARTITION BY RANGE (month(test_time)) (PARTITION month1 values less than(2),PARTITION month2 values less than(3),PARTITION month3 values less than(4),PARTITION month4 values less than(5),PARTITION month5 values less than(6),PARTITION month6 values less than(7),PARTITION month7 values less than(8),PARTITION month8 values less than(9),PARTITION month9 values less than(10),PARTITION month10 values less than(11),PARTITION month11 values less than(12),PARTITION month12 values less than(13));然后我们使用存储过程往表里面存储100多万条数据如下图 看下如果我们按照联合主键中的其中一个主键查询的时候它的查询成本是多少如下图 接下来我们使用普通列c1进行同样的查询看看它的查询成本是多少如下图 像上面的这种查询成本比较高的sql语句一般都是我们后期需要优化的。
定位执行慢的SQL慢查询日志
MySQL的慢查询日志用来记录在MySQL中响应时间超过阈值的语句具体指运行时间超过long_query_time值的SQL则会被记录到慢查询日志中。long_query_time的默认值为10意思是运行10秒以上(不含10秒)的语句认为是超出了最大忍耐时间值。 它的主要作用是帮助我们发现那些执行时间特别长的SQL查询并且有针对性地进行优化从而提高系统的整体效率。当数据库服务器发生阻塞、运行变慢的时候检查一下慢查询日志找到那些慢查询对解决问题很有帮助。比如一条sql执行超过5秒钟就算慢SQL希望能收集超过5秒的sql结合explain进行全面分析。 默认情况下MySQL数据库没有开启慢查询日志需要手动来设置这个参数。如果不是调优需要的话一般不建议启动该参数因为开启慢查询日志会或多或少带来一定的性能影响。 慢查询日志支持将日志记录写入文件。
开启慢查询日志参数
1.开启slow_query_log 在使用前需要先看下慢查询是否已经开启使用下面这条命令即可:
show variables like slow_query_log;如下图 能看到slow_query_logOFF可以把慢查询日志打开注意设置变量值的时候需要使用global否则会报错
set global slow_query_logON再来查看下慢查询日志是否开启以及慢查询日志文件的位置
show variables like %slow_query_log%;如下图 能看到这里慢查询分析已经开启同时文件保存在了SKUSER-ICQOUU76-slow.log中。
2. 修改long_query_time阈值 接下来看下慢查询的时间阈值设置使用如下命令
show variables like %long_query_time%;如下图 这里如果想把时间缩短比如设置为 1 秒可以这样设置
show global variables like %long_query_time%;设置完了再查看下阈值如下图
查看慢查询数目
查询当前系统中有多少条慢查询记录代码如下
show global status like %Slow_queries%;如下图
慢查询日志路径
在C:\ProgramData\MySQL\MySQL Server 8.0\Data这里如下图