遅いクエリをログに記録するための次の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
ただし、遅いログファイルに次のように表示されます。
私の知る限りでは、ログファイルのQuery_timeは、クエリの実行にかかった時間を示しますが、構成ファイルに記載されているログ時間は延期されます。
なぜこれが起こっているのかについて説明するのを手伝ってくれる人はいますか?
たぶん、あなたのmysqldは別のソースからそれをlong_query_time値を得ました。実行するとどうなりますか:
select @@long_query_time;
特にInnodbデータベースでは、long_query_timeを0に設定することをお勧めします。クエリAが1秒で1日に1000回実行されるのに対し、クエリBは20秒で1日1回実行される場合を考えてください。クエリAを調整することで、より多くのメリットが得られます。
log-queries-not-using-indexes = ON
テーブルに便利なインデックスがないことをお勧めします。
私の意見では、その特定の設定は無意味です。
「調べた行」が「返された行」よりもはるかに大きいことに注目してください。テーブルを確認してください。「調べた行数」はおそらくテーブルにある行数です。
プレゼントしますかEXPLAIN SELECT ...
およびSHOW CREATE TABLE
インデックスについて話し合うことができます。または、 Index Cookbook を読むことができます。
インデックスをいくつか追加したら、その設定をオフにしてlong_query_time
から1。