mysql慢日志查询

时间:2017-03-30 19:51:21

标签: mysql sql amazon-web-services query-optimization

问题 - 当我查看mysql-slowquery.log时,我发现查询具有高query_time,即使一个查询有行检查= 1.此日志是人口密集的数据库。来自php网站。你能解释一下它们的原因和原因(如果有任何关于查询的想法)?

Query type 1 :

# Query_time: 0.198267  Lock_time: 0.000121 Rows_sent: 1  Rows_examined: 10636
use mysql;
SET timestamp=1490832000;
SELECT count(name) FROM information_schema.innodb_sys_tables
    WHERE name like '%/#sql-%';

Query type 2:

# Query_time: 0.007362  Lock_time: 0.000127 Rows_sent: 0  Rows_examined: 1
use mysql;
SET timestamp=1490835900;
SELECT count(*) from mysql.rds_history
    WHERE action = 'disable set master'
    GROUP BY action_timestamp, called_by_user, action, mysql_version ,master_host,
             master_port, master_user, master_log_file , master_log_pos,
             master_ssl
    ORDER BY action_timestamp LIMIT 1;

2 个答案:

答案 0 :(得分:0)

是的,它返回1行,但也检查了行数Rows_examined: 10636。此外,如果执行SELECT时可能需要很长时间,由于任何DML操作,表上存在exclusivewrite锁。在这种情况下SELECT必须等到锁被释放(考虑到事务隔离级别为READ COMMITED

答案 1 :(得分:0)

查询类型1:

information_schema不是真正的表格。相反,它是对各种内存结构的看法。其中一些结构是对需要计算甚至从磁盘中提取的内容的视图。所以......有些IS查询速度很快,有些则出乎意料地慢。

在你的情况下,它必须接触10K的东西,这需要花费时间,显然是198ms。这是合理的。

查询看起来像是计算ALTER TABLE之类的tmp表的数量。 (我不能想为什么它有用。)

(注意:我的回答不同意Rahul的说法。)

查询类型2:

这花费了7毫秒,显然在一张桌子上进行了一次探测,最多只有一行。它似乎已经完成了表扫描,但没有找到action。这是一个合理的'多少时间。毕竟,它必须在本次会议中第一次找到并打开表格,并阅读它发现的任何内容。

然而,查询很奇怪。它有一个COUNT(*)和一个GROUP BY,但它没有列出SELECT中的分组内容。如果有有用的数据,它将返回一组数字(计数),但不知道每个计数所指的是什么。

附录 - 来自亚马逊:

类型1用于识别InnoDB字典中的剩余临时表,在发生崩溃的ALTER时用作诊断辅助。
类型2是对实例上启用的功能的内部检查。

为了解决这些影响,我们需要知道这些查询的频率,无论是RDS还是Aurora,log_queries_not_using_indexes的设置,以及客户端和服务器之间的距离(毫秒延迟)。