share facebook facebook twitter menu hatena pocket slack

2012.01.06 FRI

MySQLパフォーマンスチューニング Vol.1

櫛田 草平

WRITTEN BY 櫛田 草平

こんにちは。
職人見習いの高嶋です。

データベースを利用したインターネットコンテンツは、不特定多数のユーザが利用するため、しっかりとしたテーブル設計やインデックス設定を行い、正しいSQL文を書かないといけません。

それでもやはり処理が遅いSQL文が存在してしまい、ユーザーがそのSQLを立て続けに実行するとサーバ負荷が上がり、サーバがダウンしてしまう事があります。

今回は、MySQLを用いている場合に、処理の遅いSQL文の見つけ方を備忘として記載します。

/etc/my.cnfに下記の設定を記述します。

log-slow-queries          SlowLogの有効化(ログファイル名を指定可能)
long-query-time=1         SlowLogに記録する処理時間の上限
log-long-format          インデックスを使用しなかったSQL文も記録する

これにより、log-slow-queriesで指定したファイルにlong_query_timeで指定した秒数以上かかるSQL文がログとして記載されます。

一般的にlong_query_timeに指定すべき秒数は、アクセスの多いコンテンツであれば1秒以上かかる処理がある時点で注意が必要なので、long_query_time=1とするのが良いと思います。

因みに、現状利用しているMySQLサーバがSlowLogがONになっているかを調べるには、下記のように入力して「log_slow_queries」がONになっているか確認します。

mysql> show variables like 'log%';

SlowLogの出力フォーマットは以下の通りになります。

# Time: 040624  1:25:24 
# User@Host: [ODBC] @ localhost [127.0.0.1]
# Query_time: 5  Lock_time: 0  Rows_sent: 30670  Rows_examined: 38828
select * from city ,country ,language where country.code=city.country and city.country=language.country;

1行目 記録日時
2行目 ユーザーIDとリクエストした端末
3行目 Query_time(実行時間) Lock_time(ロック時間) Rows_sent(送信行数) Rows_examined(処理対象となった行数)
4行目 SQL文

※この記事は、なかの人(piro556)が書いています。

櫛田 草平

櫛田 草平

cloudpackで運用、保守、構築、夜間対応を担当しており、日々様々な課題に対応していますのでこの経験を記事にしていけたらと思います。 櫛田 草平

cloudpack

cloudpackは、Amazon EC2やAmazon S3をはじめとするAWSの各種プロダクトを利用する際の、導入・設計から運用保守を含んだフルマネージドのサービスを提供し、バックアップや24時間365日の監視/障害対応、技術的な問い合わせに対するサポートなどを行っております。
AWS上のインフラ構築およびAWSを活用したシステム開発など、案件のご相談はcloudpack.jpよりご連絡ください。