【问题标题】:Can't connect to MySQL server on '10.52.244.189' ((1040, u'Too many connections'))")无法连接到 '10.52.244.189' 上的 MySQL 服务器 ((1040, u'Too many connections'))")
【发布时间】:2018-02-03 17:07:07
【问题描述】:

我有一个包含 10,000 条记录的表 precommit_tags_change_lists,对此进行选择查询需要很长时间。

我尝试添加如下索引,该索引也挂起...

ALTER TABLE `precommit_tags_change_lists` ADD INDEX `change_list_id` (`change_list_id`)

以下是表的结构,有关如何调试它以及可能导致此问题的任何指导?

一个观察结果是相当多的进程卡在表precommit_tags_changelists上的状态为“等待表元数据锁定”

由于上述原因,数据库连接会间歇性地失败并出现错误Can't connect to MySQL server on '10.xx.xxx.xxx' ((1040, u'Too many connections'))")

【问题讨论】:

  • 其中一些查询是什么样的?根据您选择的具体内容,您添加的索引可能有用也可能没用。

标签: mysql database


【解决方案1】:

10k 条记录的表不是很大。一个 ALTER TABLE 最多应该在几秒钟内完成。我认为您的 ALTER TABLE 很可能正在等待表上的锁。所有其他 SELECT 查询也在等待,因为它们在 ALTER TABLE 后面排队。

ALTER TABLE 需要对表的独占访问权限。在 ALTER TABLE 执行其工作时,不能运行其他查询(嗯,某些类型的更改可以在 MySQL 5.6 或更高版本中“在线”完成,但通常不会)。这种独占访问是使用元数据锁实现的。许多 SELECT 查询可以共享元数据锁,但 ALTER TABLE 不能共享。

所以我认为你真正的问题是你有一些长期运行的查询阻碍了 ALTER TABLE。您尚未显示此长时间运行的查询。

即使在小表上也可以进行长时间运行的查询。它与查询的逻辑有关。您应该在进程列表中查找引用 precommit_tags_change_lists 等待元数据锁定的查询。它将处于其他状态(例如“发送数据”或“写入临时表”等),并且运行时间比任何其他查询都长。

当您找到该查询时,kill it。如果它已经运行了几个小时,那么不太可能有人还在等待它的结果。一旦您终止该查询,就会打破僵局,并且 ALTER TABLE 和所有其他查询都将能够完成。

这是我的猜测,基于经验。但我必须对您的情况做出一些假设,因为您没有提供所有相关信息。

【讨论】:

    【解决方案2】:

    当连接达到配置文件中定义的最大限制时,可能会发生此错误。保持这个值的变量是 max_connections 要检查此变量的当前值,请以 root 用户身份登录并运行以下命令: 显示 max_connections 等全局变量;

    使用 root 用户登录 MySQL 并将 max_connections 变量增加到更高的值。 SET GLOBAL max_connections = 100;

    为了使max_connection值持久化,修改配置文件中的值。

    永久保留更改

    Stop the MySQL server:
    Service mysql stop
    Edit the configuration file my.cnf.
    vi /etc/my.cnf
    Find the variable max_connections under mysqld section.
    [mysql]
    max_connections = 100
    Set into higher value and save the file.
    Start the server.
    Service mysqld start
    

    【讨论】:

    • @nitin.sharma0810 - 是否有命令检查当前建立了多少连接?
    • SELECT @@threads_connected 可能会有所帮助。 SELECT @@max_used_connections 将显示自启动以来的高水位线。由于大多数查询都很快完成,因此第一个 SELECT 时 Web 连接可能很少处于活动状态。
    猜你喜欢
    • 2011-07-15
    • 1970-01-01
    • 2012-02-08
    • 2020-12-03
    • 2021-02-17
    • 1970-01-01
    • 1970-01-01
    • 2010-09-27
    • 2015-05-10
    相关资源
    最近更新 更多