• MySQL매뉴얼
    • MySQL 5.6 매뉴얼
    • MySQL 5.1 매뉴얼
    • MySQL 5.0 매뉴얼
    • MySQL HA 매뉴얼
  • 기술문서
    • Xtrabackup 구성
    • 메모리 사용량 모니터링
  • 라이선스
  • 온라인문의
  • 회사소개
  • → 목 록 (MySQL5.6 한글메뉴얼) [close]
  • 1. MySQL 5.6 새로운 기능
  • 2. MySQL 설치 및 업그레이드
  • 3. MySQL Tutorial
  • 4. MySQL 프로그램
  • 5. MySQL 서버관리
  • 6. 보안
  • 7. 백업 및 복구
  • 8. 최적화
  • 9. Language Structure(언어구조)
  • 10. Character Sets(Globalization)
  • 11. 데이터형(Data Types)
  • 12. 함수와 연산자
  • 13. SQL 문법
  • 14. InnoDB 스토리지 엔진
  • 15. 기타 스토리지 엔진
  • 16. 고가용성 및 확장성
  • 17. 리플리케이션
  • 18. MySQL Cluster
  • 19. 파티셔닝
  • 20. Stored Programs and Views
  • 21. INFORMATION_SCHEMA
  • 22. PERFORMANCE SCHEMA
  • 1. Performance Schema 빠른 시작
    2. Performance Schema 구성
    3. Performance Schema 쿼리
    4. Performance Schema Instrument Naming Conventions
    5. Performance Schema Status Monitoring
    6. Performance Schema Atom and Molecule Events
    7. Performance Schema Statement Digests
    8. Performance Schema의 일반적인 테이블 특성
    9. Performance Schema 테이블 설명
    10. Performance Schema Option and Variable Reference
    11. Performance Schema Command Options
    12. Performance Schema System Variables
    13. Performance Schema Status Variables
    14. Performance Schema and Plugins
    15. 문제를 진단하기위한 Performance Schema 사용
  • 23. 컨넥터 및 API
  • 24. MySQL 확장
  • 25. MySQL Enterprise Edition
  • 26. MySQL Workbench
  • 27. 제약 및 제한
  • 28. MySQL 5.7 새로운 기능

22.1 성능 스키마 빠른 시작

이 섹션에서는 그 사용 방법을 나타내는 예에 따라 성능 스키마에 대해 간략하게 소개합니다. 추가 예제는 섹션 22.15 "문제를 진단하기위한 성능 스키마 사용" 을 참조하십시오.

성능 스키마를 사용할 수 있도록하려면 MySQL을 구축 할 때 그 지원이 구성되어 있어야합니다. 이것이 적용되는지 여부는 서버의 도움말 출력을 체크하고 확인할 수 있습니다. 성능 스키마를 사용할 수있는 경우 출력에 performance_schema 로 시작하는 이름을 가진 여러 변수가 표시됩니다.

shell> mysqld --verbose --help
...
  --performance_schema
                      Enable the performance schema.
  --performance_schema_events_waits_history_long_size=#
                      Number of rows in events_waits_history_long.
...

그런 변수가 출력에 표시되지 않는 경우, 서버는 성능 스키마를 지원하도록 구축되어 있지 않습니다. 이 경우, 섹션 22.2 "성능 스키마 구성" 을 참조하십시오.

성능 스키마를 사용할 수있는 것으로, MySQL 5.6.6 이후 그것은 기본적으로 활성화됩니다. 5.6.6 이전에는, 그것은 기본적으로 비활성화됩니다. 그것을 명시 적으로 활성화 또는 비활성화하려면 performance_schema 변수를 적절한 값으로 설정하여 서버를 시작합니다. 예를 들어, my.cnf 파일에 다음 줄을 사용합니다.

[mysqld]
performance_schema=ON

서버는 시작할 때 performance_schema 을 확인하고 성능 스키마의 초기화를 시도합니다. 초기화의 성공을 확인하려면이 문을 사용합니다.

mysql> SHOW VARIABLES LIKE 'performance_schema';
+--------------------+-------+
| Variable_name      | Value |
+--------------------+-------+
| performance_schema | ON    |
+--------------------+-------+

ON 값은 성능 스키마가 제대로 초기화되어 사용할 준비가되어 있다는 것을 의미합니다. OFF 의 값은 어떠한 에러가 발생하는 것을 의미합니다. 무엇에 이상이 발생했는지에 대한 정보는 서버 오류 로그를 확인하십시오.

