同期ログ出力方式では、ワーカースレッドがログ内容のカプセル化とファイル書き込み操作を同時に担当します。これにより、プログラムのパフォーマンスに損失が生じるほか、一部のI/O例外によってログ書き込みがブロックされ、SQLのRTジッターが発生し、さらにはOceanBaseデータベースプロセスの状態異常を引き起こす可能性があります。OceanBaseデータベースでは、非同期ログ出力方式を導入しています。ワーカースレッドはログ内容のカプセル化のみを担当し、ファイル書き込み操作は専用のスレッドが担当するため、プログラムのパフォーマンスとシステムの安定性が向上します。クラスタ構成パラメータ enable_async_syslog を使用して、非同期ログ出力機能を有効にするかどうかを制御でき、デフォルトでは有効になっています。
注意
安定性を考慮して、非同期ログを有効にすることを推奨します。ただし、非同期ログを有効にした場合、OBServerが異常終了した際に最後の短時間分のログがディスクに書き込まれずに失われる可能性があるため、テスト環境では非同期ログを無効にすることを推奨します。
システム異常時には、OceanBaseデータベースは大量のログを出力します。問題の調査のためにより長期間のログを保持するため、OceanBaseデータベースはログのレートリミット機能をサポートしています。クラスタ構成パラメータ syslog_io_bandwidth_limit を使用して、ログ出力レートを制御でき、デフォルト値は毎秒30MBです。ログレートリミットが発生すると、ログがランダムに破棄され、同時に REACH SYSLOG RATE LIMIT のINFOレベルのログが出力されます。ERRORレベルのログはレートリミットの対象外です。
注意
非同期ログ出力方式があるものの、依然としてCPUの消費が発生します。極端なパフォーマンスが求められるシナリオ(例えば、大規模なプロモーションイベントなど)では、ログレベルをERRORに設定してログ量を削減できます。