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