성능 스키마는 스토리지 엔진으로 구현됩니다. 이 엔진을 사용할 수있는 경우 (먼저 이미 체크하고있는 것입니다) INFORMATION_SCHEMA.ENGINES 테이블 또는 SHOW ENGINES 명령문의 출력에 SUPPORT 값이 YES 로 그것이 표시되어있는 것으로 알 수 있습니다.

mysql> SELECT * FROM INFORMATION_SCHEMA.ENGINES
    -> WHERE ENGINE='PERFORMANCE_SCHEMA'\G
*************************** 1. row ***************************
      ENGINE: PERFORMANCE_SCHEMA
     SUPPORT: YES
     COMMENT: Performance Schema
TRANSACTIONS: NO
          XA: NO
  SAVEPOINTS: NO

mysql> SHOW ENGINES\G
...
      Engine: PERFORMANCE_SCHEMA
     Support: YES
     Comment: Performance Schema
Transactions: NO
          XA: NO
  Savepoints: NO
...

PERFORMANCE_SCHEMA 스토리지 엔진은 performance_schema 데이터베이스의 테이블을 조작합니다. 그 테이블에 대한 참조를 데이터베이스 이름으로 한정 할 필요가 없도록 performance_schema 를 기본 데이터베이스로 할 수 있습니다.

mysql> USE performance_schema;

이 장의 많은 예는 performance_schema 가 기본 데이터베이스라고합니다.

성능 스키마 테이블 performance_schema 데이터베이스에 저장됩니다. 이 데이터베이스 및 테이블 구조에 대한 정보를 얻으려면 다른 모든 데이터베이스처럼 INFORMATION_SCHEMA 데이터베이스에서 선택하거나 SHOW 문을 사용합니다. 예를 들어, 어떤 성능 스키마 테이블이 존재하는지 확인하려면 이러한 문 중 하나를 사용합니다.

mysql> SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES
    -> WHERE TABLE_SCHEMA = 'performance_schema';
+----------------------------------------------------+
| TABLE_NAME                                         |
+----------------------------------------------------+
| accounts                                           |
| cond_instances                                     |
| events_stages_current                              |
| events_stages_history                              |
| events_stages_history_long                         |
| events_stages_summary_by_account_by_event_name     |
| events_stages_summary_by_host_by_event_name        |
| events_stages_summary_by_thread_by_event_name      |
| events_stages_summary_by_user_by_event_name        |
| events_stages_summary_global_by_event_name         |
| events_statements_current                          |
| events_statements_history                          |
| events_statements_history_long                     |
...
| file_instances                                     |
| file_summary_by_event_name                         |
| file_summary_by_instance                           |
| host_cache                                         |
| hosts                                              |
| mutex_instances                                    |
| objects_summary_global_by_type                     |
| performance_timers                                 |
| rwlock_instances                                   |
| session_account_connect_attrs                      |
| session_connect_attrs                              |
| setup_actors                                       |
| setup_consumers                                    |
| setup_instruments                                  |
| setup_objects                                      |
| setup_timers                                       |
| socket_instances                                   |
| socket_summary_by_event_name                       |
| socket_summary_by_instance                         |
| table_io_waits_summary_by_index_usage              |
| table_io_waits_summary_by_table                    |
| table_lock_waits_summary_by_table                  |
| threads                                            |
| users                                              |
+----------------------------------------------------+

mysql> SHOW TABLES FROM performance_schema;
+----------------------------------------------------+
| Tables_in_performance_schema                       |
+----------------------------------------------------+
| accounts                                           |
| cond_instances                                     |
| events_stages_current                              |
| events_stages_history                              |
| events_stages_history_long                         |
...

성능 스키마 테이블의 수는 추가 계측의 구현이 진행되면서 시간에 따라 증가 할 것으로 예상됩니다.

performance_schema 데이터베이스의 이름은 소문자로 그 안에 테이블의 이름도 마찬가지입니다. 쿼리는 이름을 소문자로 입력하십시오.

각 테이블의 구조를 표시하려면 SHOW CREATE TABLE 을 사용합니다.

mysql> SHOW CREATE TABLE setup_timers\G
*************************** 1. row ***************************
       Table: setup_timers
Create Table: CREATE TABLE `setup_timers` (
  `NAME` varchar(64) NOT NULL,
  `TIMER_NAME` enum('CYCLE','NANOSECOND','MICROSECOND','MILLISECOND','TICK')
   NOT NULL
) ENGINE=PERFORMANCE_SCHEMA DEFAULT CHARSET=utf8

테이블 구조는 INFORMATION_SCHEMA.COLUMNS 등의 테이블에서 선택하거나 SHOW COLUMNS 등의 문을 사용하여 얻을 수 있습니다.

