你如何计算 mysql max_connections ?
你有什么考虑?
在尝试访问使用 postgresql 数据库的网站时,甚至在使用 psql 实用程序或 pgadmin3 时,我突然收到此错误。
我的数据库设置为处理 150 个最大连接数:
# SHOW max_connections;
max_connections
-----------------
150
(1 row)
Run Code Online (Sandbox Code Playgroud)
重新启动我的网站所在的 ubuntu 服务器(这实际上是唯一使用连接的东西)后,我看到当前的连接量为 140:
# select count(*) from pg_stat_activity;
count
-------
140
(1 row)
Run Code Online (Sandbox Code Playgroud)
我不明白在重新启动服务器后突然有这么多连接。所以我检查了 postgresql 活动:
# SELECT * FROM pg_stat_activity;
Run Code Online (Sandbox Code Playgroud)
我看到 100 多列具有相同的精确查询,如下所示:
SELECT "reports".* FROM "reports" WHERE (("reports"."time" < '2014-06-28 13:30:42.000000' AND "reports"."unit_id" = 3192)) ORDER BY "reports"."id" DESC LIMIT 1
Run Code Online (Sandbox Code Playgroud)
更重要的是它们都具有相同的客户端地址(我的 Web 服务器)。
该 Web 服务器使用 ruby on rails,连接池为 50。即使连接池为 50,Passenger 进程/prefork apache 配置是单线程的,因此每个进程不能产生 50 个线程和 50 个数据库连接。更重要的是,这是在系统重新启动后发生的,这将所有用户都从我的 …
根据https://devcenter.heroku.com/articles/heroku-postgres-legacy-plans,连接限制为 500
根据https://wiki.postgresql.org/wiki/Tuning_Your_PostgreSQL_Server “通常,良好硬件上的 PostgreSQL 可以支持几百个连接”
这个限制的决定因素是什么?#CPU核心?内存?操作系统?
我正在将 MySQLi 用于我的网络应用程序,但是每当我想访问某个特定页面时,我都会得到mysqli_connect() [function.mysqli-connect]: (42000/1203): User ***_user already has more than 'max_user_connections' active connections.
我已经尝试关闭所有连接,但这并没有改善情况。
有没有办法确切知道在任何特定时刻打开了哪些连接或任何其他可以帮助我解决此问题的有用数据?
顺便说一句,我使用的是 PHP 5.2.17 和 MySQL 5.1。
PostgresSQL wiki建议寻找最佳数据库连接池大小的规则。
数量 = ((core_count * 2) + effective_spindle_count)
但它没有解释有效主轴数是多少以及如何找到该值。
我需要一个查询,它可以为某个用户提供与某个数据库的活动或打开的连接数。我一直在寻找几个小时,到目前为止一无所获。我很接近,所以这是我尝试过的。
SHOW STATUS WHERE `variable_name` = 'Threads_connected';
SHOW STATUS LIKE '%onn%';
SELECT * FROM information_schema.processlist WHERE USER='database_user';
我在一家网络托管公司工作,我们的一个客户一直在达到他的max_user_connections极限,所以在解决为什么我需要知道他的用户现在使用了多少连接时,因为他不是共享服务器。我目前使用 MySQL (InnoDB) 版本 5.5.36。任何帮助将不胜感激!
来自 PostgreSQL 文档:
为了获得最佳吞吐量,活动连接的数量应该接近 ((core_count * 2) + Effective_spindle_count)
调整你的 PostgreSQL 服务器 -> max_connections
通常,良好硬件上的 PostgreSQL 可以支持几百个连接。
对我来说——不是一个有经验的 DBA——这里的某个地方存在差异,特别是查看一些 DB 即服务提供商的产品。
例如,此时 Amazon RDS 最大的机器 (db.r3.8xlarge) 有 32 个 vCPU,根据第一个公式,如果有很多磁盘,它可能会在池中有 100 个连接的情况下以最佳方式运行。使用第二个公式中的“几百个连接”,它会不会运行得很糟糕?
更极端的是另一家 DBaaS 提供商的差异,他们提出了一个具有 500 个并发连接的 2 核服务器。这怎么可能运作良好?
如果我误解了什么,请告诉我。非常感谢!
这是我第一次在 AWS 上使用 RDS,我使用 t2.medium 实例运行 MySQL Aurora 和默认配置。CPU 使用率和 DB 连接是很正常的,直到“某事”发生,这导致 DB 连接一直达到最大值(t2.medium 为 80 个连接)。
我只有一个 Web 应用程序,在 EC2 实例上运行。当数据库连接数达到最大值时,EC2 实例的 CPU 使用率绝对正常(25-30%),但所有尝试连接到数据库实例的结果都是“连接过多”。
我当时还检查了数据库实例的 CPU 利用率 - 它没有显示高负载信号。在罢工期间,CPU 利用率下降到 20% 并始终保持该比率。
我不明白的事情:数据库连接已达到最大值,但为什么数据库 CPU 利用率下降了?由于这些连接中的查询计算,它不应该也处于最大值吗?
请帮助我理解,非常感谢。
(当第二次罢工发生时,我不得不将 RDS 实例的大小调整为 r4.large;我现在仍在运行它,直到我发现问题......)
我有一个在远程托管 VM 服务器 (Windows Server 2019) 上运行的 PostgreSQL 12.1 数据库系统(我将其称为 PGSQL)。几个月前我们升级了服务器操作系统和 PGSQL。从那时起,一切都或多或少地正常运行,直到今天早上,我开始在几乎每个连接到此 PGSQL 实例的内部应用程序中收到上述数据库错误。
为了检查连接,我运行了SELECT * FROM pg_stat_activity;,它返回了 103 行。我的postgresql.conf文件有max_connections = 100,所以这是有道理的,但没有意义的是,在这 103 个连接中,其中 90 多个连接被idle列为DISCARD ALL. 所有这些都显示为由同一非超级用户帐户从服务器自己的内部地址执行。但是,一些连接显示query_start一个月或更长时间前的日期值。
现在,不幸的是,我们现有的许多应用程序都是使用硬编码凭据构建的(我对继承的这些应用程序的代码有很多“清理”工作要做),并且通常是从指向的快捷方式执行的到托管 PGSQL 数据库的服务器上的“应用程序”共享,因此所有这些看起来都不是特别“可疑”。我试图简单地终止使用前一个查询中的值SELECT pg_cancel_backend(<pid>);之一的进程pid,但重新查询pg_stat_activity仍然在结果集中显示相同的记录(据我所知,所有值似乎完全相同)。
也许我没有使用正确的函数来终止这些“挂起”的进程或其他东西,但我无法弄清楚如何单独清除这些连接。因为我需要让我们的生产环境恢复到可用状态,所以我最终只是停止并重新启动服务器上的 PGSQL 服务,这确实清除了所有旧的DISCARD ALL语句,但我很好奇是否可以采取一些措施来防止这种积压的“挂”报表日后出现。
我的问题是,我怎样才能防止这种情况再次发生?需要注意的一件事是,在将 PGSQL 服务器升级到 v12.1 之前,我们运行了 v9.4 多年,并且从未遇到过此问题。我想知道是否有较新版本的 PGSQL 固有的问题,或者甚至可能是在 Windows Server 2019 环境中运行 PGSQL 的问题导致了此行为。
为了参考和整理,以下信息来自评论:
我没有任何服务器端用于管理连接池(我在有关PgBouncer的其他问题中看到了一些参考资料,但还没有机会查看它是否对我们的环境有帮助)。我的大多数应用程序都通过Npgsql …
max-connections ×10
postgresql ×5
mysql ×4
connections ×2
linux ×1
my.cnf ×1
mysql-5 ×1
mysql-5.1 ×1
mysql-5.5 ×1
php ×1
sql-server ×1
unix ×1
users ×1