ホームページ  >  記事  >  データベース  >  MySQL を使用して SQL に時間のかかる問題を分析する

MySQL を使用して SQL に時間のかかる問題を分析する

一个新手
一个新手オリジナル
2017-09-09 14:03:472309ブラウズ


スローログクエリ

MySQLのスローログクエリは、MySQLの応答時間が閾値を超えたステートメントをスローログに記録します。 。 long_query_time のデフォルト時間は 10 です。これは、10 を超えるステートメントを実行することを意味します。

たとえば、SQL が 5 秒以上実行された場合、MySQL は 5 秒以上の SQL を記録し、包括的な分析を行うことができます。

デフォルトでは、MySQL データベースはスロークエリログを有効にしていないため、このパラメータを手動で設定する必要があります。もちろん、チューニングに必要でない場合は、ロギングが遅いとパフォーマンスにある程度の影響が出る可能性があるため、通常はこのパラメータを有効にすることはお勧めできません。

有効かどうか

#查看是否开启show variables like '%slow_query_log%';#开启set global slow_query_log = 1;

set global throw_query_log=1 を使用してスロー クエリ ログを有効にすると、現在のデータベースにのみ有効になり、MySQL が再起動されると無効になります。これを永続的に有効にしたい場合は、構成ファイル my.cnf を変更する必要があります。

低速クエリしきい値時間を設定した後、値の変更が表示されない場合があります。つまり、変更された値を確認するには、再接続するか、新しいセッションを開く必要があることに注意してください。

show variables like '%long_query_time%'

または、接続を再度開かずに次のコマンドを使用することもできます:

show variables like '%long_query_time%'

どの SQL がログに記録されるかは、long_query_time によって制御されます。デフォルトでは、long_query_time の値は 10 秒です。時間はlong_query_timeと正確に等しい場合、記録されません。つまり、mysqlではlong_query_time以上ではなく、より大きいと判断されます。

次のステートメントを使用してテストを実行できます

show variables like '%long_query_time%';

long_query_time を 3 秒に設定すると、このステートメントが記録されます。

遅いログの数を表示するMySQL を使用して SQL に時間のかかる問題を分析する

SELECT sleep(4)

ログ分析ツール mysqldumpslow

運用環境で手動でログを分析し、SQL を見つけて分析したい場合、MySql が提供するログ分析は明らかに面倒な作業です。 mysqldumpslow ツール。

例:

show global status like '%slow_queries%'
#得到返回记录集最多的10个SQL
Mysqldumpslow –s r –t 10 D:\Program Files\mysql\data\DESKTOP-VN2D5OU-slow.log#得到访问次数最多的10个SQL
Mysqldumpslow –s c –t 10 D:\Program Files\mysql\data\DESKTOP-VN2D5OU-slow.log#得到按照时间排序的前10条里面含有左连接的查询
Mysqldumpslow –s t –t 10 –g “left join” D:\Program Files\mysql\data\DESKTOP-VN2D5OU-slow.log#另外建议在使用这些命令时结合|和more使用,否则可能出现爆破情况
Mysqldumpslow –s r –t 10 D:\Program Files\mysql\data\DESKTOP-VN2D5OU-slow.log|more

SQL 分析には show profile を使用します

show profile コマンドは、現在のセッションでのステートメント実行のリソース消費を分析できます。 SQL に時間のかかるボトルネックを見つけるために使用されます。デフォルトではオフになっており、過去 15 回の実行結果が保存されます。

有効かどうかを確認します (「profiling」などの変数を表示します)

関数を有効にします (set profiling = on;)

有効にすると、その後の SQL の実行を記録できます。次に、show profiles を使用して結果を表示します:

コマンド (show profile cpu, block io for query 3;) を通じて特定の SQL ステートメントの実行をさらに分析します。たとえば、SQL No. 3 の状況を分析します。下に。 MySQL を使用して SQL に時間のかかる問題を分析する

Show profile の背後にあるいくつかのパラメータ: MySQL を使用して SQL に時間のかかる問題を分析する

All: すべてのオーバーヘッド情報を表示
  • Block io: ブロック IO 関連のオーバーヘッドを表示
  • コンテキスト スイッチ: コンテキスト スイッチング関連のオーバーヘッド
  • CPU: CPU関連のオーバーヘッドを表示します
  • Memory: メモリ関連のオーバーヘッドを表示します
  • Source: source_function、source_file、source_lineに関連するオーバーヘッド情報を表示します
  • グローバルクエリログ
(運用環境では決してオンにしないでください) 、実行されたすべての SQL ステートメントを表示)

Set コマンド:

参数含义
s: 表示按照何种方式排序
c:访问次数
l:锁定时间
r:返回记录
t:查询时间
al:平均锁定时间
t:返回前面多少条的数据
g:后面搭配一个正则表达式

その後、mysql によって実行された SQL ステートメントは mysql.genearl_log テーブルに記録され、次のコマンドで表示できます:

set global general_log = 1;#以表的形式输出set global log_output = ‘TABLE’

構成ファイルで次のように設定します:

select * from mysql.general_log;

以上がMySQL を使用して SQL に時間のかかる問題を分析するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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