1
Help us understand the problem. What are the problem?

More than 1 year has passed since last update.

posted at

updated at

Organization

MySQLスロークエリについて

今日は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
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
1
Help us understand the problem. What are the problem?