前言:
当前同学们对“mysql安装卡住了”大概比较关怀,咱们都需要了解一些“mysql安装卡住了”的相关内容。那么小编也在网上搜集了一些有关“mysql安装卡住了””的相关知识,希望朋友们能喜欢,看官们一起来学习一下吧!参考地址:-慢查询日志介绍.html
前言
有时我们会发现网站访问十分缓慢甚至于卡死,那么有哪些原因会导致这个问题呢?
MySQL 语句没有进行优化,数据库的读写耗费了大量的时间 可能访问的网页中存在调用远程(第三方)接口的业务,远程接口返回特别慢 大量的访问请求导致带宽撑满 服务器负载过大忙不过来,比如说 CPU 和内存消耗完了 本地网络波动 很多情况下经过排查我们会发现导致网站访问慢的原因在于数据库瓶颈,下面我们来讲讲对应数据库中的慢查询导致的访问慢这种情况如何排查和解决。
一、慢日志参数及设置1.1、慢查询配置字段:
slow_query_log 是否开启慢查询日志,1表示开启,0表示关闭。slow_query_log_file MySQL数据库慢查询日志存储路径。long_query_time 慢查询阈值,当查询时间多于设定的阈值时,记录日志。log_queries_not_using_indexes 未使用索引的查询也被记录到慢查询日志中(可选项)log_output 日志存储方式 log_output=’FILE’表示将日志存入文件,默认值是’FILE’1.2、慢日志设置
1.2.1、热修改(推荐设置)
mysql> show variables like '%slow_query_log%'; #查看是否开启慢日志mysql> set global slow_query_log=1; #开启慢日志Query OK, 0 rows affected (0.00 sec)mysql> set global long_query_time = 0.5; #设置慢查询阀值,设置为0.5秒Query OK, 0 rows affected (0.00 sec)mysql> set global log_queries_not_using_indexes = OFF; #关闭未使用索引的记录,默认是ON开启的Query OK, 0 rows affected (0.00 sec)mysql> set global log_throttle_queries_not_using_indexes = 10; #每分钟记录未索引的次数Query OK, 0 rows affected (0.00 sec)mysql> set session min_examined_row_limit = 10001; #查询语句(使用索引)的SQL,扫描行数大于min_examined_row_limit的前提下,执行时长如果大于long_query_time则会记录,小于则不会记录;扫描行数小于min_examined_row_limit的前提下,执行时长的参数设置就不生效;Query OK, 0 rows affected (0.00 sec)
1.2.2、修改my.cnf配置
slow_query_log =1slow_query_log_file=/tmp/mysql_slow.loglong_query_time = 0.5log_queries_not_using_indexes = OFFlog_throttle_queries_not_using_indexes = 10min_examined_row_limit = 100011.3、慢查询日志内容说明
# Time: 2020-05-21T11:48:53.370480+08:00# User@Host: root[root] @ localhost [] Id: 8# Query_time: 2.763478 Lock_time: 0.000204 Rows_sent: 0 Rows_examined: 1100003SET timestamp=1590032930;insert into employee1 (employeeid,employeename,createtime,jiessie1) select employeeid,employeename,createtime,jiessie1 from employee1;# Time: 日志产生的时间# User@Host: 客户端连接信息# Id: 服务器端线程# Query_time:查询时长# Lock_time:锁持有时长# Rows_sent:返回行数# Rows_examined:扫描行数如果mysqld启动时指定了--log-short-format参数,则不会输出第一、第二行。三、慢查询分析工具3.1、pt-query-digest
pt-query-digest 是用于分析 mysql 慢查询的一个工具,它可以分析 binlog、General log、slowlog,也可以通过 SHOWPROCESSLIST 或者通过 tcpdump 抓取的 MySQL 协议数据来进行分析。可以把分析结果输出到文件中,分析过程是先对查询语句的条件进行参数化,然后对参数化以后的查询进行分组统计,统计出各查询的执行时间、次数、占比等,可以借助分析结果找出问题进行优化。
3.1.1、pt-query-digest安装
#执行完上面后,执行下面wget <;tar percona-toolkit-2.2.4.tar.gzcd percona-toolkit-2.2.4perl Makefile.PLmake && make install
pt-query-digest slow.log > slow_log_reports3.2、Explain命令
MySQL 提供了一个 EXPLAIN 命令, 它可以对 SELECT 语句进行分析, 并输出 SELECT 执行的详细信息, 以供开发人员针对性优化。所以我们需要先了解 explain 命令的使用及相关参数说明。
#usageexplain SELECT * FROM testpaper WHERE target IN ('course-7169','course-7101')\\G;#result id: 1 select_type: SIMPLE table: testpaper partitions: NULL type: rangepossible_keys: target key: target key_len: 92 ref: NULL rows: 38 filtered: 100.00 Extra: Using where1 row in set, 1 warning (0.00 sec)
select_type 显示本行是简单或复杂 select。如果查询有任何复杂的子查询,则最外层标记为 PRIMARYtable 访问引用哪个表type 数据访问/读取操作类型(ALL、index、range、ref、eq_ref、const/system、NULL)possible_keys 揭示哪一些索引可能有利于高效的查找key 显示 mysql 决定采用哪个索引来优化查询key_len 显示 mysql 在索引里使用的字节数ref 显示了之前的表在 key 列记录的索引中查找值所用的列或常量rows 为了找到所需的行而需要读取的行数,估算值,不精确
type:指访问类型,是一个比较重要的指标。 ALL :查询的最差情况,说明数据库通过扫描全表的方式得出了结果。在数据量十分庞大时需要的时间很高 index:按照索引次序进行的全表扫描,避免了排序的开销。 range:在一个范围内的索引扫描。 ref:一种索引扫描,它返回所有匹配某个单个值的行。 eq_ref:使用唯一性索引或主键查找,最多只返回一条符合条件的记录。 const:当确定最多只会有一行匹配的时候,MySQL优化器会在查询前读取它而且只读取一次,因此非常快
结果值从好到坏依次是:system > const > eq_ref > ref > fulltext > ref_or_null > index_merge > unique_subquery > index_subquery > range > index > ALL ,一般来说,得保证查询至少达到 range 级别,最好能达到 ref。
key:显示MySQL实际决定使用的键(索引)。如果没有选择索引,键是NULL。 key_len:显示MySQL决定使用的键长度。如果键是NULL,则长度为NULL。使用的索引的长度。在不损失精确性的情况下,长度越短越好 。 Extra:显示MySQL在查询过程中的一些详细信息,MySQL查询优化器执行查询的过程中对查询计划的重要补充信息。 Using filesort:通过索引生成了有序的结果 Using temporary:用临时表保存中间结果,常用于GROUP BY 和 ORDER BY操作中,一般看到它说明查询需要优化了 Using index:说明查询是覆盖了索引的,不需要读取数据文件,从索引树(索引文件)中即可获得信息。如果同时出现using where,表明索引被用来执行索引键值的查找,没有using where,表明索引用来读取数据而非执行查找动作。这是MySQL服务层完成的,但无需再回表查询记录。 Using where:使用了WHERE从句来限制哪些行将与下一张表匹配或者是返回给用户。注意:Extra列出现Using where表示MySQL服务器将存储引擎返回服务层以后再应用WHERE条件过滤。
标签: #mysql安装卡住了