MySQL SYS schema overview

1. SYS schema란

1.1 SYS schema 소개

  • DBA, Developer, Ops 를 위한 views, procedures, functions 제공
  • 일반적인 DBA, Developer의 debugging, tunning 작업에 필요한 기능을 제공함
  • MySQL 5.7.7 부터 New Feature로 소개되어 default로 포함되고 5.7.7 미만 5.6 이상에서는 따로 설치가능하다.

1.2 왜 SYS schema가 필요한가?

  • performance_schema를 통해 원하는 데이터를 추출하기가 까다롭다.
  • performance_schema의 대량 데이터는 여러 방면으로 유용하게 쓰일수 있는데, 목적에 따라 쉽게 사용할수 있도록 views, procedures, functions 제공한다.

2. 설치

2.1 command line설치

  • git clone https://github.com/MarkLeith/mysql-sys.git /tmp/sys
  • cd /tmp/sys
  • mysql -u user -p < sys_.sql
  • 예제
    [mysql@myvm1 ~]$  git clone https://github.com/MarkLeith/mysql-sys.git /tmp/sys
    Initialized empty Git repository in /tmp/sys/.git/
    remote: Counting objects: 1704, done.
    remote: Total 1704 (delta 0), reused 0 (delta 0), pack-reused 1704
    Receiving objects: 100% (1704/1704), 663.39 KiB | 310 KiB/s, done.
    Resolving deltas: 100% (1146/1146), done.
    [mysql@myvm1 ~]$ cd /tmp/sys
    [mysql@myvm1 sys]$ mysql -uroot -p --socket=/tmp/mysql56.sock < sys_56.sql
    Enter password:

2.2 MySQL Workbench 6.1+ 을 통한 설치

  • Performance Reports -> Install Helper

2.3 설치 확인

  • git 로 설치한 예제임
    mysql> select * from sys.version;
    +-------------+---------------+
    | sys_version | mysql_version |
    +-------------+---------------+
    | 1.4.0       | 5.6.19-log    |
    +-------------+---------------+
    1 row in set (0.00 sec)


    mysql> select * from sys.schema_object_overview where db='sys';
    +-----+---------------+-------+
    | db  | object_type   | count |
    +-----+---------------+-------+
    | sys | FUNCTION      |    14 |
    | sys | PROCEDURE     |    22 |
    | sys | VIEW          |    81 |
    | sys | BASE TABLE    |     1 |
    | sys | INDEX (BTREE) |     1 |
    | sys | TRIGGER       |     2 |
    +-----+---------------+-------+
    6 rows in set (0.05 sec)

3. MySQL SYS schema 설명

3.1 MySQL sys views

  • DB운영시 참조할만한 뷰들이 들어있다.
  • sys 스키마의 뷰를 사용해서 커스터마이징한 뷰를 생성해서 사용할 수 있다.
  • 모두 performance_schema와 information_schema를 기반으로 한다.
  • formatted view와 raw view를 제공함
    • formatted views : 사람용, command line 용, 사람이 식별하기 쉬운 데이터로 되어있다. 예를들면 시간데이터들 raw views는 pico second로 되어있는데, formatted view에서는 ms, us로 보여줌
    • raw views : x$로 시작한다. tool용.
    mysql> select * from waits_global_by_latency limit 1;
    +------------------------------+-------+---------------+-------------+-------------+
    | events                       | total | total_latency | avg_latency | max_latency |
    +------------------------------+-------+---------------+-------------+-------------+
    | wait/io/file/sql/file_parser |  2077 | 623.59 ms     | 300.24 us   | 69.80 ms    |
    +------------------------------+-------+---------------+-------------+-------------+
    1 row in set (0.00 sec)

    mysql> select * from x$waits_global_by_latency limit 1;
    +------------------------------+-------+---------------+-------------+-------------+
    | events                       | total | total_latency | avg_latency | max_latency |
    +------------------------------+-------+---------------+-------------+-------------+
    | wait/io/file/sql/file_parser |  2077 |  623594918562 |   300238092 | 69796836648 |
    +------------------------------+-------+---------------+-------------+-------------+
    1 row in set (0.00 sec)

