IBM Cloud Docs
MySQL 연결 관리

MySQL 연결 관리

IBM Cloud® Databases for MySQL 배치에 대한 연결은 자원을 사용하므로 배치 성능을 조정할 때 필요한 연결 수를 고려하십시오. MySQL 은 max_connections 설정을 사용하여 연결 수 (및 연결에 사용되는 자원) 를 제한하여 연결 작동이 폭주하지 않도록 하여 배치 자원을 압도합니다.

관리 사용자mysql을 사용하여 max_connections 값을 확인할 수 있습니다. Check the max_connections with your admin user using a command like:

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 서버에 대한 각 연결은 별도의 스레드에서 실행되며 다음과 같은 명령을 사용하여 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 연결/J 와의 연결 풀링은 전체 사용량을 줄이면서 성능을 향상시킬 수 있습니다. MySQL Connector/Pythonmysql.connector.pooling 모듈을 사용하여 최적화를 허용합니다.