Loading...
MySQL 9.5 Reference Manual 9.5의 29.7 Performance Schema Status Monitoring의 한국어 번역본입니다.
아래의 경우에 피드백에서 신고해주신다면 반영하겠습니다.
감사합니다 :)
Performance Schema와 관련된 여러 status 변수들이 있습니다:
1mysql> SHOW STATUS LIKE 'perf%'; 2+-----------------------------------------------+-------+ 3| Variable_name | Value | 4+-----------------------------------------------+-------+ 5| Performance_schema_accounts_lost | 0 | 6| Performance_schema_cond_classes_lost | 0 | 7| Performance_schema_cond_instances_lost | 0 | 8| Performance_schema_digest_lost | 0 | 9| Performance_schema_file_classes_lost | 0 | 10| Performance_schema_file_handles_lost | 0 | 11| Performance_schema_file_instances_lost | 0 | 12| Performance_schema_hosts_lost | 0 | 13| Performance_schema_locker_lost | 0 | 14| Performance_schema_memory_classes_lost | 0 | 15| Performance_schema_metadata_lock_lost | 0 | 16| Performance_schema_mutex_classes_lost | 0 | 17| Performance_schema_mutex_instances_lost | 0 | 18| Performance_schema_nested_statement_lost | 0 | 19| Performance_schema_program_lost | 0 | 20| Performance_schema_rwlock_classes_lost | 0 | 21| Performance_schema_rwlock_instances_lost | 0 | 22| Performance_schema_session_connect_attrs_lost | 0 | 23| Performance_schema_socket_classes_lost | 0 | 24| Performance_schema_socket_instances_lost | 0 | 25| Performance_schema_stage_classes_lost | 0 | 26| Performance_schema_statement_classes_lost | 0 | 27| Performance_schema_table_handles_lost | 0 | 28| Performance_schema_table_instances_lost | 0 | 29| Performance_schema_thread_classes_lost | 0 | 30| Performance_schema_thread_instances_lost | 0 | 31| Performance_schema_users_lost | 0 | 32+-----------------------------------------------+-------+
Performance Schema status 변수는 메모리 제약으로 인해 로드되거나 생성될 수 없었던 인스트루멘테이션에 대한 정보를 제공합니다. 이러한 변수의 이름에는 여러 형태가 있습니다:
Performance_schema_xxx_classes_lost
는 xxx 타입의 인스트루먼트 중 몇 개를 로드할 수 없었는지를 나타냅니다.
Performance_schema_xxx_instances_lost
는 xxx 타입의 오브젝트 인스턴스 중 몇 개를 생성할 수 없었는지를 나타냅니다.
Performance_schema_xxx_handles_lost
는 xxx 타입의 오브젝트 인스턴스 중 몇 개를 오픈할 수 없었는지를 나타냅니다.
Performance_schema_locker_lost 는
얼마나 많은 이벤트가 “lost” 되었거나 기록되지 않았는지를 나타냅니다.
예를 들어, 서버 소스에 뮤텍스가 인스트루먼트되어 있지만 서버가 런타임에 해당 인스트루멘테이션을 위한 메모리를 할당할 수 없는 경우,
Performance_schema_mutex_classes_lost
값을 증가시킵니다. 뮤텍스는 여전히 동기화 오브젝트로서 동작합니다(즉, 서버는 정상적으로 동작을 계속함), 하지만 이에 대한 성능 데이터는 수집되지 않습니다. 인스트루먼트를 할당할 수 있으면, 인스트루먼트된 뮤텍스 인스턴스를 초기화하는 데 사용할 수 있습니다. 글로벌 뮤텍스와 같은 싱글톤 뮤텍스의 경우 인스턴스는 하나만 있습니다. 다른 뮤텍스는 커넥션마다, 또는 다양한 캐시 및 데이터 버퍼의 페이지마다 인스턴스를 가지므로 인스턴스 수는 시간에 따라 변합니다. 최대 커넥션 수나 일부 버퍼의 최대 크기를 늘리면 한 번에 할당될 수 있는 최대 인스턴스 수가 증가합니다. 서버가 특정 인스트루먼트된 뮤텍스 인스턴스를 생성할 수 없으면,
Performance_schema_mutex_instances_lost
값을 증가시킵니다.
다음 조건들이 성립한다고 가정합니다:
서버가
--performance_schema_max_mutex_classes=200
옵션과 함께 시작되었고, 따라서 200개의 뮤텍스 인스트루먼트를 위한 공간을 가지고 있습니다.
150개의 뮤텍스 인스트루먼트가 이미 로드되었습니다.
plugin_a 라는 이름의 플러그인은 40개의 뮤텍스
인스트루먼트를 포함합니다.
plugin_b 라는 이름의 플러그인은 20개의 뮤텍스
인스트루먼트를 포함합니다.
서버는 다음의 스테이트먼트 순서로 설명된 것처럼, 플러그인이 필요로 하는 수와 사용 가능한 수에 따라 플러그인에 대한 뮤텍스 인스트루먼트를 할당합니다:
1INSTALL PLUGIN plugin_a
이제 서버에는 150+40 = 190개의 뮤텍스 인스트루먼트가 있습니다.
1UNINSTALL PLUGIN plugin_a;
서버에는 여전히 190개의 인스트루먼트가 있습니다. 플러그인 코드에 의해 생성된 모든 히스토리 데이터는 여전히 사용 가능하지만, 인스트루먼트에 대한 새로운 이벤트는 수집되지 않습니다.
1INSTALL PLUGIN plugin_a;
서버는 40개의 인스트루먼트가 이미 정의되어 있음을 감지하므로 새로운 인스트루먼트는 생성되지 않고, 이전에 할당된 내부 메모리 버퍼가 재사용됩니다. 서버에는 여전히 190개의 인스트루먼트가 있습니다.
1INSTALL PLUGIN plugin_b;
서버에는 200-190 = 10개의 인스트루먼트(이 경우 뮤텍스 클래스)를 위한 공간이 있으며, 플러그인에 20개의 새로운 인스트루먼트가 포함되어 있음을 확인합니다. 10개의 인스트루먼트는 로드되고, 10개는 버려지거나 “lost” 됩니다.
Performance_schema_mutex_classes_lost
는 lost된 인스트루먼트(뮤텍스 클래스) 수를 나타냅니다:
1mysql> SHOW STATUS LIKE "perf%mutex_classes_lost"; 2+---------------------------------------+-------+ 3| Variable_name | Value | 4+---------------------------------------+-------+ 5| Performance_schema_mutex_classes_lost | 10 | 6+---------------------------------------+-------+ 71 row in set (0.10 sec)
인스트루멘테이션은 여전히 동작하며 plugin_b 에 대해 (부분적인) 데이터를 수집합니다.
서버가 뮤텍스 인스트루먼트를 생성할 수 없을 때 다음의 결과가 발생합니다:
해당 인스트루먼트에 대한 로우가
setup_instruments 테이블에 인서트되지 않습니다.
Performance_schema_mutex_classes_lost
값이 1만큼 증가합니다.
Performance_schema_mutex_instances_lost
값은 변하지 않습니다. (뮤텍스 인스트루먼트가 생성되지 않으면, 이후 인스트루먼트된 뮤텍스 인스턴스를 생성하는 데 사용할 수 없습니다.)
방금 설명한 패턴은 뮤텍스에만 해당되는 것이 아니라 모든 타입의 인스트루먼트에 적용됩니다.
Performance_schema_mutex_classes_lost
값이 0보다 큰 경우는 두 가지 상황에서 발생할 수 있습니다:
메모리를 몇 바이트라도 절약하기 위해, 서버를
--performance_schema_max_mutex_classes=N 과 함께 시작하고, 여기서 N 은 기본값보다 작은 값입니다. 기본값은 MySQL 배포판에 포함된 모든 플러그인을 로드하기에 충분한 값으로 선택되지만, 일부 플러그인을 전혀 로드하지 않는다면 줄일 수 있습니다. 예를 들어, 배포판에 포함된 일부 스토리지 엔진을 로드하지 않기로 선택할 수 있습니다.
Performance Schema용으로 인스트루먼트된 서드파티 플러그인을 로드하지만 서버를 시작할 때 해당 플러그인의 인스트루멘테이션 메모리 요구 사항을 반영하지 않은 경우. 서드파티에서 제공되므로, 이 엔진의 인스트루먼트 메모리 사용량은
performance_schema_max_mutex_classes
에 대해 선택된 기본값에 반영되어 있지 않습니다.
서버에 플러그인의 인스트루먼트를 위한 자원이 충분하지 않고
--performance_schema_max_mutex_classes=N
을 사용하여 명시적으로 더 많이 할당하지 않으면, 플러그인을 로드하는 것은 인스트루먼트의 스타베이션으로 이어집니다.
performance_schema_max_mutex_classes
에 대해 선택된 값이 너무 작으면, 에러 로그에는 어떤 에러도 보고되지 않고 런타임 실패도 발생하지 않습니다. 그러나 performance_schema 데이터베이스 내 테이블의 내용에는 이벤트가 누락됩니다.
Performance_schema_mutex_classes_lost
status 변수만이 인스트루먼트 생성 실패로 인해 일부 이벤트가 내부적으로 드롭되었다는 것을 나타내는 유일한 가시적 신호입니다.
인스트루먼트가 lost되지 않으면, Performance Schema에 알려져 있으며 인스턴스를 인스트루먼팅할 때 사용됩니다. 예를 들어,
wait/synch/mutex/sql/LOCK_delete 는
setup_instruments 테이블에 있는 뮤텍스 인스트루먼트 이름입니다. 이 단일 인스트루먼트는 코드에서 뮤텍스를 생성할 때(서버가 실행되면서 필요한 인스턴스 수만큼) 사용됩니다. 이 경우, LOCK_delete 는 커넥션(THD)마다 존재하는 뮤텍스이므로, 서버에 1000개의 커넥션이 있으면 1000개의 스레드가 있고, 1000개의 인스트루먼트된 LOCK_delete 뮤텍스 인스턴스
(THD::LOCK_delete)가 있습니다.
서버에 이 1000개의 인스트루먼트된 뮤텍스(인스턴스)를 모두 수용할 공간이 없으면, 일부 뮤텍스는 인스트루멘테이션과 함께 생성되고, 일부는 인스트루멘테이션 없이 생성됩니다. 서버가 800개의 인스턴스만 생성할 수 있다면, 200개의 인스턴스는 lost됩니다. 서버는 계속 실행되지만,
Performance_schema_mutex_instances_lost
값을 200만큼 증가시켜 인스턴스를 생성할 수 없었음을 나타냅니다.
Performance_schema_mutex_instances_lost
값이 0보다 큰 경우는, 코드가 런타임에
--performance_schema_max_mutex_instances=N
으로 할당된 것보다 더 많은 뮤텍스를 초기화할 때 발생할 수 있습니다.
결론적으로,
SHOW STATUS LIKE 'perf%' 의 결과가 아무것도 lost되지 않았다고 말한다면(모든 값이 0), Performance Schema 데이터는 정확하며 신뢰할 수 있습니다. 무언가가 lost되었다면 데이터는 불완전하며, Performance Schema는 사용하도록 제공된 메모리가 충분하지 않아 모든 것을 기록할 수 없었습니다. 이 경우, 특정
Performance_schema_xxx_lost
변수가 문제 영역을 나타냅니다.
일부 경우에는 의도적으로 인스트루먼트 스타베이션을 야기하는 것이 적절할 수 있습니다. 예를 들어, 파일 I/O에 대한 성능 데이터가 필요 없으면, 파일 I/O와 관련된 모든 Performance Schema 파라미터를 0으로 설정하여 서버를 시작할 수 있습니다. 파일 관련 클래스, 인스턴스, 핸들에 대해서는 메모리가 전혀 할당되지 않고, 모든 파일 이벤트는 lost됩니다.
SHOW ENGINE PERFORMANCE_SCHEMA STATUS 를 사용하여 Performance Schema 코드의 내부 동작을 검사하십시오:
1mysql> SHOW ENGINE PERFORMANCE_SCHEMA STATUS\G 2... 3*************************** 3. row *************************** 4 Type: performance_schema 5 Name: events_waits_history.size 6Status: 76 7*************************** 4. row *************************** 8 Type: performance_schema 9 Name: events_waits_history.count 10Status: 10000 11*************************** 5. row *************************** 12 Type: performance_schema 13 Name: events_waits_history.memory 14Status: 760000 15... 16*************************** 57. row *************************** 17 Type: performance_schema 18 Name: performance_schema.memory 19Status: 26459600 20...
이 스테이트먼트는 서로 다른 Performance Schema 옵션이 메모리 요구 사항에 미치는 영향을 DBA가 이해하는 데 도움을 주기 위한 것입니다. 필드 의미에 대한 설명은 Section 15.7.7.17, “SHOW ENGINE Statement” 을 참조하십시오.
29.6 Performance Schema Instrument Naming Conventions
29.8 Performance Schema Atom and Molecule Events