ホームページ  >  記事  >  データベース  >  下位 SQL を最適化して配置する 2 つの方法の詳細な説明

下位 SQL を最適化して配置する 2 つの方法の詳細な説明

伊谢尔伦
伊谢尔伦オリジナル
2017-06-28 14:03:411291ブラウズ

slowqueriesログを通じて、実行効率の低い SQL ステートメントを見つけます。 --log-slow-queries[=file_name] オプションを指定して起動すると、mysqld は、実行時間が long_query_time 秒を超えるすべての SQL ステートメントを含むログ ファイルを書き込みます。 , このログ ファイルを参照して、実行効率の低い SQL ステートメントを見つけます

mysql の効率の最適化については、一般的に次の 2 つの方法で実行効率の低い SQL ステートメントを見つけます。

--log-slow-queries[=file_name] オプションを使用して開始すると、mysqld は実行時間が long_query_time 秒を超えるすべての SQL ステートメントを含むログ ファイルを書き込みます。このログ ファイルを参照すると、効率的な SQL を実行できます。

スロー クエリ ログはクエリの完了後に記録されるため、アプリケーションが実行効率の問題を反映している場合、show processlist コマンドを使用して進行中の現在の MySQL スレッドを表示できます。スレッドのステータスやテーブルをロックしているかどうかなど、SQL の実行をリアルタイムで表示し、一部のロック テーブル操作を最適化できます。

スロー クエリ ログを通じて実行効率の低い SQL ステートメントを見つける方法を示す例を以下に示します:

スロー クエリ ログを有効にする、設定例:

log-slow-queries

in my.cnf configurationファイルに上記の設定項目を追加し、mysqlサービスを再起動すると、mysqlのスロークエリ機能が有効になります。スロー クエリ ログは、パラメータ DATADIR (データ ディレクトリ) で指定されたパスに書き込まれます。デフォルトのファイル名は host_name-slow.log です。

エラー ログやクエリ ログと同様、スロー クエリ ログ レコードの形式もプレーン テキストであり、直接読み取ることができます。次の例は、スロー クエリ ログの設定と読み取りのプロセスを示しています。

(1) まず、long_query_time の値をクエリします。

mysql> show variables like 'long%';
+-----------------+-------+
| Variable_name | Value |
+-----------------+-------+
| long_query_time | 10 |
+-----------------+-------+
1 row in set (0.00 sec)

(2) テストを容易にするために、低速クエリ時間が 5 秒に変更されます。

mysql> set long_query_time=5;
Query OK、影響を受ける行は 0 (0.02 秒)

(3) 次の 2 つのクエリ ステートメントを順番に実行します。

クエリ時間が 5 秒未満であるため、最初のクエリはスロー クエリ ログに表示されません:

mysql> select count(*) from order2008;
+----------+
| count(*) |
+----------+
| 208 |
+----------+
1 row in set (0.00 sec)

クエリ時間が 5 秒を超えているため、2 番目のクエリはスロー クエリ ログに表示されるはずです:

mysql> select count(*) from t_user;
+----------+
| count(*) |
+----------+
| 6552961 |
+----------+
1 row in set (11.07 sec)

( 4) スロークエリログを確認します。

[root@localhost mysql]# more localhost-slow.log
# Time: 081026 19:46:34
# User@Host: root[root] @ localhost []
# Query_time: 11 Lock_time: 0 Rows_sent: 1 Rows_examined: 6552961
select count(*) from t_user;

上記のログから、クエリ時間が 5 秒を超える SQL を見つけることができますが、クエリ時間が 5 秒未満の SQL はこのログには表示されません。
スロー クエリ ログに多数のレコードがある場合は、mysqldumpslow ツール (MySQL クライアント インストール に含まれています) を使用して、スロー クエリ ログを分類して要約することができます。次の例では、ログ ファイル mysql_master-slow.log が分類および要約され、要約された summary 結果のみが表示されます。

[root@mysql_master mysql_data]# mysqldumpslow mysql_master-slow.log
Reading mysql slow query log from mysql_master-slow.log
Count: 2 Time=11.00s (22s) Lock=0.00s (0s) Rows=1.0 (2), root[root]@mysql_master
select count(N) from t_user;

SQL テキストは完全に同じですが、変数ステートメントが異なるため、mysqldumpslow は自動的に同じステートメントとみなされ統計が実行され、変数の値が N に置き換えられます。この統計結果により、ユーザーが遅いクエリ ログを読み取る効率が大幅に向上し、システムの SQL ボトルネックを迅速に特定できます。

注: 低速クエリ ログは、アプリケーションでパフォーマンス上の問題がある SQL を見つけるのに非常に役立ちます。通常の状況では、このログを開いて分析を頻繁に確認することをお勧めします。

以上が下位 SQL を最適化して配置する 2 つの方法の詳細な説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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