■ Connection 테이블
클라이언트가 MySQL 서버에 연결하면 특정 사용자 이름과 특정 호스트에서 연결됩니다. Performance Schema는 이러한 연결에 대한 통계를 제공하고 다음 테이블을 사용하여 계정 (사용자 및 호스트 조합) 및 사용자 이름 및 호스트 이름별로 개별적으로 추적합니다.
accounts : 클라이언트 계정당 연결 통계
hosts : 클라이언트 호스트 이름당 연결 통계
users : 클라이언트 사용자 이름별 연결 통계
연결 테이블에서 계정의 의미는 사용자 및 호스트 값의 조합을 의미한다는 점에서 mysql시스템 데이터베이스의 MySQL grant tables(권한부여 테이블)에서의 의미와 유사합니다.
grant tables의 경우 계정의 호스트 부분이 패턴이 될 수 있는 반면 성능 스키마 테이블의 경우 호스트값이 항상 특정 비 패턴 호스트 이름이라는 점이 다릅니다.
각 연결 테이블에는 통계의 기반이 되는 추적값당 현재 및 총 연결수를 추적하는 CURRENT_CONNECTIONS 및 TOTAL_CONNECTIONS 컬럼이 있습니다. 표는 추적 값에 사용하는 내용이 다릅니다. 계정 테이블에는 사용자 및 호스트 조합 당 연결을 추적하는 USER 및 HOST 컬럼이 있습니다. 사용자 및 호스트 테이블에는 사용자 이름과 호스트 이름별로 연결을 추적하기위한 각각 USER 및 HOST컬럼이 있습니다.
성능 스키마는 또한 USER 및 HOST컬럼 값이 NULL인 행을 사용하여 인증에 실패한 사용자 세션에 대한 내부 스레드 및 스레드를 계산합니다.
user1 및 user2라는 클라이언트가 각각 hosta 및 hostb에서 한번 연결된다고 가정합니다. 성능 스키마는 다음과 같이 연결을 추적합니다.
- accounts 테이블에는 user1/hosta, user1/hostb, user2/hosta 및 user2/hostb 계정 값에 대해 4개의 행이 있으며 각 행은 계정당 하나의 연결을 계산합니다.
- users 테이블에는 hosta 및 hostb에 대해 두 개의 행이 있으며 각 행은 호스트 이름당 두 개의 연결을 계산합니다.
- users 테이블에는 user1 및 user2에 대해 두 개의 행이 있으며 각 행은 사용자 이름당 두 개의 연결을 계산합니다.
클라이언트가 연결되면 성능 스키마는 각 테이블에 적합한 추적 값을 사용하여 각 연결 테이블에서 적용되는 행을 결정합니다. 그러한 행이 없으면 하나가 추가됩니다. 그런 다음 성능 스키마는 해당 행의 CURRENT_CONNECTIONS 및 TOTAL_CONNECTIONS 컬럼을 하나씩 증가시킵니다.
클라이언트 연결이 끊어지면 성능 스키마는 행의 CURRENT_CONNECTIONS컬럼을 하나씩 감소시키고 TOTAL_CONNECTIONS컬럼을 변경하지 않은 상태로 둡니다.
연결 테이블에는 TRUNCATE TABLE이 허용됩니다. 다음과 같은 효과가 있습니다.
- 현재 연결이 없는 계정, 호스트 또는 사용자에 대한 행이 제거됩니다 (CURRENT_CONNECTIONS=0 인 행).
- 제거되지 않은 행은 현재 연결만 계산하도록 재설정됩니다. CURRENT_CONNECTIONS>0인 행의 경우 TOTAL_CONNECTIONS가 CURRENT_CONNECTIONS로 재설정됩니다.
- 연결 테이블에 의존하는 요약 테이블은 이 섹션의 뒷부분에서 설명하는 것처럼 암시적으로 잘립니다.
▶︎ accounts Table
accounts 테이블에는 MySQL서버에 연결된 각 계정에 대한 행이 있습니다. 각 계정에 대해 테이블은 현재 및 총 연결 수를 계산합니다. 테이블 크기는 서버 시작시 자동으로 조정됩니다.
테이블 크기를 명시적으로 설정하려면 서버 시작시 performance_schema_accounts_size 시스템 변수를 설정합니다. 계정 통계를 비활성화하려면이 변수를 0으로 설정합니다.
- USER
연결을위한 클라이언트 사용자 이름입니다. 내부 스레드 또는 인증에 실패한 사용자 세션의 경우 NULL입니다.
- HOST
클라이언트가 연결된 호스트입니다. 내부 스레드 또는 인증에 실패한 사용자 세션의 경우 NULL입니다.
- CURRENT_CONNECTIONS
계정의 현재 연결 수입니다.
- TOTAL_CONNECTIONS
계정의 총 연결 수입니다.
▶︎ hosts Table
- HOST
클라이언트가 연결된 호스트입니다. 내부 스레드 또는 인증에 실패한 사용자 세션의 경우 NULL입니다.
- CURRENT_CONNECTIONS
호스트의 현재 연결 수입니다.
- TOTAL_CONNECTIONS
호스트의 총 연결 수입니다.
▶︎ users Table
users 테이블에는 MySQL서버에 연결된 각 사용자에 대한 행이 있습니다. 각 사용자 이름에 대해 테이블은 현재 및 총 연결수를 계산합니다. 테이블 크기는 서버 시작시 자동으로 조정됩니다.
테이블 크기를 명시 적으로 설정하려면 서버 시작시 performance_schema_users_size 시스템 변수를 설정합니다. 사용자 통계를 비활성화하려면이 변수를 0으로 설정합니다.
- USER
연결을위한 클라이언트 사용자 이름입니다. 내부 스레드 또는 인증에 실패한 사용자 세션의 경우 NULL입니다.
- CURRENT_CONNECTIONS
사용자의 현재 연결 수입니다.
- TOTAL_CONNECTIONS
사용자의 총 연결 수입니다.
■ Connection Attribute 테이블
연결 속성은 애플리케이션 프로그램이 연결시 서버에 전달할 수있는 키-값 쌍입니다. libmysqlclient 클라이언트 라이브러리에 의해 구현된 C API를 기반으로하는 애플리케이션의 경우
mysql_options()및 mysql_options4()함수가 연결 속성 세트를 정의합니다. 다른 MySQL 커넥터는 자체 속성 정의 방법을 제공할 수 있습니다.
다음 성능 스키마 테이블은 속성 정보를 표시합니다.
- session_account_connect_attrs : 현재 세션 및 세션 계정과 연관된 기타 세션에 대한 연결 속성
- session_connect_attrs : 모든 세션에 대한 연결 속성
밑줄(_)로 시작하는 속성 이름은 내부용으로 예약되어 있으며 응용 프로그램에서 작성해서는 안됩니다. 이 규칙은 MySQL이 애플리케이션 속성과 충돌하지 않고 새로운 속성을 도입하도록 허용하고 애플리케이션 프로그램이 내부 속성과 충돌하지 않는 자체 속성을 정의할 수 있도록 합니다.
• 사용 가능한 연결 속성
주어진 연결에서 볼 수있는 연결 속성 세트는 플랫폼, 연결을 설정하는 데 사용되는 MySQL 커넥터 또는 클라이언트 프로그램과 같은 요인에 따라 다릅니다.
libmysqlclient 클라이언트 라이브러리는 다음 속성을 설정합니다.
+ _client_name : 클라이언트 이름 (클라이언트 라이브러리의 libmysql).
+ _client_version : 클라이언트 라이브러리 버전입니다.
+ _os : 운영 체제 (예 : Linux, Win64).
+ _pid : 클라이언트 프로세스 ID.
+ _platform : 컴퓨터 플랫폼 (예 : x86_64).
+ _thread : 클라이언트 스레드 ID (Windows에만 해당).
다른 MySQL 커넥터는 자체 연결 속성을 정의 할 수 있습니다.
MySQL Connector/J는 다음 속성을 정의합니다.
+ _client_license : 커넥터 라이센스 유형.
+ _runtime_vendor : JRE (Java Runtime Environment) 공급 업체입니다.
+ _runtime_version : JRE (Java Runtime Environment) 버전.
MySQL Connector / NET은 다음 속성을 정의합니다.
+ _client_version : 클라이언트 라이브러리 버전입니다.
+ _os : 운영 체제 (예 : Linux, Win64).
+ _pid : 클라이언트 프로세스 ID.
+ _platform : 컴퓨터 플랫폼 (예 : x86_64).
+ _program_name : 클라이언트 이름.
+ _thread : 클라이언트 스레드 ID (Windows에만 해당).
PHP는 컴파일 방법에 따라 달라지는 속성을 정의합니다.
+ libmysqlclient를 사용하여 컴파일 됨 : 앞에서 설명한 표준 libmysqlclient 속성.
+ mysqlnd를 사용하여 컴파일 : 오직 mysqlnd값을 가진 _client_name 속성.
많은 MySQL 클라이언트 프로그램은 클라이언트 이름과 동일한 값으로 program_name 속성을 설정합니다.
예를 들어 mysqladmin 및 mysqldump는 program_name을 각각 mysqladmin 및 mysqldump로 설정합니다.
일부 MySQL 클라이언트 프로그램은 추가 속성을 정의합니다.
+ mysqlbinlog :
* _client_role : binary_log_listener
+ 복제본 연결 :
* program_name : mysqld
* _client_role : binary_log_listener
* _client_replication_channel_name : 채널 이름.
+ FEDERATED 스토리지 엔진 연결 :
* program_name : mysqld
* _client_role : federated_storage
• 연결 속성 제한
클라이언트에서 서버로 전송되는 연결 속성 데이터의 양에는 제한이 있습니다.
+ 연결 시간 전에 클라이언트가 부과하는 고정 제한입니다.
+ 연결시 서버에서 부과하는 고정 제한입니다.
+ 연결시 성능 스키마에 의해 부과되는 구성 가능한 제한입니다.
C API를 사용하여 시작된 연결의 경우 libmysqlclient 라이브러리는 클라이언트측 연결 속성 데이터의 총 크기에 64KB 제한을 적용합니다.
이 제한을 초과하는 mysql_options() 호출은 CR_INVALID_PARAMETER_NO 오류를 생성합니다. 다른 MySQL 커넥터는 연결 속성 데이터를 서버로 전송할 수 있는 양에 대해 자체 클라이언트측 제한을 부과할 수 있습니다.
서버 측에서 연결 속성 데이터에 대한 다음 크기 검사가 발생합니다.
+ 서버는 허용 할 수있는 연결 속성 데이터의 총 크기를 64KB로 제한합니다. 클라이언트가 64KB 이상의 속성 데이터를 보내려고하면 서버는 연결을 거부합니다.
+ 허용된 연결의 경우 성능 스키마는 performance_schema_session_connect_attrs_size 시스템 변수의 값에 대해 집계 속성 크기를 확인합니다. 속성 크기가 이 값을 초과하면 다음 조치가 수행됩니다.
- 성능 스키마는 특성 데이터를 자르고 특성 잘림이 발생한 연결 수를 나타내는 Performance_schema_session_connect_attrs_lost 상태 변수를 증가시킵니다.
- 성능 스키마는 log_error_verbosity 시스템 변수가 1보다 큰 경우 오류 로그에 메시지를 기록합니다.
[Warning] Connection attributes of length N were truncated
▶︎ session_account_connect_attrs 테이블
애플리케이션 프로그램은 연결시 서버로 전달할 키-값 연결 속성을 제공 할 수 있습니다.
session_account_connect_attrs 테이블에는 현재 세션 및 세션 계정과 연관된 기타 세션에 대한 연결 속성만 포함됩니다. 모든 세션에 대한 연결 속성을 보려면 session_connect_attrs 테이블을 사용합니다.
session_account_connect_attrs 테이블에는 다음 컬럼이 있습니다.
- PROCESSLIST_ID
세션의 연결 식별자입니다.
- ATTR_NAME
속성 이름입니다.
- ATTR_VALUE
속성 값입니다.
- ORDINAL_POSITION
속성이 연결 속성 세트에 추가 된 순서입니다.
session_account_connect_attrs 테이블에는 TRUNCATE TABLE이 허용되지 않습니다.
▶︎ session_connect_attrs 테이블
애플리케이션 프로그램은 연결시 서버로 전달할 키-값 연결 속성을 제공할 수 있습니다.
session_connect_attrs 테이블은 모든 세션에 대한 연결 속성을 포함합니다. 현재 세션 및 세션 계정과 연관된 다른 세션에 대한 연결 속성만 보려면 session_account_connect_attrs 테이블을 사용합니다.
session_connect_attrs 테이블에는 다음 컬럼이 있습니다.
- PROCESSLIST_ID
세션의 연결 식별자입니다.
- ATTR_NAME
속성 이름입니다.
- ATTR_VALUE
속성 값입니다.
- ORDINAL_POSITION
속성이 연결 속성 세트에 추가된 순서입니다.
session_connect_attrs 테이블에는 TRUNCATE TABLE이 허용되지 않습니다.
▣ Performance Schema 목차.
[MySQL] Performance Schema 소개 및 사용방법
[MySQL] Performance Schema 상태 모니터링
[MySQL] Performance Schema 설정 테이블 - Setup 및 Instance 테이블
[MySQL] Performance Schema 모니터링 테이블 - Wait Event 및 Lock 테이블
[MySQL] Performance Schema 모니터링 테이블 - Stage Event 테이블
[MySQL] Performance Schema 모니터링 테이블 - Statement Event 테이블
[MySQL] Performance Schema 모니터링 테이블 - Transaction 테이블
[MySQL] Performance Schema 모니터링 테이블 - Connection 및 Connection Attribute 테이블
[MySQL] Performance Schema 모니터링 테이블 - User, 시스템, 상태 및 기타 테이블
[MySQL] Performance Schema 모니터링 테이블 - Summary(요약) 테이블
[MySQL] Performance Schema 모니터링 테이블 - Replication 테이블
'Databases > MySQL' 카테고리의 다른 글
[MySQL] Performance Schema 모니터링 테이블 - Summary(요약) 테이블 (0) | 2021.01.24 |
---|---|
[MySQL] Performance Schema 모니터링 테이블 - User, 시스템, 상태 및 기타 테이블 (0) | 2021.01.24 |
[MySQL] Performance Schema 모니터링 테이블 - Transaction 테이블 (0) | 2021.01.24 |
[MySQL] Performance Schema 모니터링 테이블 - Statement Event 테이블 (0) | 2021.01.24 |
[MySQL] Performance Schema 모니터링 테이블 - Stage Event 테이블 (0) | 2021.01.24 |