performance_schema 데이터베이스의 테이블은 그들 사이의 정보의 종류 (현재 이벤트, 이벤트 기록 및 요약 개체 인스턴스 및 설치 (구성) 정보)에 따라 그룹화 할 수 있습니다. 다음 예제에서는 이러한 테이블의 몇 가지 사용 방법을 보여줍니다. 각 그룹의 테이블에 대한 자세한 내용은 섹션 22.9 "성능 스키마 테이블의 설명" 을 참조하십시오.

첫째, 모든 instrument와 소비자가 활성화되어 있지 않기 때문에 성능 스키마는 모든 이벤트를 수집하지 않습니다. 이 모든 것을 선택하고 이벤트 타이밍을 활성화하려면 2 개의 문을 실행합니다 (행 개수는 MySQL 버전에 따라 다를 수 있습니다).

mysql> UPDATE setup_instruments SET ENABLED = 'YES', TIMED = 'YES';
Query OK, 338 rows affected (0.12 sec)
mysql> UPDATE setup_consumers SET ENABLED = 'YES';
Query OK, 8 rows affected (0.00 sec)

현재 서버가 무엇을하고 있는지 확인하려면 events_waits_current 테이블을 조사합니다. 그것에는 스레드마다 각 스레드의 최신 모니터 된 이벤트를 나타내는 하나의 행이 포함됩니다.

mysql> SELECT * FROM events_waits_current\G
*************************** 1. row ***************************
            THREAD_ID: 0
             EVENT_ID: 5523
           EVENT_NAME: wait/synch/mutex/mysys/THR_LOCK::mutex
               SOURCE: thr_lock.c:525
          TIMER_START: 201660494489586
            TIMER_END: 201660494576112
           TIMER_WAIT: 86526
                SPINS: NULL
        OBJECT_SCHEMA: NULL
          OBJECT_NAME: NULL
          OBJECT_TYPE: NULL
OBJECT_INSTANCE_BEGIN: 142270668
     NESTING_EVENT_ID: NULL
            OPERATION: lock
      NUMBER_OF_BYTES: NULL
                FLAGS: 0
...

이 이벤트는 스레드 0이 THR_LOCK::mutex 잠금, mysys 서브 시스템의 상호 배타 락을 획득하기 위해 86,526 피코 초 대기하고 있었다는 것을 보여줍니다. 처음 몇 열은 다음 정보를 제공합니다.

  • ID 열은 이벤트의 발생원의 thread와 이벤트 번호를 나타냅니다.

  • EVENT_NAME 은 instrument 된 것을 나타내고 SOURCE 는 instrument 된 코드를 포함하는 소스 파일을 보여줍니다.

  • 타이머 컬럼은 이벤트가 시작 및 중지시기 및 이에 소요 된 시간을 나타냅니다. 이벤트가 아직 진행중인 경우 TIMER_END 과 TIMER_WAIT 값이 NULL 입니다. 타이머 값은 개산에서 피코 초에 표시됩니다. 타이머 및 이벤트 시간 컬렉션은 섹션 22.2.3.1 "성능 스키마 이벤트 타이밍" 을 참조하십시오.

기록 테이블에는 현재 이벤트 테이블과 같은 종류의 줄이 포함되지만 다른 줄도 서버가 "현재"가 아니라 "최근"무엇을 수행하고 있었는지가 표시됩니다. events_waits_history 및 events_waits_history_long 테이블에는 스레드마다 최신 10 이벤트와 최신 10,000 이벤트가 각각 포함되어 있습니다. 예를 들어, 스레드 13에 의해 생성 된 최신 이벤트 정보를 표시하려면 다음을 수행합니다.

mysql> SELECT EVENT_ID, EVENT_NAME, TIMER_WAIT
    -> FROM events_waits_history WHERE THREAD_ID = 13
    -> ORDER BY EVENT_ID;
+----------+-----------------------------------------+------------+
| EVENT_ID | EVENT_NAME                              | TIMER_WAIT |
+----------+-----------------------------------------+------------+
|       86 | wait/synch/mutex/mysys/THR_LOCK::mutex  |     686322 |
|       87 | wait/synch/mutex/mysys/THR_LOCK_malloc  |     320535 |
|       88 | wait/synch/mutex/mysys/THR_LOCK_malloc  |     339390 |
|       89 | wait/synch/mutex/mysys/THR_LOCK_malloc  |     377100 |
|       90 | wait/synch/mutex/sql/LOCK_plugin        |     614673 |
|       91 | wait/synch/mutex/sql/LOCK_open          |     659925 |
|       92 | wait/synch/mutex/sql/THD::LOCK_thd_data |     494001 |
|       93 | wait/synch/mutex/mysys/THR_LOCK_malloc  |     222489 |
|       94 | wait/synch/mutex/mysys/THR_LOCK_malloc  |     214947 |
|       95 | wait/synch/mutex/mysys/LOCK_alarm       |     312993 |
+----------+-----------------------------------------+------------+

