IBM Cloud Docs
管理 MySQL 連線

管理 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 使用者、 mysqlSHOW 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 連線

如果您的部署達到連線限制,或者您在連接至部署時遇到問題,並且懷疑大量連線是問題,請中斷 (或結束) 部署的所有連線。

在使用者介面的 設定 標籤上,您的部署有一個 End Connections 按鈕。 請小心,因為它會干擾任何連接至您部署的項目。

在 CLI 中,使用如下指令來結束與部署的連線:

ibmcloud cdb deployment-kill-connections <deployment name or CRN>

您也可以使用 Cloud Databases API 來執行結束所有連線作業。

MySQL 連線儲存區作業

防止超出連線限制及確保有效處理來自應用程式的連線的方法之一是透過連線儲存區。

MySQL 連接器 可讓您從其他語言或環境連接並執行 MySQL 陳述式,包括 ODBC、 Java (JDBC)、C++、 Python、PHP、 Perl、 Ruby,以及原生 C 和內嵌 MySQL 實例。

例如,使用 MySQL Connector/J 的連線儲存區可以增加效能,同時減少整體用量。 MySQL Connector/Python 也容許使用 mysql.connector.pooling 模組進行最佳化。