MySQLチューニング(一)性能監視


文書ディレクトリ
  • 前言
  • 1 SHOW PROFILE & SHOW PROFILES
  • 2 Performance Schema
  • 3 SHOW PROCESSLIST

  • 前言
    モニタリングなし、チューニングしない.MySQLチューニング、JVMチューニング、または他のチューニングは、モニタリングから開始されます.
    1 SHOW PROFILE & SHOW PROFILES
     MySQLでは、現在のセッションSQL文の実行時のリソース使用状況を表示するためのSHOW PROFILE StatementとSHOW PROFILE Statementの2つのツールが用意されています.このツールのデフォルトは無効です.変数profilingを1またはONに設定することで、次のことができます.
    mysql> SET profiling =1;
    Query OK, 0 rows affected, 1 warning (0.04 sec)
    

    SHOW PROFILESサーバに送信された最新の文のリストが表示されます.
    mysql> show profiles;
    +----------+------------+----------------------------------+
    | Query_ID | Duration   | Query                            |
    +----------+------------+----------------------------------+
    |        1 | 0.00103750 | show databases                   |
    |        2 | 0.00016900 | SELECT DATABASE()                |
    |        3 | 0.00394775 | show tables                      |
    |        4 | 0.31151200 | select * from employees limit 10 |
    |        5 | 1.97315000 | select count(*) from titles      |
    |        6 | 7.55538075 | select max(1) from salaries      |
    |        7 | 0.00248975 | select * from salaries limit 1   |
    |        8 | 1.50824900 | select max(salary) from salaries |
    +----------+------------+----------------------------------+
    8 rows in set, 1 warning (0.00 sec)
    

    SHOW PROFILEは、単一のSQL文の詳細を表示します.構文は次のとおりです.
    SHOW PROFILE [type [, type] ... ]
        [FOR QUERY n]
        [LIMIT row_count [OFFSET offset]]
        
    type: {
        ALL:         
      | BLOCK IO:   I/O     
      | CONTEXT SWITCHES:          
      | CPU:     CPU  、  CPU  
      | IPC:             
      | MEMORY
      | PAGE FAULTS:        
      | SOURCE:              
      | SWAPS:   swap   
    }
    

    例えば、第8条SQLのI/O操作回数及びCPU使用時間を問い合わせる:
    mysql> show profile BLOCK IO, CPU for query 8;
    +----------------------+----------+----------+------------+--------------+---------------+
    | Status               | Duration | CPU_user | CPU_system | Block_ops_in | Block_ops_out |
    +----------------------+----------+----------+------------+--------------+---------------+
    | starting             | 0.000068 | 0.000000 |   0.000000 |         NULL |          NULL |
    | checking permissions | 0.000009 | 0.000000 |   0.000000 |         NULL |          NULL |
    | Opening tables       | 0.000022 | 0.000000 |   0.000000 |         NULL |          NULL |
    | init                 | 0.000039 | 0.000000 |   0.000000 |         NULL |          NULL |
    | System lock          | 0.000010 | 0.000000 |   0.000000 |         NULL |          NULL |
    | optimizing           | 0.000013 | 0.000000 |   0.000000 |         NULL |          NULL |
    | statistics           | 0.000029 | 0.000000 |   0.000000 |         NULL |          NULL |
    | preparing            | 0.000018 | 0.000000 |   0.000000 |         NULL |          NULL |
    | executing            | 0.000003 | 0.000000 |   0.000000 |         NULL |          NULL |
    | Sending data         | 1.507877 | 1.484375 |   0.000000 |         NULL |          NULL |
    | end                  | 0.000013 | 0.000000 |   0.000000 |         NULL |          NULL |
    | query end            | 0.000013 | 0.000000 |   0.000000 |         NULL |          NULL |
    | closing tables       | 0.000013 | 0.000000 |   0.000000 |         NULL |          NULL |
    | freeing items        | 0.000092 | 0.000000 |   0.000000 |         NULL |          NULL |
    | cleaning up          | 0.000031 | 0.000000 |   0.000000 |         NULL |          NULL |
    +----------------------+----------+----------+------------+--------------+---------------+
    15 rows in set, 1 warning (0.00 sec)
    

    2 Performance Schema
    MySQLの公式ドキュメントでは、SHOW PROFILEとSHOW PROFILEが廃止され、以降のバージョンで削除されることがわかります.代わりにPerformance Schemaを使用することができます.MySQLのPERFORMANCE SCHEMAは、MySQL Serverの低レベルの実行中のリソース消費、リソース待機などを監視するために使用されます.
    3 SHOW PROCESSLIST
      SHOW PROSCESSLISTを使用して、接続されているスレッドの数を確認し、多くのスレッドが異常な状態にあるか、または他の異常な特徴があるかどうかを確認します.
    mysql> show processlist;
    +----+------+-----------------+--------------------+---------+------+----------+------------------+
    | Id | User | Host            | db                 | Command | Time | State    | Info             |
    +----+------+-----------------+--------------------+---------+------+----------+------------------+
    |  9 | root | localhost:55938 | performance_schema | Query   |    0 | starting | show processlist |
    | 10 | root | localhost:60287 | NULL               | Sleep   |    5 |          | NULL             |
    +----+------+-----------------+--------------------+---------+------+----------+------------------+
    2 rows in set (0.00 sec)
    
  • Info:実行中のSQLを表します.
  • Command:現在のステータスを表し、ステータスは以下のとおりです.
  • Sleep:スレッドはクライアントが新しい要求を送信するのを待っています.
  • Query:スレッドがクエリーを実行しているか、クライアントに結果を送信しています.
  • Locked:mysqlのサービス層で、このスレッドはテーブルロックを待っています.
  • Sorting result:スレッドが結果セットをソートしています.
  • Sending data:スレッドは、複数のステータス間でデータを転送したり、結果セットを生成したり、クライアントにデータを返したりすることができます.

  • State:コマンド実行状態を示す