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
사용자, 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 서버에 대한 각 연결은 별도의 스레드에서 실행되며 다음과 같은 명령을 사용하여 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/Python 도 mysql.connector.pooling
모듈을 사용하여 최적화를 허용합니다.