LoginSignup
3
4

More than 5 years have passed since last update.

MYSQLの遅いクエリ(スロークエリ)を探る

Posted at

mysqlの負荷対策を勉強している。

ある人はこうおっしゃってた。
「サーバーをどれだけ増やそうが、クエリやプログラムの組み方が雑だと無意味だ」
と。

負荷の高いクエリを探り、修正していく

centosにログイン。

vim /etc/my.cnf を設定

[mysqld]
#sloqqueryログをオンに
slow_query_log = ON//クエリを取得
long_query_time = 10//10秒以上かかるクエリを保存
log_output = TABLE//MYSQLにテーブルとして保存

MYSQL 再起動。

systemctl restart mysqld

すると、mysql DB の slow_log テーブルにどんどん記録されていく。

MYSQLの負荷が高くなった場合の対応

高負荷は 9 割方 DB 操作に起因
クエリ数の削減
クエリの見直し
インデックスの見直し
ロック範囲の見直し
デッドロック時はリトライ
やむを得ず重いクエリを流すならキャッシュする

安いサーバーを増やすのか高いサーバーを増やすのか

月額10万円のサーバー8台で運用していたのが、
20万円のサーバーだと3台で運用できるなんてこともある。

DB分割すると面倒なことも多い

単一DB
・DBからテーブルをSELECTするだけ

DB分割後
・グローバルDBからSELECT
・対象ユーザーIDのデータがあるDBからSELECT
・複数のユーザーDBからSELECT

3
4
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
3
4