慢查询

mysql之慢查询

二次信任 提交于 2020-01-11 04:18:55
分析MySQL语句查询性能的方法除了使用 EXPLAIN 输出执行计划,还可以让MySQL记录下查询超过指定时间的语句,我们将超过指定时间的 SQL语句 查询称为“慢查询”。 含 义 超过指定时间的 SQL语句 查询 记录方法 开启“慢查询”记录功能等 记录办法 记录慢查询的方法: 查看/设置“慢查询”的时间定义 mysql> show variables like "long%"; +-----------------+----------+ | Variable_name | Value | +-----------------+----------+ | long_query_time | 0.000100 | +-----------------+----------+ 1 row in set (0.00 sec) 如上述语句输出,“慢查询”的时间定义为0.0001秒(方便测试,一般设置为1-10秒)。使用下面语句定义“慢查询”时间 mysql> set long_query_time=0.0001; Query OK, 0 rows affected (0.00 sec) 开启“慢查询”记录功能 mysql> show variables like "slow%"; +---------------------+-----------------------------

【原创】MySQL 之 slow log

与世无争的帅哥 提交于 2019-12-04 15:47:13
慢查询有什么用? 它能记录下所有执行超过long_query_time时间的SQL语句,帮你找到执行慢的SQL,方便我们对这些SQL进行优化。 测试用 MySQL 版本。 Server version: 5.6.10-log Source distribution 未做任何慢日志设置时。 mysql> show variables like "%query%"; +------------------------------+--------------------------------------+ | Variable_name | Value | +------------------------------+--------------------------------------+ | binlog_rows_query_log_events | OFF | | ft_query_expansion_limit | 20 | | have_query_cache | YES | | long_query_time | 10.000000 | | query_alloc_block_size | 8192 | | query_cache_limit | 1048576 | | query_cache_min_res_unit | 4096 | | query_cache

Windows + Linux Mysql慢查询日志开启的方法

北城余情 提交于 2019-12-03 21:36:02
打开MySQL慢查询 MySQL慢查询记录日志对于跟踪PHP+MySQL 体系下的MySQL负载调优问题很有用处,比如安装了很多Discuz!插件的用户,这样可以大概排查出那些插件有代码问题。其实启用MySQL的慢查询 日志很简单,只需要在MySQL的配置文件里添加log-slow-queries和 long_query_time两个参数即可。 今天有个朋友问我,就顺带记录上来。更多的MySQL 优化信息可以查看这里:http://www.ccvita.com/category/mysql Windows下开启MySQL慢查询 MySQL在Windows系统中的配置文件一般是是my.ini找到[mysqld]下面加上 log-slow-queries = F:\MySQL\log\mysqlslowquery.log long_query_time = 2 Linux下启用MySQL慢查询 MySQL在Windows系统中的配置文件一般是是my.cnf找到[mysqld]下面加上 log-slow-queries=/data/mysqldata/slowquery.log long_query_time=2 注意 log-slow-queries = F:\MySQL\log\mysqlslowquery.log为慢查询日志存放的位置,一般这个目录要有MySQL的运行帐号的可写权限

[慢查优化]建索引时注意字段选择性 & 范围查询注意组合索引的字段顺序

纵然是瞬间 提交于 2019-12-02 20:25:56
写在前面的话: 之前曾说过 “不要求每个人一定理解 联表查询(join/left join/inner join等)时的mysql运算过程”,但对于字段选择性差意味着什么,组合索引字段顺序意味着什么,要求每个人必须了解; 重复上一次的话 :把mysql客户端(如SQLyog,如HeidiSQL)放在桌面上, 时不时拿出来 explain 一把,这是一种美德 ! 确保亲手查过SQL的执行计划,一定要注意看执行计划里的 possible_keys、key和rows这三个值,让影响行数尽量少,保证使用到正确的索引,减少不必要的Using temporary/Using filesort; 不要在选择性非常差的字段上建索引 ,原因参见优化策略A; 查询条件里出现范围查询(如A>7,A in (2,3))时,要警惕 ,不要建了组合索引却完全用不上,原因参见优化策略B; 我们先回顾一下字段选择性的基础知识。 ——字段选择性的基础知识—— 引子:什么字段都可以建索引吗? 如下表所示,sort 字段的选择性非常差,你可以执行 show index from ads 命令可以看到 sort 的 Cardinality(散列程度)只有 9,这种字段上本不应该建索引: Table Non_unique Key_name Seq_in_index Column_name Collation

