0

私は本番マシンで次の設定をしています:
Mysql server 5.5.19
アクティブな (ps 行をチェックした) my.cnf には以下が含まれます:

slow_query_log
slow_query_log_file =/opt/app/mysql/log/mysqld-slow.log
long_query_time     = 1
general_log         = OFF
general_log_file    =/opt/app/mysql/log/mysqld.log
log-queries-not-using-indexes

mysql> 「log%」のような変数を表示; --> 「log_queries_not_using_indexes=ON」と「log_slow_queries=ON」が表示されます

ファイル /opt/app/mysql/log/mysqld-slow.log が存在し、mysql に属し、長さがゼロです。

問題は、テスト マシンで、log-queries-not-using-indexes オプションが原因で、遅いクエリ ログが急速にいっぱいになることです。とにかく必要だったので、無効にしました。今、私たちは実稼働データベースを稼働させ、同じことが起こらないことを確認したかったので、同じセットアップを見つけましたが、ログは空です. mysqld を再起動して遊んでいるわけにはいきません。ログが空である理由を理解したいだけですが、構成は多くのクエリをログに記録する必要があることを示しているようです。実行中の一般的なアプリケーションは、運用サーバーとテスト サーバーで同じであるため、実際にインデックスが作成されていないクエリが発生しない可能性はほとんどありません。

問題は、何もログに記録されていない理由を確認するために、他にどのような構成を確認できるかということです。ログに記録したくありません。何らかの理由でdbサーバーが再起動された場合に、突然ログが開始されないようにしたいだけです。my.cnf からオプションを削除するだけでそれを達成できることはわかっていますが、現在ログに記録されていない理由も理解したいと思います。

ありがとう、イーサン

4

2 に答える 2

3

実行時間が 1 秒を超えるクエリがない可能性があります。

のようなクエリを実行できるSELECT SLEEP(10)ため、確実に長くなり、long_query_timeログに記録されます。

クエリがファイルに書き込まれている可能性もありますが、古いログ ファイルを rm しました。そのため、サーバーは関連付けが解除されたファイル記述子にまだ書き込みを行っています。で確認できますlsof

mysqld の再起動を必要とせずに、サーバーを強制的に閉じてログ ファイルを再度開くことができます。これにより、関連付けが解除されたファイルが破棄されます。これは、次の 2 つの方法のいずれかで実行できます。FLUSH LOGSまたは、グローバル変数slow_query_log=0を設定してからslow_query_log=1.

于 2014-09-24T18:26:34.020 に答える
1

MySQL バージョン 5.0 では、ロギング容量に大きな変更がいくつか見られました。

ロギングはlog-output変数によって制御されます。NONE全体的にログに記録されないことを意味することに注意してください。この変数の値は、次のように確認できます。

mysql> SHOW VARIABLES LIKE "log_output";

あなたの場合、ファイルへのログを遅くしたいので、次のようにするかもしれません:

mysql> SET GLOBAL log_output=FILE;
mysql> SET GLOBAL slow_query_log=ON;
于 2012-07-17T20:16:28.893 に答える