mysqlメソッドまたはストレージ・プロシージャの実行が遅いデバッグ・メソッド
2638 ワード
ステップ1:/etc/myを変更する.cnfファイル、[mysqld]の中に参加することを探し当てます
その後、tail-f/tmp/logs/mysqldができます.logは実行するすべてのsqlを監視し、同じ方法でmysqlslowqueryを監視することができる.logは実行時間がlong_を超えるquery_time=1(秒)のsql文
例えば、最初のステップでmysqlカスタム関数を見つけて遅いfuncを実行します.getDevice(); 15 sを実行しましたが、この方法の中でどのsqlが性能に影響を及ぼしているのか分かりません.それでは、2番目のステップがあります.
ステップ2:mysqlコマンドラインに入り、入力
詳細なsql実行リストが表示されますが、デフォルトでは15個のsqlしか記録されていません.メソッドのsqlが多い場合は、設定できます.
# 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)
テーブルのインデックスなどが適切かどうかを確認し、的確な最適化により効率を向上させます.