mysql-普通查询(General Query)慢查询(Slow Query)相关日志配置

只愿长相守 提交于 2019-12-01 09:05:58
配置 配置方法一: 服务启动时 # vi /etc/my.cnf ... log-output=TABLE,FILE general-log=1 slow-query-log=1 # systemctl restart mysqld log-output 默认是FILE,还有个值是NONE,就不输出日志了.我这里演示的是表和日志文件都输出. 配置方法二: 运行时 mysql> set global log_output="table", global general_log=on, global slow_query_log=on; 查看 查看相关变量: mysql> show variables like 'general%'; +------------------+--------------------------+ | Variable_name | Value | +------------------+--------------------------+ | general_log | ON | | general_log_file | /var/lib/mysql/srv00.log | +------------------+--------------------------+ 2 rows in set (0.00 sec) mysql> show

MySQL优化:使用慢查询日志定位效率较低的SQL语句

北战南征 提交于 2019-11-27 11:45:29
MySQL 通过 慢查询日志 定位那些执行效率较低的SQL 语句,用--log-slow-queries[=file_name]选项启动时,mysqld 会写一个包含所有执行时间超过long_query_time 秒的SQL语句的日志文件,通过查看这个日志文件定位效率较低的SQL 。 慢查询日志在查询结束以后才记录,所以在应用反映执行效率出现问题的时候查询慢查询日志并不能定位问题,可以使用show processlist命令查看当前MySQL在进行的线程,包括线程的状态、是否锁表等,可以实时地查看SQL 的执行情况,同时对一些锁表操作进行优化。 下面我们举例说明一下,如何通过慢查询日志定位执行效率低的SQL 语句: 开启慢查询日志,配置样例: [mysqld] log-slow-queries 在my.cnf 配置文件中增加上述配置项并重启mysql服务,这时mysql慢查询功能生效。慢查询日志将写入参数DATADIR(数据目录)指定的路径下,默认文件名是host_name-slow.log 。 和错误日志、查询日志一样,慢查询日志记录的格式也是纯文本,可以被直接读取。下例中演示了慢查询日志的设置和读取过程。 首先查询一下 long_query_time 的值 。 mysql> show variables like 'long%'; +-----------------+----

[慢查优化]慎用MySQL子查询,尤其是看到DEPENDENT SUBQUERY标记时

风流意气都作罢 提交于 2019-11-27 07:16:21
案例梳理时间:2013-9-25 写在前面的话: 在慢查优化 1 和 2 里都反复强调过 explain 的重要性,但有时候肉眼看不出 explain 结果如何指导优化,这时候还需要有一些其他基础知识的佐助, 甚至需要了解 MySQL 实现原理,如子查询慢查优化 。 看到 SQL 执行计划中 select_type 字段中出现“ DEPENDENT SUBQUERY ”时,要打起精神了! ——MySQL 的子查询为什么有时候很糟糕—— 引子:这样的子查询为什么这么慢? 下面的例子是一个慢查,线上执行时间相当夸张。为什么呢? SELECT gid,COUNT(id) as count FROM shop_goods g1 WHERE status =0 and gid IN ( SELECT gid FROM shop_goods g2 WHERE sid IN (1519066,1466114,1466110,1466102,1466071,1453929) ) GROUP BY gid; 它的执行计划如下,请注意看关键词“DEPENDENT SUBQUERY”: id select_type table type possible_keys key key_len ref rows Extra ------ ------------------ ------ ----------