主に仕事に関するブログ

システム開発/IT講師での出来事など

MySQLのチューニングポイント

PHPカンファレンス2017〕のMySQLのセッションを聴講して

PHPカンファレンス2017〕のMySQLのセッションを聴講して、非常にためになったが、
すぐに忘れてしまうので、要点をメモ。
MySQLの手短に行うチューニングのポイントは、以下の4つとのこと。

  1. スローログをみれるようにする。

    • 以下のように設定するとスローログが出力されるようになる。

      name default recommend
      slow_query_log 0(off) 1(on)
      long_query_time 10 0.2(まあ、都合のように0.2~0.5)
      log_output FILE FILE

    スローログを見て、特定のクエリが、遅い場合は、そのクエリをチューニングすればよいことになるが、
    以下を考慮する。

    • Rows_examined/Rows_sentが小さいこと(31くらい)
      • Rows_examined・・・クエリーがスキャンした行数
      • Rows_sent・・・クエリがアプリに返す結果セットの行数(更新系は0となる)
  2. バッファープールについて理解する

    • ここはなんとなくわかるので割愛。
    • ただ、留意点として、次項のインデックスをきれいに使うと、バッファープールも小さくなる。
  3. インデックスについて

    • 基本的には
      where column1 = value1 and column2 = value2 order by column3 のように =とandしか使用していないときは、 column1、column2、column3にインデックスをはればよいらしいが、joinは、大変になる。
  4. 劇薬に手を出さない

    以下のような設定などは、早くなるが、復旧できなくなる可能背があるので、行わないようにする。

    • skip_innodb_doublewrite
    • innodb_flush_log_at_try_commit <> 1
    • sync_binlog <> 1
    • パラメータ名にunsafeと入っているやつ
    • MyISAMストレージエンジン
  5. 補足

    自分でよく分からなかったことを以下に調べた。

    • バイナリログとログファイルの違い

      ログ 説明
      バイナリログ MySQL上の変更をすべて記録したログ。Oracleアーカイブに相当するように思う。
      ログファイル(REDOログ) これは、MyISAMにはなく、InnoDBに存在する。トランザクションのためのログと考えられる。OracleREDOログに該当すると考えられる。