MySQL 8.0에서 추가된 모든 기능

MySQL 8.0에서 추가된 모든 기능 – Performance Schema

Estimated reading: 5 minutes 48 views

    1. 성능 스키마 인덱스

    [원본제공링크 1]

    성능 스키마 인덱스Performance Schema 내의 테이블에 인덱스가 추가되어 쿼리 성능을 향상시킵니다. 이를 통해 성능 스키마의 데이터에 접근할 때 더 빠른 쿼리 실행이 가능해졌으며, 성능 모니터링 및 튜닝 작업의 효율성이 높아졌습니다.

    예시:

    mysql> show create table performance_schema.events_statements_history;
    | events_statements_history | CREATE TABLE `events_statements_history` (
      ....
      PRIMARY KEY (`THREAD_ID`,`EVENT_ID`)
      ....
      
    SELECT * FROM performance_schema.events_statements_history
    WHERE THREAD_ID = 1234;

    이 예시에서는 THREAD_ID 컬럼에 인덱스가 있다는 것을 확인하였습니다. 예시 아래 쿼리는 인덱스를 사용하여 빠르게 해당 스레드의 이벤트를 조회할 수 있습니다.

    2. 서버 에러 계측

    [원본제공링크 1]

    서버 오류 계측(Server Error Instrumentation)서버에서 발생하는 에러를 상세하게 모니터링하고 분석할 수 있는 기능입니다. Performance Schema는 오류 이벤트를 캡처하여 오류의 빈도, 유형, 발생 시점 등을 파악할 수 있게 합니다.

    예시:

    mysql> SELECT ERROR_NUMBER, SUM(SUM_ERROR_RAISED) AS total_errors 
    FROM performance_schema.events_errors_summary_global_by_error 
    GROUP BY ERROR_NUMBER having total_errors > 0;
    +--------------+--------------+
    | ERROR_NUMBER | total_errors |
    +--------------+--------------+
    |         1045 |            1 |
    |         1046 |            3 |
    |         1049 |            7 |
    |         1054 |            8 |
    |         1060 |            4 |
    |         1061 |            1 |
    |         1062 |            1 |
    |         1064 |           54 |
    |         1109 |            1 |
    |         1136 |            1 |
    |         1146 |           10 |
    |         1193 |            1 |
    |         1205 |            1 |
    |         1287 |          613 |
    |         1317 |            8 |
    |         1582 |            1 |
    |         1681 |            3 |
    |         1831 |            4 |
    |         1845 |            1 |
    |         3523 |            3 |
    |         3554 |         1311 |
    |         3619 |            1 |
    |         3750 |            2 |
    |         3778 |           73 |
    |         4031 |           44 |
    +--------------+--------------+
    25 rows in set (0.00 sec)
    

    이 쿼리는 에러 코드별로 발생한 총 에러 횟수를 보여줍니다.

    3. 쿼리문 지연시간 분포도

    [원본제공링크 1]

    쿼리문 지연시간 분포도(Statement Latency Histograms)는 SQL 문장의 응답 시간 분포를 히스토그램 형태로 제공하여, 성능 병목 구간을 식별하는 데 도움을 줍니다. 이를 통해 응답 시간이 긴 쿼리를 빠르게 찾아낼 수 있습니다.

    예시:

    +--------------+------------------------------------------------------------------+---------------+------------------+-------------------+--------------+------------------------+-----------------+
    | SCHEMA_NAME  | DIGEST                                                           | BUCKET_NUMBER | BUCKET_TIMER_LOW | BUCKET_TIMER_HIGH | COUNT_BUCKET | COUNT_BUCKET_AND_LOWER | BUCKET_QUANTILE |
    +--------------+------------------------------------------------------------------+---------------+------------------+-------------------+--------------+------------------------+-----------------+
    | guacamole_db | c20fcea11911be36651b7ca7bd3712d4ed9ac1134cee9c6620039e1fb13b5eff |            50 |         95499258 |         100000000 |            1 |                      1 |        0.027027 |
    | guacamole_db | c20fcea11911be36651b7ca7bd3712d4ed9ac1134cee9c6620039e1fb13b5eff |            52 |        104712854 |         109647819 |            1 |                      2 |        0.054054 |
    | guacamole_db | c20fcea11911be36651b7ca7bd3712d4ed9ac1134cee9c6620039e1fb13b5eff |            53 |        109647819 |         114815362 |            3 |                      5 |        0.135135 |
    | guacamole_db | c20fcea11911be36651b7ca7bd3712d4ed9ac1134cee9c6620039e1fb13b5eff |            54 |        114815362 |         120226443 |            2 |                      7 |        0.189189 |
    | guacamole_db | c20fcea11911be36651b7ca7bd3712d4ed9ac1134cee9c6620039e1fb13b5eff |            55 |        120226443 |         125892541 |            6 |                     13 |        0.351351 |
    | guacamole_db | c20fcea11911be36651b7ca7bd3712d4ed9ac1134cee9c6620039e1fb13b5eff |            57 |        131825673 |         138038426 |            2 |                     15 |        0.405405 |
    | guacamole_db | c20fcea11911be36651b7ca7bd3712d4ed9ac1134cee9c6620039e1fb13b5eff |            58 |        138038426 |         144543977 |            2 |                     17 |        0.459459 |
    | guacamole_db | c20fcea11911be36651b7ca7bd3712d4ed9ac1134cee9c6620039e1fb13b5eff |            59 |        144543977 |         151356124 |            1 |                     18 |        0.486486 |
    | guacamole_db | c20fcea11911be36651b7ca7bd3712d4ed9ac1134cee9c6620039e1fb13b5eff |            60 |        151356124 |         158489319 |            2 |                     20 |        0.540541 |
    | guacamole_db | c20fcea11911be36651b7ca7bd3712d4ed9ac1134cee9c6620039e1fb13b5eff |            61 |        158489319 |         165958690 |            1 |                     21 |        0.567568 |
    | guacamole_db | c20fcea11911be36651b7ca7bd3712d4ed9ac1134cee9c6620039e1fb13b5eff |            64 |        181970085 |         190546071 |            1 |                     22 |        0.594595 |
    | guacamole_db | c20fcea11911be36651b7ca7bd3712d4ed9ac1134cee9c6620039e1fb13b5eff |            98 |        870963589 |         912010839 |            1 |                     23 |        0.621622 |
    | guacamole_db | c20fcea11911be36651b7ca7bd3712d4ed9ac1134cee9c6620039e1fb13b5eff |           108 |       1380384264 |        1445439770 |            1 |                     24 |        0.648649 |
    | guacamole_db | c20fcea11911be36651b7ca7bd3712d4ed9ac1134cee9c6620039e1fb13b5eff |           113 |       1737800828 |        1819700858 |            1 |                     25 |        0.675676 |
    | guacamole_db | c20fcea11911be36651b7ca7bd3712d4ed9ac1134cee9c6620039e1fb13b5eff |           132 |       4168693834 |        4365158322 |            1 |                     26 |        0.702703 |
    | guacamole_db | c20fcea11911be36651b7ca7bd3712d4ed9ac1134cee9c6620039e1fb13b5eff |           133 |       4365158322 |        4570881896 |            1 |                     27 |        0.729730 |
    | guacamole_db | c20fcea11911be36651b7ca7bd3712d4ed9ac1134cee9c6620039e1fb13b5eff |           141 |       6309573444 |        6606934480 |            1 |                     28 |        0.756757 |
    | guacamole_db | c20fcea11911be36651b7ca7bd3712d4ed9ac1134cee9c6620039e1fb13b5eff |           152 |      10471285480 |       10964781961 |            1 |                     29 |        0.783784 |
    | guacamole_db | c20fcea11911be36651b7ca7bd3712d4ed9ac1134cee9c6620039e1fb13b5eff |           159 |      14454397707 |       15135612484 |            1 |                     30 |        0.810811 |
    | guacamole_db | c20fcea11911be36651b7ca7bd3712d4ed9ac1134cee9c6620039e1fb13b5eff |           175 |      30199517204 |       31622776601 |            1 |                     31 |        0.837838 |
    | guacamole_db | c20fcea11911be36651b7ca7bd3712d4ed9ac1134cee9c6620039e1fb13b5eff |           176 |      31622776601 |       33113112148 |            1 |                     32 |        0.864865 |
    | guacamole_db | c20fcea11911be36651b7ca7bd3712d4ed9ac1134cee9c6620039e1fb13b5eff |           177 |      33113112148 |       34673685045 |            1 |                     33 |        0.891892 |
    | guacamole_db | c20fcea11911be36651b7ca7bd3712d4ed9ac1134cee9c6620039e1fb13b5eff |           178 |      34673685045 |       36307805477 |            1 |                     34 |        0.918919 |
    | guacamole_db | c20fcea11911be36651b7ca7bd3712d4ed9ac1134cee9c6620039e1fb13b5eff |           181 |      39810717055 |       41686938347 |            1 |                     35 |        0.945946 |
    | guacamole_db | c20fcea11911be36651b7ca7bd3712d4ed9ac1134cee9c6620039e1fb13b5eff |           197 |      83176377110 |       87096358995 |            1 |                     36 |        0.972973 |
    | guacamole_db | c20fcea11911be36651b7ca7bd3712d4ed9ac1134cee9c6620039e1fb13b5eff |           234 |     457088189614 |      478630092322 |            1 |                     37 |        1.000000 |
    +--------------+------------------------------------------------------------------+---------------+------------------+-------------------+--------------+------------------------+-----------------+

    이 테이블은 쿼리별 응답 시간을 구간별로 실행 빈도를 보여줍니다. 쿼리 Digest별로 해당 쿼리가 주로 어느 정도 시간 내에 처리되는지 등을 확인할 수 있습니다.

    4. 데이터 락 계측

    [원본제공링크 1]

    데이터 락 계측(Data Lock Instrumentation)데이터 락(잠금)에 대한 상세한 정보를 수집하여, 데드락이나 잠금 경합을 분석하는 데 유용합니다. 잠금 대기 시간, 락 유형, 락을 보유한 스레드 정보 등을 확인할 수 있습니다.

    예시:

    mysql> SELECT * FROM performance_schema.data_locks limit 3;
    +--------+----------------------------------------+-----------------------+-----------+----------+---------------+-------------+----------------+-------------------+-----------------+-----------------------+-----------+-----------+-------------+------------------------+
    | ENGINE | ENGINE_LOCK_ID                         | ENGINE_TRANSACTION_ID | THREAD_ID | EVENT_ID | OBJECT_SCHEMA | OBJECT_NAME | PARTITION_NAME | SUBPARTITION_NAME | INDEX_NAME      | OBJECT_INSTANCE_BEGIN | LOCK_TYPE | LOCK_MODE | LOCK_STATUS | LOCK_DATA              |
    +--------+----------------------------------------+-----------------------+-----------+----------+---------------+-------------+----------------+-------------------+-----------------+-----------------------+-----------+-----------+-------------+------------------------+
    | INNODB | 140363303198720:1098:140363222279984   |                 13058 |       157 |       24 | minhang       | aaa         | NULL           | NULL              | NULL            |       140363222279984 | TABLE     | IX        | GRANTED     | NULL                   |
    | INNODB | 140363303198720:36:5:1:140363222276880 |                 13058 |       157 |       24 | minhang       | aaa         | NULL           | NULL              | GEN_CLUST_INDEX |       140363222276880 | RECORD    | X         | GRANTED     | supremum pseudo-record |
    | INNODB | 140363303198720:36:5:2:140363222276880 |                 13058 |       157 |       24 | minhang       | aaa         | NULL           | NULL              | GEN_CLUST_INDEX |       140363222276880 | RECORD    | X         | GRANTED     | 0x000000000300         |
    +--------+----------------------------------------+-----------------------+-----------+----------+---------------+-------------+----------------+-------------------+-----------------+-----------------------+-----------+-----------+-------------+------------------------+
    3 rows in set (0.05 sec)

    이 쿼리는 현재 발생한 모든 데이터 락의 정보를 3건만(limit 3) 제공합니다.

    5. 플러거블 성능 스키마 테이블

    [원본제공링크 1]

    플러거블 성능 스키마 테이블(Pluggable Performance Schema Tables)사용자가 필요에 따라 성능 스키마의 계측 항목을 동적으로 추가하거나 제거할 수 있는 기능입니다. 이를 통해 필요한 정보만 수집하여 오버헤드를 최소화할 수 있습니다.

    예시:

    -- 특정 계측기 활성화 여부 확인 (limit 3)
    mysql> select * from performance_schema.setup_instruments WHERE NAME like 'stage/sql%' limit 3;
    +-------------------------------------+---------+-------+------------+-------+------------+---------------+
    | NAME                                | ENABLED | TIMED | PROPERTIES | FLAGS | VOLATILITY | DOCUMENTATION |
    +-------------------------------------+---------+-------+------------+-------+------------+---------------+
    | stage/sql/After create              | NO      | NO    |            | NULL  |          0 | NULL          |
    | stage/sql/preparing for alter table | NO      | NO    |            | NULL  |          0 | NULL          |
    | stage/sql/altering table            | NO      | NO    |            | NULL  |          0 | NULL          |
    +-------------------------------------+---------+-------+------------+-------+------------+---------------+
    3 rows in set (0.00 sec)
    
    -- 특정 계측기 활성화
    UPDATE performance_schema.setup_instruments
    SET ENABLED = 'YES', TIMED = 'YES'
    WHERE NAME = 'stage/sql/init';

    6. QUERY_SAMPLE_TEXT 추가

    [원본제공링크 1]

    QUERY_SAMPLE_TEXT긴 쿼리나 빈번하게 실행되는 쿼리의 샘플을 저장하여, 성능 분석 시 쿼리 내용을 직접 확인할 수 있게 해줍니다. 이는 쿼리 튜닝과 최적화에 도움이 됩니다.

    예시:

    SELECT SCHEMA_NAME, DIGEST_TEXT, QUERY_SAMPLE_TEXT
    FROM performance_schema.events_statements_summary_by_digest
    WHERE QUERY_SAMPLE_TEXT IS NOT NULL;

    이 쿼리는 쿼리 샘플이 저장된 이벤트의 SQL 문장과 샘플 텍스트를 보여줍니다. 이렇게 QUERY_SAMPLE_TEXT를 확인해보면, ?로 Digest된 쿼리가 아니라 Where 조건등이 그대로 들어가있는, 즉, 바로 실제 실행해볼 수 있는 샘플 쿼리들을 확인해볼 수 있습니다.

    7. 스레드 풀 테이블 추가

    [원본제공링크 1] (엔터프라이즈 전용 기능)

    스레드 풀 테이블(Thread Pool Tables)MySQL 엔터프라이즈 에디션에서 제공되는 기능으로, 스레드 풀의 상태와 통계 정보를 제공합니다. 이를 통해 동시 접속이 많은 환경에서 스레드 풀의 성능을 모니터링하고 조정할 수 있습니다.

    예시:

    SELECT * FROM performance_schema.tp_thread_state;

    이 테이블은 스레드 풀의 큐 상태를 보여줍니다. 스레드 풀 기능 자체가 엔터프라이즈 에디션 전용 기능이다보니, 해당 테이블 또한 엔터프라이즈 에디션에서만 확인 가능합니다.

    Leave a Comment



    이 문서 공유

    MySQL 8.0에서 추가된 모든 기능 – Performance Schema

    링크 복사

    CONTENTS