sql - 障害 - オラクルRACとシーケンス




キャッシュフュージョン デメリット (2)

シーケンスを使用するさまざまなデータベースアプリケーションがありますが、これらのアプリケーションをRACを使用しない10gからRACを使用して11gにOracle RACに移行します。 私は順序付けされた配列が必要であり、ギャップは許容される。

私は順序とキャッシュシーケンスで考えている、私はパフォーマンスの影響は何か分からない。 これは良い選択だと思いますか? シーケンスとRACの経験は何ですか?

ありがとう、

https://code.i-harness.com


配列は意味を持って順序付けられるようには設計されていません。 Tom Kyte氏の回答とこのスレッドのフォローアップの回答の一部をこのリンクでチェックしてください。


この文脈で「命令された」ということはまったく何を意味しますか?

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

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

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

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

通常、タイムスタンプの順序を提供するためにシーケンスに頼るのではなく、実際のタイムスタンプを格納するためにTIMESTAMPカラムをテーブルに追加することが好ましいでしょう。





oracle11g