LoginSignup
0
1

More than 3 years have passed since last update.

MySQLスロークエリについて

Last updated at Posted at 2019-05-12

今日はWebサーバにおけるDBのお話です。
WebサーバでLoadアベレージが上がる要因の一つにDBがあげられます。
これはWebアプリケーションサーバがDBに対してクエリを投げたときに、 DB側でのクエリ処理能力を上回り遅延するのが要因の一つになりうるのです。
遅延したクエリ、つまりはスロークエリを分析することにより、負荷上昇を防ぐためのチューニングや、
DBのスペックアップを検討するのに役立つのです。

DBでのクエリの確認手法

    MySQL
        show processlist;
        show full processlist\G
    PostgreSQL
        SELECT * FROM pg_stat_activity;

上記のコマンドをDB上(MySQL or PostgreSQL)で実行すると、
実行されているクエリが表示されるので、実行時間を確認してみれば
クエリの滞留があるかどうか判別できる。

他にもスロークエリログを出力させるさせる手法もある。

set global slow_query_log=1; // 0でOFF, 1でON

set global long_query_time=1; // スロークエリログとして出力する実行時間のしきい値(秒単位)

set global slow_query_log_file ='/usr/local/var/mysql/slow_query.log'; // スロークエリログの出力先

スロークエリ集計コマンド

ionice -c2 -n7 nice -n19 tail -n1000000 /usr/local/var/mysql/slow_query.log | awk '/^# Time/{ d=$3; t=$4; } (/^# Query/ && d){ c=$2; q=$3; print d,t,c,q; }' | cut -d : -f 1,2 | sort -n | uniq -c | less
ionice -c2 -n7 nice -n19 tail -n1000000 /usr/local/var/mysql/slow_query.log | grep timestamp | cut -d= -f2 | awk '{print strftime("%Y-%m-%d %H:%M",$1)}' | sort | uniq -c | less
0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1