mysqlメソッドまたはストレージ・プロシージャの実行が遅いデバッグ・メソッド


ステップ1:/etc/myを変更する.cnfファイル、[mysqld]の中に参加することを探し当てます
#   sql
log=/tmp/logs/mysqld.log 
#  sql           sql
log-slow-queries = /tmp/mysqlslowquery.log
#        1 
long_query_time = 1 

その後、tail-f/tmp/logs/mysqldができます.logは実行するすべてのsqlを監視し、同じ方法でmysqlslowqueryを監視することができる.logは実行時間がlong_を超えるquery_time=1(秒)のsql文
例えば、最初のステップでmysqlカスタム関数を見つけて遅いfuncを実行します.getDevice(); 15 sを実行しましたが、この方法の中でどのsqlが性能に影響を及ぼしているのか分かりません.それでは、2番目のステップがあります.
ステップ2:mysqlコマンドラインに入り、入力
mysql> set profiling=1;
mysql> select func_getDevice(1);
mysql> show profiles;
+----------+------------+-----------------------+
| Query_ID | Duration   | Query                 |
+----------+------------+-----------------------+
|        1 | 0.00250400 | select * from TDevice |
+----------+------------+-----------------------+
1 row in set (0.00 sec)

詳細なsql実行リストが表示されますが、デフォルトでは15個のsqlしか記録されていません.メソッドのsqlが多い場合は、設定できます.
mysql> set profiling_history_size=20;
mysql> show variables like 'profiling%';
+------------------------+-------+
| Variable_name          | Value |
+------------------------+-------+
| profiling              | ON    |
| profiling_history_size | 15    |
+------------------------+-------+
2 rows in set (0.00 sec)
mysql> select func_getDevice(1);
mysql> show profiles;
 
   
  
 这是时候就可以准确的看到是那一条sql语句影响了性能,比如 Query_ID=1  select * from TDevice 影响了性能; 
   
   
  
mysql> show profile for query 1;        sql     
+--------------------------------+----------+
| Status                         | Duration |
+--------------------------------+----------+
| (initialization)               | 0.000003 | 
| checking query cache for query | 0.000042 | 
| Opening tables                 | 0.00001 | 
| System lock                    | 0.000004 | 
| Table lock                     | 0.000025 | 
| init                           | 0.000009 | 
| optimizing                     | 0.000003 | 

通過することもできます
mysql> EXPLAIN select * from TDevice;
+----+-------------+---------+------+---------------+------+---------+------+------+-------+
| id | select_type | table   | type | possible_keys | key  | key_len | ref  | rows | Extra |
+----+-------------+---------+------+---------------+------+---------+------+------+-------+
|  1 | SIMPLE      | TDevice | ALL  | NULL          | NULL | NULL    | NULL |   70 |       |
+----+-------------+---------+------+---------------+------+---------+------+------+-------+
1 row in set (0.00 sec)

テーブルのインデックスなどが適切かどうかを確認し、的確な最適化により効率を向上させます.