我正在查看慢速日志,在我的一个奴隶上,显示全局状态的平均时间是914 s。
知道怎么找出原因吗?
发布于 2013-01-10 16:03:23
这听起来很不寻常,但并不奇怪。运行SHOW GLOBAL STATUS;所需的就是使用特权,它只是一般连接,如的MySQL文档SHOW STATUS第一段最后一句所述:
此语句不需要任何特权。它只需要连接到服务器的能力。
鉴于这些事实,只能有两个可能的原因:
在MySQL 5.1和MySQL 5.5中,全局状态值可以通过信息模式数据库访问。
以下是表的布局:
mysql> show create table information_schema.global_status\G
*************************** 1. row ***************************
Table: GLOBAL_STATUS
Create Table: CREATE TEMPORARY TABLE `GLOBAL_STATUS` (
`VARIABLE_NAME` varchar(64) NOT NULL DEFAULT '',
`VARIABLE_VALUE` varchar(1024) DEFAULT NULL
) ENGINE=MEMORY DEFAULT CHARSET=utf8
1 row in set (0.00 sec)注意,它是一个内存表。与MyISAM一样,对内存表的所有插入、更新和删除都需要一个完整的表锁(参见内存存储引擎的锁定粒度)。必须有一些间歇锁才能将值填充到此表中。由于此表是DB连接的本地表,因此只有DB连接会受到影响。
由于主机缓存和DNS,用户身份验证可能会被阻塞一段时间。注2 关于DNS查找优化和主机缓存的MySQL文档:
对于每个新的客户端连接,服务器使用客户端IP地址检查客户端主机名是否位于主机缓存中。如果没有,服务器将尝试解析主机名。首先,它将IP地址解析为主机名,并将该主机名解析为IP地址。然后将结果与原来的IP地址进行比较,以确保它们是相同的。服务器将有关此操作结果的信息存储在主机缓存中。
如果您没有配置跳过主机缓存和跳过-名称-解析,请将它们添加到my.cnf中:
[mysqld]
skip-host-cache
skip-name-resolve并尽快重新启动mysql。
原因2有点牵强,因为身份验证不应该触发进入慢速查询日志的条目。
原因1的可能性要大得多,因为如果全局状态被加载到一个表中,它是一个带有明显的time.Thus通道的SQL查询,如果查询的运行时间(以秒为单位)超过了长_查询_时间,它将被记录到缓慢的查询日志中。
https://dba.stackexchange.com/questions/31694
复制相似问题