sql >> データベース >  >> RDS >> Oracle

OracleRACとシーケンス

    この文脈で「注文された」とは正確にはどういう意味ですか?

    デフォルトでは、クラスター内の各ノードには、シーケンス番号の個別のキャッシュがあります。したがって、ノード1は値1〜100を配布し、ノード2は値101〜200を配布している可能性があります。単一のノードから返される値はシーケンシャルですが、ノード1のセッションAは15の値を取得し、ノード2のセッションBは107の値を取得するため、セッション間で返される値は順不同で表示されます。

    シーケンスを順序付けする必要があることを指定すると、新しいシーケンス値を要求するたびにOracleがノード間で通信する必要があるため、基本的にシーケンスキャッシュの目的が無効になります。これにより、かなりの量のパフォーマンスオーバーヘッドが発生する可能性があります。シーケンスを一種のタイムスタンプとして使用している場合、そのオーバーヘッドが必要になる場合がありますが、一般的には望ましくありません。

    実際のオーバーヘッドの違いは、アプリケーションに大きく依存します。一部のアプリケーションでは測定できないほど小さく、他のアプリケーションでは重大な問題になります。 RACノードの数、相互接続の速度、および相互接続トラフィックの量も影響します。また、これは主にスケーラビリティの問題であるため、実際の影響により、アプリケーションのスケールアップが制限され、本質的に非線形になります。アプリケーションが処理するトランザクション量を2倍にすると、オーバーヘッドが2倍以上になります。

    NOCACHEを指定した場合、ORDERまたはNOORDERの選択は基本的に無関係です。 ORDERを指定した場合、CACHEまたはNOCACHEの選択は基本的に無関係です。したがって、CACHE NOORDERがはるかに効率的であり、他の3つは比較的交換可能です。これらはすべて、明らかに潜在的なボトルネックであるシーケンス値を要求するたびに、ノード間の調整とネットワークトラフィックを伴います。

    一般に、タイムスタンプの順序を提供するシーケンスに依存するよりも、実際のタイムスタンプを格納するためにTIMESTAMP列をテーブルに追加する方が望ましいでしょう。



    1. すべてのSQLServer外部キーに一致するインデックスが必要ですか?

    2. MySQLで日時に挿入する場合のPHPのdate()形式

    3. 効果的かつ簡単な方法で階層、親子関係を達成する

    4. SELECT DISTINCTが指定されている場合、ORDERBY項目は選択リストに表示される必要があります