SYSTIMESTAMPは、マルチサーバーOracle RAC環境のどこから来ていますか?
SYSTIMESTAMPが、現在リクエストを処理しているサーバーではなく、共通の場所(マスターノード?)から派生することを期待しています。
タイムスタンプを使用して、ログテーブルのエントリが順番に記録されるようにしています。たとえば、RACに2つのノードがあり、それらが1秒ずれているとします。私たちのアプリサーバーは、たとえば互いに0.03秒以内に2つのログエントリを挿入します。最初の挿入はNode1によって処理され、2番目の挿入はNode2によって処理されます。 2つのノード間に1秒の違いがある場合、タイムスタンプにログエントリが間違った順序で発生していることが示される可能性があります。 (私はシーケンスを使用しますが、パフォーマンス上の理由からシーケンスはキャッシュされます...)
最大11gのOracleがRAC環境のシステム時刻としてローカルOS時刻を使用していることを知っていますが、それが変更されたとは聞いたことがないので、まだ有効であると言っても過言ではありません。
通常、NTPまたは別のソリューションを使用して、すべてのサーバーを同期して、時刻の同期を確保します。通常、サーバーの現地時間が30秒程度でも同期していない場合は、次のように表示される傾向があります。 Kerberos認証の問題などの他の問題は、互いに遠く離れている可能性は低いです。
タイムスタンプの解像度をミリ秒単位にする必要がある場合、NTPを使用すると問題が解決すると想定すると、あまり快適ではありません。おそらく、非常に頻繁に同期する必要があり、それでもネットワークを使用する必要があります。待ち時間などが問題になる可能性があります。
パフォーマンス上の理由でOracleシーケンスをキャッシュしていると述べているので、これは一般的に正しいです(そして、キャッシュサイズをデフォルトの20よりもはるかに大きくします)。挿入順序を決定するためのシーケンスだけを定義することです。それらのシーケンスはNOCACHE ORDER
。はい、追加のロックが必要になりますが、それはあなたが望むものを保証します。サーバーノードの時刻の同期を維持することをいじるのは保証されないかもしれません。
From シーケンスドキュメントの作成
ORDERは、Oracle Real ApplicationClustersを使用している場合に順序付き生成を保証するためにのみ必要です。