在 mariaDB 中,是否有可能做这样的事情?
- 限制连接数(如在mysql中,如this SO answer中所述)
- 为所有其他连接尝试设置队列,并避免触发
User ** already has more than 'max_user_connections' active connections
如果这样的事情是可能的,那么以这种方式进行设置是否可取?
真实的情况是,某事导致我们的一台服务器阻塞,mariaDB 占用了多达 80% 的 CPU 和大约相同百分比的 RAM。SHOW FULL PROCESSLIST
从一个用户(+50)返回一个荒谬的连接数量,而其他用户有 3-5 个同时连接。如果违规用户被暂时阻止,一切都会恢复正常。
除了从 MySQL 继承的旧资源限制外, MariaDB 授权限制可以包括
MAX_STATEMENT_TIME
(以秒为单位),用于每个查询。还有wait_timeout和interactive_timeout来确保空闲连接终止。
max_session_mem_used限制每个连接的内存使用量。
在服务器能力范围内拥有总的max_connections也是一个不错的举措。
没有单独的队列选项,但是希望使用这些
*_timeout
选项可以减少意外达到限制的可能性。max_connections
设置一个限制。back_log
,理论上,提供了一个待处理的连接队列。但是,实际上,您应该改变您的客户要求不那么高。如果你让数百个连接进入,MariaDB 就会开始绊倒自己。你曾经和一百个其他顾客一起在一家小便利店里吗?
如果它只是一个有问题的客户,请参阅
max_user_connections
。80% 的 RAM 是正常的。80%的CPU可能不好。找到最慢的查询并努力加快(或消除)它们。