ホームページ >データベース >mysql チュートリアル >mysql ストアド プロシージャが遅すぎる場合はどうすればよいですか?

mysql ストアド プロシージャが遅すぎる場合はどうすればよいですか?

王林
王林オリジナル
2020-09-27 14:48:323571ブラウズ

mysql ストアド プロシージャが遅すぎる問題の解決策: まず my.cnf 設定ファイルを開き、次に設定 [long_query_time=1] を追加し、次に [tail -f /tmp/logs] を通じて SQL を監視します。 /mysqld.log] コマンド ; 最後に、ターゲットを絞った最適化を実行できます。

mysql ストアド プロシージャが遅すぎる場合はどうすればよいですか?

解決策:

(推奨チュートリアル: mysql ビデオ チュートリアル)

最初のステップ : 変更/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秒かかりましたが、この方法を知りません どの 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 レコードのみが記録されます。メソッドをさらに設定すると、

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;

を設定できます。このとき、Query_ID=1 select * from TDevice がパフォーマンスに影響するなど、どの SQL ステートメントがパフォーマンスに影響するかを正確に確認できます。

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 |

Checkテーブルのインデックスが合理的かどうか、ターゲットを絞った最適化によって効率が向上するかどうか。

関連する推奨事項: php トレーニング

以上がmysql ストアド プロシージャが遅すぎる場合はどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。