3.1.1 User/Host Summary views

  • user_summary_%, host_summary_% : user/host 정보를 보여주는 뷰
  • Breakdowns by : IO usage, Stages, Statement details
    mysql> select * from user_summaryG
    ...
    *************************** 2. row ***************************
       user: michaela
               statements: 2189
        statement_latency: 7.19 s
    statement_avg_latency: 3.28 ms
              table_scans: 1960
                 file_ios: 6803
          file_io_latency: 5.91 h
      current_connections: 4
        total_connections: 7
             unique_hosts: 1
    ...
  • user_summary : user가 실행한 statement 개수, latency, table_scans, file_ios, file_io_latency 등
  • user_summary_by_% : breakdown 조건에 따른 뷰들

3.1.2 IO Summary views

  • io_by_thread_by_latency : current threads의 IO정보
    • thread별 IO latency 정보, foreground process(processlist_id가 있는 것)뿐 아니라 background thread에 대한 정보도 포함됨.
  • io_global_by_% : file별 클래스별 Global 요약정보
  • latest_file_io : 마지막 file IO events에 대한 정보

3.1.3 Schema Analysis views

  • schema_object_overview : Object overview
  • schema_table_% : Table 사용 통계정보
    • schema_tables_with_full_table_scans : full table scan한 테이블들 확인할 수 있다. 스키마 변경, 인덱스 추가를 고려하는 경우 참조할수 있다.
  • schema_index_statistics, schema_unused_indexes : Index 사용 통계정보
    • schema_unused_indexes : drop index등의 스키마 변경을 고려하는 경우 unused indexes정보 확인할 수 있다. 반드시 어플리케이션 특성에 따라 인덱스 사용빈도 확인후 충분히 모니터링 하고 작업해야한다.

3.1.4 Wait Analysis views

  • wait_classes_% : event class별 wait summaries
  • waits_by_user%, waits_by_host% waits_global_% : user, host, global wait details

3.1.5 Statement Analysis views

  • statement_analysis : Statement overview
  • 튜닝업무시 참조할수 있다.
  • 다음 조건에 해당하는 statement를 찾을 수 있다.
    • statements_with_errors_or_warnings : 에러난 구문
    • statements_with_full_table_scans : full table scan한 구문
    • statements_with_temp_tables : temp table 만든 구문
    • statements_with_sorting : sorting 일으킨 구문
    • statements_with_runtimes_in_95th_percentile : 95%(상위 5%) latency 구문

3.1.6 기타 views

  • processlist : show processlist 및 추가정보 확인할수 있는 view
    • no mutex contention
    • 해당 쿼리의 현재 통계정보

3.2 Functions

  • format_path, format_statement : 식별가능한 포맷으로 변경하는 펑션
  • format_time : 적절한 time 포맷으로 바꾸는 펑션
  • format_bytes : 적절한 bytes 포맷으로 바꾸는 펑션
  • extract_%_from_file_name : object name 추출
  • ps_is_% : performace_schema의 측정도구인지 확인
  • ps_thread_id : 해당 connection_id의 performance_schema의 thread_id 반환
  • ps_thread_stack : thread stack dump내리는 펑션
  • sys_get_config

3.3 Procedures

3.3.1 Performance Schema Config Helper Procedures

  • ps_setup_%

3.3.2 Statement Tracing Procedures

  • ps_trace_thread : thread trace를 위해서 performace_schema 데이터 dump
    • 특정 기간동안의 특정 thread 모니터링
    • thread activity관련 가능한한 많은 정보를 캡처
    • graph를 그려주는 dot fommatted file을 return한다.
  • ps_trace_statement_digest : statement history table를 확인해서 statement digest상세정보 캡쳐
    • 현재 라이브 traffic 정보를 분석하여 특정 기간동안의 statement digest를 구한다.
    • 각각의 statement 통계정보를 캡처한다.