首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么mysql“显示全局状态”查询要花费15分钟?

问为什么mysql“显示全局状态”查询要花费15分钟?
EN

Database Administration用户
提问于 2013-01-10 14:57:01
回答 1查看 2.1K关注 0票数 1

我正在查看慢速日志,在我的一个奴隶上,显示全局状态的平均时间是914 s。

知道怎么找出原因吗?

EN

回答 1

Database Administration用户

发布于 2013-01-10 16:03:23

这听起来很不寻常,但并不奇怪。运行SHOW GLOBAL STATUS;所需的就是使用特权,它只是一般连接,如的MySQL文档SHOW STATUS第一段最后一句所述:

此语句不需要任何特权。它只需要连接到服务器的能力。

鉴于这些事实,只能有两个可能的原因:

可能的原因#1

在MySQL 5.1和MySQL 5.5中,全局状态值可以通过信息模式数据库访问。

以下是表的布局:

代码语言:javascript
复制
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连接会受到影响。

可能的原因#2

由于主机缓存和DNS,用户身份验证可能会被阻塞一段时间。注2 关于DNS查找优化和主机缓存的MySQL文档:

对于每个新的客户端连接,服务器使用客户端IP地址检查客户端主机名是否位于主机缓存中。如果没有,服务器将尝试解析主机名。首先,它将IP地址解析为主机名,并将该主机名解析为IP地址。然后将结果与原来的IP地址进行比较,以确保它们是相同的。服务器将有关此操作结果的信息存储在主机缓存中。

如果您没有配置跳过主机缓存和跳过-名称-解析,请将它们添加到my.cnf中:

代码语言:javascript
复制
[mysqld]
skip-host-cache
skip-name-resolve

并尽快重新启动mysql。

尾声

原因2有点牵强,因为身份验证不应该触发进入慢速查询日志的条目。

原因1的可能性要大得多,因为如果全局状态被加载到一个表中,它是一个带有明显的time.Thus通道的SQL查询,如果查询的运行时间(以秒为单位)超过了长_查询_时间,它将被记录到缓慢的查询日志中。

票数 3
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/31694

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档