管理 MySQL 连接
与 IBM Cloud® Databases for MySQL 部署的连接使用资源,因此请考虑调整部署性能时需要多少连接。 MySQL 使用 max_connections
设置来限制连接数 (以及由连接使用的资源) ,以防止失控连接行为压倒部署的资源。
您可以使用 管理用户 和 mysql
来检查 max_connections
的值。 使用如下命令与 admin
用户一起检查 max_connections
:
ibmclouddb=> SHOW max_connections;
max_connections
-----------------
200
(1 row)
如何计算 MySQL max_connections
变量
max_connections
是 MySQL 中的配置参数,用于确定可以与数据库服务器建立的最大并发连接数。
MySQL max_connections
基本公式
计算 max_connections
的基本公式为:
Available RAM = Global Buffers + (Thread Buffers x `max_connections`)
要检索缓冲区及其值的列表,请使用类似如下的命令:
SHOW VARIABLES LIKE '%buffer%';
MySQL 连接限制
在供应时, Databases for MySQL 将 MySQL 数据库的最大连接数设置为 200。 通过 更改 MySQL 配置来提高此值。
保留一些可用连接,因为许多连接是在内部保留的,以维护数据库的状态和完整性。
限制任何非管理员帐户的同时连接数。 例如,设置 max_user_connections=3
会将用户帐户限制为最多三个同时连接。
超过部署的连接限制将对数据库的运行状况产生负面影响,并导致应用程序无法访问该数据库。 达到连接限制后,任何启动新连接的尝试都会导致错误。
FATAL: remaining connection slots are reserved for
non-replication superuser connections
使用 admin
用户, mysql
和 SHOW GLOBAL STATUS
访问有关与部署的连接的信息。
mysql> SHOW GLOBAL STATUS;
+-----------------------------------+------------+
| Variable_name | Value |
+-----------------------------------+------------+
| Aborted_clients | 0 |
| Aborted_connects | 0 |
| Bytes_received | 155372598 |
| Bytes_sent | 1176560426 |
...
| Connections | 30023 |
| Created_tmp_disk_tables | 0 |
| Created_tmp_files | 3 |
| Created_tmp_tables | 2 |
...
| Threads_created | 217 |
| Threads_running | 88 |
| Uptime | 1389872 |
+-----------------------------------+------------+
要确定连接的位置,请使用类似如下的命令,在 threads_connected
变量的帮助下按数据库细分连接:
mysql> show status where `variable_name` = 'Threads_connected';
要进一步调查连接,请使用 SHOW PROCESSLIST
命令:
SHOW [FULL] PROCESSLIST;
结束 MySQL 连接
与 mysqld(即 MySQL Server) 的每个连接都在单独的线程中运行,并且可以使用类似如下的命令通过 processlist_id
语句停止:
KILL [CONNECTION | QUERY] processlist_id
- 在停止连接正在运行的任何语句之后,
KILL CONNECTION
将结束与processlist_id
相关联的连接。 KILL QUERY
结束正在运行连接的语句,但保留连接本身不变。
有关更多信息,请参阅 MySQL Reference Manual KILL Statement。
结束 MySQL 连接
如果您的部署达到连接限制,或者您在连接到部署时迂到问题,并且怀疑大量连接是问题,请断开 (或结束) 与部署的所有连接。
在 UI 中的 设置 选项卡上,有一个按钮用于 End Connections
到您的部署。 请谨慎操作,因为这会中断与您的部署连接的任何内容。
在 CLI 中,使用如下命令结束与部署的连接:
ibmcloud cdb deployment-kill-connections <deployment name or CRN>
您还可以使用 Cloud Databases API 来执行结束所有连接操作。
MySQL 连接池
防止超过连接限制并确保高效处理来自应用程序的连接的一种方法是通过连接池。
MySQL 连接器 使您能够从其他语言或环境 (包括 ODBC, Java (JDBC) , C++ , Python, PHP , Perl, Ruby以及本机 C 和嵌入式 MySQL 实例) 连接和运行 MySQL 语句。
例如,使用 MySQL Connector/J 的连接池可以提高性能,同时降低总体使用率。 MySQL Connector/Python 还允许使用 mysql.connector.pooling
模块进行优化。