기록 테이블에 새로운 이벤트가 추가되면 테이블이 가득이면 오래된 이벤트가 삭제됩니다.

요약 테이블은 시간이 지남에 모든 이벤트에 대해 집계 된 정보를 제공합니다. 이 그룹의 테이블은 다양한 방법으로 이벤트 데이터가 요약됩니다. 가장 많은 횟수 실행되었는지, 또는 가장 대기 시간이 걸렸다 instrument를 확인하려면 COUNT_STAR 또는 SUM_TIMER_WAIT 컬럼에서 events_waits_summary_global_by_event_name 테이블을 정렬합니다. 이 컬럼은 모든 이벤트에 걸쳐 계산 된 COUNT(*) 또는 SUM(TIMER_WAIT) 값에 해당합니다.

mysql> SELECT EVENT_NAME, COUNT_STAR
    -> FROM events_waits_summary_global_by_event_name
    -> ORDER BY COUNT_STAR DESC LIMIT 10;
+---------------------------------------------------+------------+
| EVENT_NAME                                        | COUNT_STAR |
+---------------------------------------------------+------------+
| wait/synch/mutex/mysys/THR_LOCK_malloc            |       6419 |
| wait/io/file/sql/FRM                              |        452 |
| wait/synch/mutex/sql/LOCK_plugin                  |        337 |
| wait/synch/mutex/mysys/THR_LOCK_open              |        187 |
| wait/synch/mutex/mysys/LOCK_alarm                 |        147 |
| wait/synch/mutex/sql/THD::LOCK_thd_data           |        115 |
| wait/io/file/myisam/kfile                         |        102 |
| wait/synch/mutex/sql/LOCK_global_system_variables |         89 |
| wait/synch/mutex/mysys/THR_LOCK::mutex            |         89 |
| wait/synch/mutex/sql/LOCK_open                    |         88 |
+---------------------------------------------------+------------+

mysql> SELECT EVENT_NAME, SUM_TIMER_WAIT
    -> FROM events_waits_summary_global_by_event_name
    -> ORDER BY SUM_TIMER_WAIT DESC LIMIT 10;
+----------------------------------------+----------------+
| EVENT_NAME                             | SUM_TIMER_WAIT |
+----------------------------------------+----------------+
| wait/io/file/sql/MYSQL_LOG             |     1599816582 |
| wait/synch/mutex/mysys/THR_LOCK_malloc |     1530083250 |
| wait/io/file/sql/binlog_index          |     1385291934 |
| wait/io/file/sql/FRM                   |     1292823243 |
| wait/io/file/myisam/kfile              |      411193611 |
| wait/io/file/myisam/dfile              |      322401645 |
| wait/synch/mutex/mysys/LOCK_alarm      |      145126935 |
| wait/io/file/sql/casetest              |      104324715 |
| wait/synch/mutex/sql/LOCK_plugin       |       86027823 |
| wait/io/file/sql/pid                   |       72591750 |
+----------------------------------------+----------------+

이러한 결과는 THR_LOCK_malloc 상호 배타적 잠금이 그 사용 빈도와 스레드가 그것을 획득하려고 대기하는 시간의 양 모두에 대해 "핫"임을 나타냅니다.

참고

THR_LOCK_malloc 상호 배타 락은 디버그 빌드에서만 사용됩니다. 실전 빌드는 존재하지 않기 때문에 뜨거운 없습니다.

인스턴스 테이블은 instrument 된 객체의 종류를 설명합니다. instrument 된 객체는 서버에서 사용하는 이벤트를 생성합니다. 이 테이블은 이벤트 이름과 설명 메모 또는 상태 정보를 제공합니다. 예를 들어, file_instances 테이블은 파일 I / O 작업의 instrument 인스턴스와 그와 관련된 파일을 나열합니다.

mysql> SELECT * FROM file_instances\G
*************************** 1. row ***************************
 FILE_NAME: /opt/mysql-log/60500/binlog.000007
EVENT_NAME: wait/io/file/sql/binlog
OPEN_COUNT: 0
*************************** 2. row ***************************
 FILE_NAME: /opt/mysql/60500/data/mysql/tables_priv.MYI
