![MySQL“连接过多”+> 6000 个查询/秒](https://linux22.com/image/802824/MySQL%E2%80%9C%E8%BF%9E%E6%8E%A5%E8%BF%87%E5%A4%9A%E2%80%9D%2B%3E%206000%20%E4%B8%AA%E6%9F%A5%E8%AF%A2%2F%E7%A7%92.png)
我们有一个相当大的 mysql(innodb)数据库,其中有大量插入查询和每秒 6000 个查询。
设置如下:
max_connections = 1000
通常当我这样做show status like '%onn%';
Threads_connected = 3
然而有时(每隔几分钟)我们就会收到“太多联系”错误。
我在这里读到:http://dev.mysql.com/doc/refman/5.5/en/too-many-connections.html
max_connections > 1000 会占用大量 RAM 并且可能不稳定。
如何处理此类错误?是否有查询队列可确保此处的查询流一致?
答案1
您确定线程已连接吗?
免责声明:我是 SqlServer 数据库专家,因此我的 MySql 知识有限。
仍然。
如果您通常只有 3 个线程连接 - 那么超过 1000 个将是一个巨大的打击。如果您使用适当的池,这可能是由于某些过载导致的,突然延迟了事务的完成,从而导致新连接的巨大开销。
我只需查看我的小型服务器,就会发现我打开了 59 个连接(池化,保持它们活动 2 分钟),每秒大约有 30 个批次(我们进行 HPC - 因此在这种情况下,如果需要新的工作,很多代理每秒都会提取状态 - 再加上一些结果并下载)。这比您拥有的多得多 - 批次较少。如果我的连接数突然超过 200,我会认真调查这一点。假设您真的有 6000 个批次每秒,同时有 3 个连接 - 这是连接数的 300 倍爆炸(非常粗略),这是需要认真调查并找出原因的事情。
另外 - 定义您的 RAM。我的意思是,什么是相当大的。对于这么多的 sql 语句,我期望一个真正的服务器(64+gb 内存,2xXeon 或类似的东西)。1000 个连接可能不会占用真正的服务器的大量内存 - 但对于小型 vps 来说,它们会占用大量内存。但是大多数这样的小型实例每秒不会运行 6000 个选择。