■ Replication 테이블
성능 스키마는 복제 정보 상태를 보여주는 테이블을 제공합니다. 이는 SHOW SLAVE STATUS 문에서 사용할 수있는 정보와 비슷하지만 테이블 형식으로 표현하는 것이 더 접근하기 쉽고 사용성 이점이 있습니다.
1. SHOW SLAVE STATUS 출력은 직접 보면서 확인하는 검사에 유용하지만 프로그래밍 사용에는 그다지 유용하지 않습니다. 반대로 성능 스키마 테이블을 사용하면 복잡한 WHERE 조건, 조인 등을 포함한 일반 SELECT 쿼리를 사용하여 복제본 상태에 대한 정보를 검색할 수 있습니다.
2. 쿼리 결과는 추가 분석을 위해 테이블에 저장하거나 변수에 할당하여 저장 프로 시저에서 사용할 수 있습니다.
3. 복제 테이블은 더 나은 진단 정보를 제공합니다. 다중 스레드 복제본 작업의 경우 SHOW SLAVE STATUS는 Last_SQL_Errno 및 Last_SQL_Error 필드를 사용하여 모든 코디네이터 및 작업자 스레드 오류를보고하므로 가장 최근의 오류만 표시되고 정보가 손실될 수 있습니다. 복제 테이블은 정보 손실없이 스레드별로 오류를 저장합니다.
4. 마지막으로 확인된 트랜잭션은 작업자별로 복제 테이블에 표시됩니다. SHOW SLAVE STATUS에서 확인할 수 없는 정보입니다.
5. 성능 스키마 인터페이스에 익숙한 개발자는 테이블에 행을 추가하여 추가 정보를 제공하도록 복제 테이블을 확장할 수 있습니다.
• 복제 테이블 수명주기
성능 스키마는 다음과 같이 복제 테이블을 채웁니다.
1. CHANGE MASTER TO를 실행하기 전에 테이블이 비어 있습니다.
2. CHANGE MASTER TO 실행 후 구성 매개 변수는 표에서 볼 수 있습니다. 이때 활성 복제본 스레드가 없으므로 THREAD_ID 컬럼은 NULL이고 SERVICE_STATE 컬럼은 OFF 값을 갖습니다.
3. START SLAVE 후에 NULL이 아닌 THREAD_ID값을 볼 수 있습니다. 유휴 상태이거나 활성 상태인 스레드의 SERVICE_STATE 값은 ON입니다. 소스에 연결하는 스레드는 연결을 설정하는 동안 CONNECTING 값을 가지며 그 이후 연결이 지속되는 동안 ON됩니다.
4. STOP SLAVE 이후 THREAD_ID컬럼은 NULL이 되고 더 이상 존재하지 않는 스레드의 SERVICE_STATE컬럼은 OFF 값을 갖습니다.
5. 테이블은 STOP SLAVE 또는 오류로 인해 스레드가 종료된 후에도 보존됩니다.
6. replication_applier_status_by_worker 테이블은 복제본이 다중 스레드 모드에서 작동하는 경우에만 비어 있지 않습니다. 즉, slave_parallel_workers 시스템 변수가 0보다 크면 START SLAVE 실행시 이 테이블이 채워지고 행 수가 작업자 수를 표시합니다.
▶︎ replication_connection_configuration
이 표는 소스에 연결하기 위해 복제본에서 사용하는 구성 매개 변수를 보여줍니다. 테이블에 저장된 매개 변수는 컬럼 설명에 표시된대로 CHANGE MASTER TO 문을 사용하여 런타임에 변경할 수 있습니다.
replication_connection_status 테이블에 비해 replication_connection_configuration은 자주 변경되지 않습니다. 여기에는 복제본이 소스에 연결되는 방법과 연결 중에 일정하게 유지되는 방법을 정의하는 값이 포함되어있는 반면 replication_connection_status에는 연결 중에 변경되는 값이 포함됩니다.
replication_connection_configuration 테이블에는 다음 컬럼이 있습니다. 컬럼 설명은 컬럼값을 가져 오는 해당 CHANGE MASTER TO 옵션을 나타내며이 섹션의 뒷부분에 나오는 표는 replication_connection_configuration 컬럼과 SHOW SLAVE STATUS 컬럼간의 대응 관계를 보여줍니다.
• 주요 컬럼 :
- CHANNEL_NAME
이 행이 표시하는 복제 채널입니다. 항상 기본 복제 채널이 있으며 더 많은 복제 채널을 추가할 수 있습니다.
- HOST
복제본이 연결된 복제 소스 서버입니다. (마스터 변경 옵션 : MASTER_HOST)
- PORT
복제 소스 서버에 연결하는 데 사용되는 포트입니다. (마스터 변경 옵션 : MASTER_PORT)
- USER
복제 소스 서버에 연결하는 데 사용되는 계정의 사용자 이름입니다. (마스터 변경 옵션 : MASTER_USER)
- NETWORK_INTERFACE
복제본이 바인딩된 네트워크 인터페이스입니다(있는 경우). (마스터 변경 옵션 : MASTER_BIND)
- AUTO_POSITION
자동 위치 지정이 사용중인 경우 1; 그렇지 않으면 0. (CHANGE MASTER TO 옵션 : MASTER_AUTO_POSITION)
- SSL_ALLOWED, SSL_CA_FILE, SSL_CA_PATH, SSL_CERTIFICATE, SSL_CIPHER, SSL_KEY, SSL_VERIFY_SERVER_CERTIFICATE, SSL_CRL_FILE, SSL_CRL_PATH
이러한 컬럼은 복제본이 복제 소스 서버에 연결하는 데 사용하는 SSL 매개 변수를 표시합니다 (있는 경우).
SSL_ALLOWED에는 다음 값이 있습니다.
1. 예 (소스에 대한 SSL 연결이 허용되는 경우)
2. 소스에 대한 SSL 연결이 허용되지 않는 경우 아니요
3. SSL 연결이 허용되지만 복제본에 SSL 지원이 활성화되지 않은 경우 무시됩니다.
다른 SSL 컬럼에 대한 MASTER TO 옵션 변경 : MASTER_SSL_CA, MASTER_SSL_CAPATH, MASTER_SSL_CERT, MASTER_SSL_CIPHER, MASTER_SSL_CRL, MASTER_SSL_CRLPATH, MASTER_SSL_KEY, MASTER_SSL_VERIFY_SERVER_CERT.
- CONNECTION_RETRY_INTERVAL
연결 재시도 사이의 시간 (초)입니다. (마스터 변경 옵션 : MASTER_CONNECT_RETRY)
- CONNECTION_RETRY_COUNT
연결이 끊어진 경우 복제본이 소스에 다시 연결을 시도 할 수있는 횟수입니다. (마스터 변경 옵션 : MASTER_RETRY_COUNT)
- HEARTBEAT_INTERVAL
복제본의 복제 하트 비트 간격 (초)입니다. (마스터 변경 옵션 : MASTER_HEARTBEAT_PERIOD)
- TLS_VERSION
소스에서 사용되는 TLS 버전입니다. TLS 버전 정보는 6.3.2 절.“암호화 된 연결 TLS 프로토콜 및 암호”를 참조하십시오. (마스터 변경 옵션 : MASTER_TLS_VERSION)
• Tuncate Table 허용 여부.
replication_connection_configuration 테이블에는 TRUNCATE TABLE이 허용되지 않습니다.
▶︎ replication_connection_status
이 표는 소스에 대한 복제본의 연결을 처리하는 복제 I/O 스레드의 현재 상태를 보여줍니다.
replication_connection_configuration 테이블에 비해 replication_connection_status가 더 자주 변경됩니다. 여기에는 연결 중에 변경되는 값이 포함되어있는 반면 replication_connection_configuration에는 복제본이 소스에 연결하는 방법을 정의하고 연결 중에 일정하게 유지되는 값이 포함됩니다.
• 주요 컬럼
- CHANNEL_NAME
이 행이 표시하는 복제 채널입니다. 항상 기본 복제 채널이 있으며 더 많은 복제 채널을 추가 할 수 있습니다.
- GROUP_NAME
이 서버가 그룹의 구성원인 경우 서버가 속한 그룹의 이름을 표시합니다.
- SOURCE_UUID
소스의 server_uuid 값.
- THREAD_ID
I/O 스레드 ID입니다.
- SERVICE_STATE
ON(스레드가 존재하고 활성 또는 유휴 상태 임), OFF (스레드가 더 이상 존재하지 않음) 또는 CONNECTING (스레드가 존재하며 소스에 연결 중).
- RECEIVED_TRANSACTION_SET
이 복제본이 수신 한 모든 트랜잭션에 해당하는 글로벌 트랜잭션 ID (GTID) 세트입니다. GTID가 사용되지 않으면 비어 있습니다. 자세한 정보는 GTID 세트를 참조하십시오.
- LAST_ERROR_NUMBER, LAST_ERROR_MESSAGE
I/O 스레드를 중지시킨 가장 최근 오류의 오류 번호 및 오류 메시지입니다. 오류 번호 0과 빈 문자컬럼 메시지는 "오류 없음"을 의미합니다. LAST_ERROR_MESSAGE 값이 비어 있지 않으면 오류 값이 복제본의 오류 로그에도 나타납니다.
RESET MASTER 또는 RESET SLAVE를 실행하면 이 컬럼에 표시된 값이 재설정됩니다.
- LAST_ERROR_TIMESTAMP
가장 최근 I/O 오류가 발생한시기를 표시하는 YYMMDD hh : mm : ss 형식의 타임 스탬프입니다.
- LAST_HEARTBEAT_TIMESTAMP
가장 최근 하트 비트 신호가 복제본에서 수신 된시기를 표시하는 YYMMDD hh : mm : ss 형식의 타임 스탬프입니다.
- COUNT_RECEIVED_HEARTBEATS
마지막으로 다시 시작 또는 재설정되었거나 CHANGE MASTER TO 문이 실행된 이후 복제본이 수신한 총 하트 비트 신호 수입니다.
• Tuncate Table 허용 여부.
replication_connection_status 테이블에는 TRUNCATE TABLE이 허용되지 않습니다.
▶︎ replication_applier_configuration 테이블
이 표는 복제본이 적용하는 트랜잭션에 영향을 미치는 구성 매개 변수를 보여줍니다. 테이블에 저장된 매개 변수는 컬럼 설명에 표시된대로 CHANGE MASTER TO 문을 사용하여 런타임에 변경할 수 있습니다.
• 주요 컬럼
- CHANNEL_NAME
이 행이 표시하는 복제 채널입니다. 항상 기본 복제 채널이 있으며 더 많은 복제 채널을 추가 할 수 있습니다. 자세한 내용은 16.2.2 절.“복제 채널”을 참조하십시오.
- DESIRED_DELAY
복제본이 소스보다 지연되어야하는 시간 (초)입니다. (마스터 변경 옵션 : MASTER_DELAY)
- Tuncate Table 허용 여부.
replication_applier_configuration 테이블에는 TRUNCATE TABLE이 허용되지 않습니다.
▶︎ replication_applier_status 테이블
이 테이블은 복제본의 현재 일반 트랜잭션 실행 상태를 보여줍니다. 이 표는 관련된 스레드와 관련이없는 트랜잭션 적용자 상태의 일반적인 측면에 대한 정보를 제공합니다. 스레드별 상태 정보는 replication_applier_status_by_coordinator 테이블 (복제본이 다중 스레드 인 경우 replication_applier_status_by_worker)에서 사용할 수 있습니다.
• 주요컬럼
- CHANNEL_NAME
이 행이 표시하는 복제 채널입니다. 항상 기본 복제 채널이 있으며 더 많은 복제 채널을 추가 할 수 있습니다.
- SERVICE_STATE
복제 채널의 적용자 스레드가 활성 또는 유휴 상태 일 때 ON을 표시하고, OFF는 적용자 스레드가 활성 상태가 아님을 의미합니다.
- REMAINING_DELAY
소스가 이벤트를 적용한 이후 복제본이 DESIRED_DELAY 초가 지나갈 때까지 기다리는 경우이 필드에는 남은 지연 시간(초)이 포함됩니다. 다른 경우에는이 필드가 NULL입니다. (DESIRED_DELAY 값은 replication_applier_configuration 테이블에 저장됩니다.)
- COUNT_TRANSACTIONS_RETRIES
복제 SQL스레드가 트랜잭션 적용에 실패하여 재 시도한 횟수를 표시합니다. 주어진 트랜잭션에 대한 최대 재시도 횟수는 slave_transaction_retries 시스템 변수에 의해 설정됩니다.
• Tuncate Table 허용 여부.
replication_applier_status 테이블에는 TRUNCATE TABLE이 허용되지 않습니다.
▶︎ replication_applier_status_by_coordinator 테이블
다중 스레드 복제본의 경우 복제본은 여러 작업자 스레드와 코디네이터 스레드를 사용하여 관리하며이 테이블은 코디네이터 스레드의 상태를 보여줍니다. 단일 스레드 복제본의 경우이 테이블은 비어 있습니다. 다중 스레드 복제본의 경우 replication_applier_status_by_worker 테이블에 작업자 스레드의 상태가 표시됩니다.
• 주요컬럼
- CHANNEL_NAME
이 행이 표시하는 복제 채널입니다. 항상 기본 복제 채널이 있으며 더 많은 복제 채널을 추가 할 수 있습니다.
- THREAD_ID
SQL/코디네이터 스레드 ID입니다.
- SERVICE_STATE
ON(스레드가 존재하고 활성 또는 유휴 상태 임) 또는 OFF(스레드가 더 이상 존재하지 않음).
- LAST_ERROR_NUMBER, LAST_ERROR_MESSAGE
SQL/코디네이터 스레드를 중지시킨 가장 최근 오류의 오류 번호 및 오류 메시지입니다. 오류 번호 0과 빈 문자열인 메시지는 오류 없음을 의미합니다. LAST_ERROR_MESSAGE 값이 비어 있지 않으면 오류 값이 복제본의 오류 로그에도 나타납니다.
RESET MASTER 또는 RESET SLAVE를 실행하면 이 컬럼에 표시된 값이 재설정됩니다.
LAST_ERROR_NUMBER 및 LAST_ERROR_MESSAGE 컬럼에 표시된 모든 오류 코드 및 메시지는 서버 오류 메시지 참조에 나열된 오류 값에 해당합니다.
- LAST_ERROR_TIMESTAMP
가장 최근의 SQL/코디네이터 오류가 발생한시기를 표시하는 YYMMDD hh:mm:ss 형식의 타임 스탬프입니다.
• Tuncate Table 허용 여부.
replication_applier_status_by_coordinator 테이블에는 TRUNCATE TABLE이 허용되지 않습니다.
▶︎ replication_applier_status_by_worker 테이블
복제본이 다중 스레드가 아닌 경우이 테이블은 적용자 스레드의 상태를 보여줍니다. 그렇지 않은 경우 복제본은 여러 작업자 스레드와 코디네이터 스레드를 사용하여 관리하고이 테이블은 작업자 스레드의 상태를 보여줍니다. 다중 스레드 복제본의 경우 replication_applier_status_by_coordinator 테이블은 코디네이터 스레드의 상태를 보여줍니다.
• 주요컬럼
- CHANNEL_NAME
이 행이 표시하는 복제 채널입니다. 항상 기본 복제 채널이 있으며 더 많은 복제 채널을 추가 할 수 있습니다.
- WORKER_ID
작업자 식별자 (mysql.slave_worker_info 테이블의 id 컬럼과 동일한 값). STOP SLAVE 이후 THREAD_ID 컬럼은 NULL이되지만 WORKER_ID 값은 유지됩니다.
- THREAD_ID
작업자 스레드 식별자입니다.
- SERVICE_STATE
ON(스레드가 존재하고 활성 또는 유휴 상태 임) 또는 OFF (스레드가 더 이상 존재하지 않음).
- LAST_SEEN_TRANSACTION
작업자가 마지막으로 본 트랜잭션입니다. 작업자가이 트랜잭션을 적용하는 것은 아직 진행 중일 수 있기 때문입니다.
gtid_mode 시스템 변수 값이 OFF 인 경우 이 컬럼은 ANONYMOUS이며, 이는 트랜잭션에 글로벌 트랜잭션 식별자 (GTID)가 없으며 파일 및 위치로만 식별됨을 나타냅니다.
gtid_mode가 ON이면 컬럼값은 다음과 같이 정의됩니다.
1. 트랜잭션이 실행되지 않은 경우 컬럼이 비어 있습니다.
2. 트랜잭션이 실행되면 gtid_next가 설정되는 즉시 gtid_next에서 컬럼이 설정됩니다. 이 순간부터 컬럼에는 항상 GTID가 표시됩니다.
3. GTID는 다음 트랜잭션이 실행될 때까지 보존됩니다. 오류가 발생하면 컬럼 값은 오류가 발생했을 때 작업자가 실행중인 트랜잭션의 GTID입니다. 다음 문은 해당 트랜잭션이 커밋되었는지 여부를 보여줍니다.
SELECT GTID_SUBSET(LAST_SEEN_TRANSACTION, @@GLOBAL.GTID_EXECUTED)
FROM performance_schema.replication_applier_status_by_worker;
명령문이 0을 반환하면 트랜잭션이 아직 처리 중이거나 처리중 작업자 스레드가 중지 되었기 때문에 트랜잭션이 아직 커밋되지 않은 것입니다. 문이 0이 아닌 값을 반환하면 트랜잭션이 커밋된 것입니다.
- LAST_ERROR_NUMBER, LAST_ERROR_MESSAGE
작업자 스레드를 중지시킨 가장 최근 오류의 오류 번호 및 오류 메시지입니다. 오류 번호 0과 빈 문자열 메시지는 오류 없음을 의미합니다. LAST_ERROR_MESSAGE 값이 비어 있지 않으면 오류 값이 복제본의 오류 로그에도 나타납니다.
RESET MASTER 또는 RESET SLAVE를 실행하면이 컬럼에 표시된 값이 재설정됩니다.
LAST_ERROR_NUMBER 및 LAST_ERROR_MESSAGE 컬럼에 표시된 모든 오류 코드 및 메시지는 서버 오류 메시지 참조에 나열된 오류 값에 해당합니다.
- LAST_ERROR_TIMESTAMP
가장 최근 작업자 오류가 발생한시기를 표시하는 YYMMDD hh:mm:ss 형식의 타임 스탬프입니다.
• Tuncate Table 허용 여부.
replication_applier_status_by_worker 테이블에는 TRUNCATE TABLE이 허용되지 않습니다.
▶︎ replication_group_members 테이블
이 표는 복제 그룹 구성원에 대한 네트워크 및 상태 정보를 보여줍니다. 표시된 네트워크 주소는 클라이언트를 그룹에 연결하는 데 사용되는 주소이며 group_replication_local_address에 지정된 구성원의 내부 그룹 통신 주소와 혼동해서는 안됩니다.
• 주요컬럼
- CHANNEL_NAME
그룹 복제 채널의 이름입니다.
- MEMBER_ID
이 구성원의 식별자입니다. 서버 UUID와 동일합니다.
- MEMBER_HOST
이 구성원의 네트워크 주소 (호스트 이름 또는 IP 주소). 구성원의 호스트 이름 변수에서 검색되었습니다.
- MEMBER_PORT
서버가 수신하는 포트입니다. 멤버의 포트 변수에서 검색했습니다.
- MEMBER_STATE
이 회원의 현재 상태 다음 중 하나 일 수 있습니다.
1. 오프라인 : 그룹 복제 플러그인이 설치되었지만 시작되지 않았습니다.
2. RECOVERING : 서버가 데이터를 검색하는 그룹에 가입했습니다.
3. ONLINE : 회원이 완전히 작동하는 상태입니다.
4. ERROR : 구성원이 트랜잭션을 적용하거나 복구 단계에서 오류가 발생했으며 그룹의 트랜잭션에 참여하고 있지 않습니다.
5. UNREACHABLE : 실패 감지 프로세스는 그룹 메시지가 시간 초과 되었기 때문에이 구성원에게 연락 할 수 없다고 의심합니다.
• Tuncate Table 허용 여부.
replication_group_members 테이블에는 TRUNCATE TABLE이 허용되지 않습니다.
▶︎ replication_group_member_stats 테이블
이 표는 MySQL 그룹 복제 멤버에 대한 통계 정보를 보여줍니다. 그룹 복제가 실행중인 경우에만 채워집니다.
• 주요컬럼
- CHANNEL_NAME
그룹 복제 채널의 이름입니다.
- VIEW_ID
이 그룹의 현재보기 식별자입니다.
- MEMBER_ID
구성원 서버 UUID입니다. 이것은 그룹의 각 구성원에 대해 다른 값을 갖습니다. 이는 각 구성원에 고유하므로 키 역할도 합니다.
- COUNT_TRANSACTIONS_IN_QUEUE
충돌 감지 검사를 보류중인 대기열의 트랜잭션 수입니다. 트랜잭션에 충돌이 있는지 확인한 후 확인을 통과하면 적용을 위해 대기열에 추가됩니다.
- COUNT_TRANSACTIONS_CHECKED
충돌을 확인한 트랜잭션 수입니다.
- COUNT_CONFLICTS_DETECTED
충돌 감지 검사를 통과하지 못한 트랜잭션 수 입니다.
- COUNT_TRANSACTIONS_ROWS_VALIDATING
인증에 사용할 수 있지만 가비지 수집되지 않은 트랜잭션 행 수입니다. 각 트랜잭션이 인증되는 충돌 감지 데이터베이스의 현재 크기로 생각할 수 있습니다.
- TRANSACTIONS_COMMITTED_ALL_MEMBERS
복제 그룹의 모든 구성원에서 성공적으로 커밋 된 트랜잭션은 GTID 세트로 표시됩니다. 이것은 고정된 시간 간격으로 업데이트됩니다.
- LAST_CONFLICT_FREE_TRANSACTION
확인된 마지막 충돌없는 트랜잭션의 트랜잭션 식별자입니다.
- Tuncate Table 허용 여부.
replication_group_member_stats 테이블에는 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] 복제(Replication)과 트리거(Trigger) 관계 (0) | 2021.01.26 |
---|---|
[MySQL] InnoDB에서 Alter Table되는 진행상황을 Peformance Schema를 이용하여 모니터링 하기 (0) | 2021.01.26 |
[MySQL] Performance Schema 모니터링 테이블 - Summary(요약) 테이블 (0) | 2021.01.24 |
[MySQL] Performance Schema 모니터링 테이블 - User, 시스템, 상태 및 기타 테이블 (0) | 2021.01.24 |
[MySQL] Performance Schema 모니터링 테이블 - Connection 및 Connection Attribute 테이블 (0) | 2021.01.24 |