EVENT_NAME: wait/io/file/myisam/kfile
OPEN_COUNT: 1
*************************** 3. row ***************************
 FILE_NAME: /opt/mysql/60500/data/mysql/columns_priv.MYI
EVENT_NAME: wait/io/file/myisam/kfile
OPEN_COUNT: 1
...

설정 테이블은 모니터링 특성 구성 및 표시하는 데 사용됩니다. 예를 들어, 선택되는 이벤트 타이머를 표시하려면 setup_timers 테이블을 쿼리합니다.

mysql> SELECT * FROM setup_timers;
+-----------+-------------+
| NAME      | TIMER_NAME  |
+-----------+-------------+
| idle      | MICROSECOND |
| wait      | CYCLE       |
| stage     | NANOSECOND  |
| statement | NANOSECOND  |
+-----------+-------------+

setup_instruments 이벤트를 수집 할 수있는 일련의 instrument를 나열하고 그 중 어느 것이 활성화되어 있는지를 나타냅니다.

mysql> SELECT * FROM setup_instruments;
+------------------------------------------------------------+---------+-------+
| NAME                                                       | ENABLED | TIMED |
+------------------------------------------------------------+---------+-------+
...
| wait/synch/mutex/sql/LOCK_global_read_lock                 | YES     | YES   |
| wait/synch/mutex/sql/LOCK_global_system_variables          | YES     | YES   |
| wait/synch/mutex/sql/LOCK_lock_db                          | YES     | YES   |
| wait/synch/mutex/sql/LOCK_manager                          | YES     | YES   |
...
| wait/synch/rwlock/sql/LOCK_grant                           | YES     | YES   |
| wait/synch/rwlock/sql/LOGGER::LOCK_logger                  | YES     | YES   |
| wait/synch/rwlock/sql/LOCK_sys_init_connect                | YES     | YES   |
| wait/synch/rwlock/sql/LOCK_sys_init_slave                  | YES     | YES   |
...
| wait/io/file/sql/binlog                                    | YES     | YES   |
| wait/io/file/sql/binlog_index                              | YES     | YES   |
| wait/io/file/sql/casetest                                  | YES     | YES   |
| wait/io/file/sql/dbopt                                     | YES     | YES   |
...

instrument 이름의 해석 방법을 이해하려면 섹션 22.4 "성능 스키마 instrument 명명 규칙" 을 참조하십시오.

instrument의 이벤트를 수집할지 여부를 제어하려면 그 ENABLED 값을 YES 또는 NO 로 설정합니다. 예 :

mysql> UPDATE setup_instruments SET ENABLED = 'NO'
    -> WHERE NAME = 'wait/synch/mutex/sql/LOCK_mysql_create_db';

성능 스키마는 수집 된 이벤트를 사용하여 이벤트 정보 "소비자"역할을 performance_schema 데이터베이스의 테이블을 업데이트합니다. setup_consumers 테이블은 사용 가능한 소비자와 어느 것이 활성화되어 있는지를 나타냅니다.

mysql> SELECT * FROM setup_consumers;
+--------------------------------+---------+
| NAME                           | ENABLED |
+--------------------------------+---------+
| events_stages_current          | NO      |
| events_stages_history          | NO      |
| events_stages_history_long     | NO      |
| events_statements_current      | YES     |
| events_statements_history      | NO      |
| events_statements_history_long | NO      |
| events_waits_current           | NO      |
| events_waits_history           | NO      |
| events_waits_history_long      | NO      |
| global_instrumentation         | YES     |
| thread_instrumentation         | YES     |
| statements_digest              | YES     |
+--------------------------------+---------+

성능 스키마가 소비자를 이벤트 정보의 대상으로 보수 여부를 제어하려면 그 ENABLED 값을 설정합니다.

설정 테이블에 대해 때 그들을 사용하여 이벤트 수집을 제어하는 자세한 내용은 섹션 22.2.3.2 "성능 스키마 이벤트 필터링" 을 참조하십시오.

앞서 그룹의 어느 것에도 속하지 않는 기타 테이블이 몇 가지 있습니다. 예를 들어, performance_timers 는 사용 가능한 이벤트 타이머와 그 특성을 나열합니다. 타이머에 대한 자세한 내용은 섹션 22.2.3.1 "성능 스키마 이벤트 타이밍" 을 참조하십시오.

서울시 강남구 영동대로 602 6층
TEL: 02-6061-0006  /  E: csr@mysqlkorea.com
주식회사 이노클러스터  등록번호 : 727-86-02261
Copyright © innocluster Co. ltd. all rights reserved