第三章、サーバー性能分析

5900 ワード

前言
アイテム
バージョン番号
説明
Mysql
5.6.37 MySQL Community Server (GPL)
5.0以降
このシリーズで演じたmysqlバージョンの情報は以下の通りです.
アイテム
バージョン番号
説明
Mysql
5.6.37 MySQL Community Server (GPL)
5.0以降
3.1、性能最適化の概要
タスク時間=実行時間+待機時間ですので、最適化は2つの部分最適化に分けられます
  • 実行時間最適化:サブタスクの最適化、サブタスク実行頻度の低減、またはサブタスク効率の向上
  • 待ち時間最適化:この部分の消費の多くはIOという
  • にある.
    3.2、性能分析
  • 最適化に値するクエリー:
  • Amdahlの法則によると、総応答時間に占める割合の小さいクエリーは最適化に値しない.総クエリー時間に占める割合が5%未満のクエリーをどのように最適化するか、収益は5%を超えない.
  • 最適化コストは収益より大きいはずです.

  • 異常:一部の実行回数は少ないが、ユーザー体験に深刻な影響を及ぼすため、最適化が必要である.
  • で隠されている詳細は、平均値に過度に依存しないでください.あるクエリが平均値よりずっと高い場合も重視する必要があります.
  • パフォーマンスプロファイル自体がサーバを遅くします.
    3.3、性能分析ツール及び方法
  • Profiler:MySQL独自のパフォーマンス分析ツール
  • 3.3.1、profileが有効になっているかどうかを確認し、デフォルトでは閉じています.
  • mysql> show profile;
    Empty set, 1 warning (0.00 sec)
    
    mysql> select @@profiling;
    +-------------+
    | @@profiling |
    +-------------+
    |           0 |
    +-------------+
    1 row in set, 1 warning (0.00 sec)
    
    
  • 3.3.2、profilingを有効にし、ユーザー変数、役割ドメインは接続ごとです.
  • mysql> set profiling=1;
    Query OK, 0 rows affected, 1 warning (0.00 sec)
    
    mysql> select @@profiling;
    +-------------+
    | @@profiling |
    +-------------+
    |           1 |
    +-------------+
    1 row in set, 1 warning (0.00 sec)
    
    
  • 3.3.3、show profileを使用して、最近のsqlの実行情報をクエリーします.
  • mysql> show profile;
    +----------------------+----------+
    | Status               | Duration |
    +----------------------+----------+
    | starting             | 0.000055 |
    | checking permissions | 0.000005 |
    | Opening tables       | 0.000007 |
    | init                 | 0.000011 |
    | optimizing           | 0.000007 |
    | executing            | 0.000010 |
    | end                  | 0.000004 |
    | query end            | 0.000003 |
    | closing tables       | 0.000003 |
    | freeing items        | 0.000007 |
    | cleaning up          | 0.000011 |
    +----------------------+----------+
    11 rows in set, 1 warning (0.00 sec)
    
    
  • 3.3.4、show profilesを使用して、クエリーサーバ上で文リスト(クエリーid、時間、文)を実行します.
  • 
    mysql> show profiles;
    +----------+------------+--------------------------------+
    | Query_ID | Duration   | Query                          |
    +----------+------------+--------------------------------+
    |        1 | 0.00096650 | select * from city             |
    |        2 | 0.00034450 | show tables                    |
    |        3 | 0.00026525 | select * from actor limit 1,15 |
    +----------+------------+--------------------------------+
    3 rows in set, 1 warning (0.00 sec)
    
    
  • 3.3.5、 show profile for query Query_ID ; クエリーはsqlの実行情報を知っています.

  • スロークエリーログ(slow query log)
    遅いクエリー・ログは、比較的一般的なクエリー・スキーマです.
    long_query_time     :          ,       SQL          ,    10s  
    slow_query_log      :               
    log_slow_queries    :             (     slow_query_log  ,      )  
    slow_query_log_file :             ,    ,           host_name-slow.log  
    min_examined_row_limit:               SQL            
    log_queries_not_using_indexes:                     
    
    
  • 現在のバージョン
  • を問い合わせる
    mysql> show variables like 'version'; 
    +---------------+--------+
    | Variable_name | Value  |
    +---------------+--------+
    | version       | 5.6.37 |
    +---------------+--------+
    1 row in set (0.00 sec)
    
    
  • スロークエリログに関する情報をクエリ
  • mysql> show variables like '%slow%'; 
    +---------------------------+-------------------------------------------------+
    | Variable_name             | Value                                           |
    +---------------------------+-------------------------------------------------+
    | log_slow_admin_statements | OFF                                             |
    | log_slow_slave_statements | OFF                                             |
    | slow_launch_time          | 2                                               |
    | slow_query_log            | OFF                                             |
    | slow_query_log_file       | /var/lib/mysql/izt4nb1qclhh1mccy6zrbcz-slow.log |
    +---------------------------+-------------------------------------------------+
    
    
  • スロークエリーログ
  • を設定する
    mysql> set global long_query_time=0;  
    Query OK, 0 rows affected (0.00 sec)
    
    mysql>  set session long_query_time=0;  
    Query OK, 0 rows affected (0.00 sec)
    

    グローバルセッションレベルを設定し、遅いクエリー・ログを表示します.
    vim /var/lib/mysql/izt4nb1qclhh1mccy6zrbcz-slow.log
    

    义齿
    mysql> explain select * from city;
    +----+-------------+-------+------+---------------+------+---------+------+------+-------+
    | id | select_type | table | type | possible_keys | key  | key_len | ref  | rows | Extra |
    +----+-------------+-------+------+---------------+------+---------+------+------+-------+
    |  1 | SIMPLE      | city  | ALL  | NULL          | NULL | NULL    | NULL |  600 | NULL  |
    +----+-------------+-------+------+---------------+------+---------+------+------+-------+
    1 row in set (0.00 sec)
    

    2つのsqlが実行する情報が異なることが下図に示されています.
    mysql> explain select * from city where city_id =1;
    +----+-------------+-------+-------+---------------+---------+---------+-------+------+-------+
    | id | select_type | table | type  | possible_keys | key     | key_len | ref   | rows | Extra |
    +----+-------------+-------+-------+---------------+---------+---------+-------+------+-------+
    |  1 | SIMPLE      | city  | const | PRIMARY       | PRIMARY | 2       | const |    1 | NULL  |
    +----+-------------+-------+-------+---------------+---------+---------+-------+------+-------+
    1 row in set (0.00 sec)
    

    ここではまずこれらの機能を記録し、次はSchemaとデータ型の最適化を開始します
    『高性能MySQL読書ノート』
    準備編-mysqlインストール準備編-Sakilaデータベース第1章、MySQLアーキテクチャおよび履歴第2章、MySQLベンチマークテスト第3章、サーバ性能分析