web-dev-qa-db-ja.com

MySQLスローログは、スロークエリだけでなくすべてのクエリをログに記録します

遅いクエリをログに記録するための次のMySQL構成があります。

    [mysqld]
    ### Logging options
    general_log_file = /data/mysql-log/mysql_general.log
    log-error = /data/mysql-log/mysql_error.log
    slow_query_log_file = /data/mysql-log/mysql_slow.log
    log-warnings = 1
    log-queries-not-using-indexes = ON
    log-slow-verbosity = full
    long_query_time = 2
    log-slow-admin-statements = 1
    log-slow-slave-statements = 1
    general-log = OFF
    slow-query-log = ON

ただし、遅いログファイルに次のように表示されます。1]

私の知る限りでは、ログファイルのQuery_timeは、クエリの実行にかかった時間を示しますが、構成ファイルに記載されているログ時間は延期されます。

なぜこれが起こっているのかについて説明するのを手伝ってくれる人はいますか?

3
sameergautam

たぶん、あなたのmysqldは別のソースからそれをlong_query_time値を得ました。実行するとどうなりますか:

select @@long_query_time;

特にInnodbデータベースでは、long_query_timeを0に設定することをお勧めします。クエリAが1秒で1日に1000回実行されるのに対し、クエリBは20秒で1日1回実行される場合を考えてください。クエリAを調整することで、より多くのメリットが得られます。

4
symcbean

log-queries-not-using-indexes = ON

テーブルに便利なインデックスがないことをお勧めします。

私の意見では、その特定の設定は無意味です。

「調べた行」が「返された行」よりもはるかに大きいことに注目してください。テーブルを確認してください。「調べた行数」はおそらくテーブルにある行数です。

プレゼントしますかEXPLAIN SELECT ...およびSHOW CREATE TABLEインデックスについて話し合うことができます。または、 Index Cookbook を読むことができます。

インデックスをいくつか追加したら、その設定をオフにしてlong_query_timeから1。

1
Rick James