0. 環境

[OS] CentOS 6.10

[MySQL] 5.1

1. 前提

  • MySQLシステム変数は、SESSIONとGLOBALがあるので注意。

    • 有効範囲はそれぞれ「SESSIONは接続ごと」「GLOBALはMySQL起動中」というふうに異なります。

    • GLOBALスコープで設定した値は、MySQL再起動で消失します。(これを防ぎたい場合、mysql.cnfに直接記載)

      • MySQL8からは、SET PERSIST .. とすることで消失を防げる。

2. 接続

  • MySQLに接続。mysql -u root -p

3. コマンド (SESSIONスコープ)

  • 下記は、SHOW SESSION VARIABLES ..と書いたのと同義。

  • 現在の値

    -- SlowQueryを出力するか?
    SHOW VARIABLES LIKE 'slow_query_log';
    -- 何秒を超えたらSlowQueryとして出力するか?
    SHOW VARIABLES LIKE 'long_query_time';
    -- SlowQuery出力先のファイル名
    SHOW VARIABLES LIKE 'slow_query_log_file';
    
  • 更新

    SET long_query_time = 3;
    

    (注)slow_query_logslow_query_log_fileはGLOBALスコープでのみ変更可能。

4. コマンド (GLOBALスコープ)

  • 現在の値

    -- SlowQueryを出力するか?
    SHOW GLOBAL VARIABLES LIKE 'slow_query_log';
    -- 何秒を超えたらSlowQueryとして出力するか?
    SHOW GLOBAL VARIABLES LIKE 'long_query_time';
    -- SlowQuery出力先のファイル名
    SHOW GLOBAL VARIABLES LIKE 'slow_query_log_file';
    
  • 更新

    SET GLOBAL slow_query_log = 'ON';
    SET GLOBAL long_query_time = 3;
    SET GLOBAL slow_query_log_file = '/var/tmp.log';
    

    (注)slow_query_logslow_query_log_fileはGLOBALスコープのみに存在する変数のため、上記を実行するとすぐにSESSIONスコープにも反映されます。

5. 確認用SQL

  • 下記SQLを実行してSlowQueryLogに出力されるか確認して下さい。

    SELECT SLEEP(4);