INSENSITIVE
カーソルは、同時アップデートの影響からクエリを隔離し、同じトランザクションからであっても、その結果の最初の FETCH
より前に、OPEN 時の SQL クエリの全結果セットを実体化します。KEYSET-DRIVEN
(または SCROLL・value-sensitive
) カーソルは、それらのローがアプリケーションによってFETCH
されたものであると記憶し、同じ結果のローが再FETCH され、同時アップデート(または削除)される場合には、アプリケーションに警告(エラー)を返します。FOR UPDATE
構文で指定された文レベルの 2 つの同時実行性制御ヒントについて述べたいと思います。FOR UPDATE
句の基本は、明示的に更新可能なカーソルを宣言します。しかしながら、分離レベル0 と 1 のロックでは、現在の行以外ロックは取得されていないので、その他のローは他の接続による修正や削除がオープンに行えます。FOR UPDATE BY LOCK
. を指定します。これは、アプリケーションでFETCH
されているので、各ローで INTENT ローロックの取得が発生します。INTENT ロックは、他の接続がローを読むことを許可しますが、他の接続はそれの INTENT または WRITE ロックを取得することはできません。INTENT ロックは、COMMIT/ROLLBACK
まで保たれる長期のロックです。FOR UPDATE BY TIMESTAMP
または FOR UPDATE BY VALUES
。を指定します。この場合、SQL Anywhereは、他の接続によって特定のローが替えられた、または削除されたという通知を有効化するため、楽観的同時実行制御の形式としてKEYSET-DRIVEN カーソルの使用を強要します。SELECT *
FROM CUSTOMERS WITH ( NOLOCK )
NOLOCK
テーブルヒントは、サーバーが Customers テーブルに分離レベル0でアクセスさせます。テーブルヒントは、ベースまたはグローバル共有 temp テーブルにのみ適用されることに留意してください。ビューまたはプロキシテーブルで使用される場合、ヒントは無視されます。以下が SQL Anywhere 11.0.1 サーバーでサポートされているテーブルヒントのリストです。NOLOCK</code– 分離レベル 0 (READ ロッキングなし) を使用してください。Microsoft SQL Serverと互換です。
READUNCOMMITTED
– NOLOCK
– NOLOCKと同義です。READCOMMITTED
– 分離レベル 1で短期のread ロックを使用します。REPEATABLEREAD
– 分離レベル2でreadロックを使用します。SERIALIZABLE
– 分離レベル 3 でread ロックを使用します。HOLDLOCK
- SERIALIZABLE</codeと同義です。Microsoft SQL Serverや、SAP Adaptive Server Enterprise でもサポートされています。
READPAST
. READPAST
テーブルヒントは、SELECT
文 (のみ)分離レベル 1との使用においてサポートされています。READPAST
は、インデックススキャンであっても、テーブルスキャンであっても、INTENT または WRITE ロックでロックされたローへ単純に「ジャンプ」することでスキャン時のブロックを避けます。この意味において、READPAST
は、シンプルにコミットされていない更新を計算から除くことでセマンティクスが安全でないことを示します。しかしながら、このREADPAST
の重要な長所は、ブロックが原因で同時条件を避けてるにも関わらず、これがベーステーブル内のキューまたはキーのプールのメンテナンスに非常に便利だということです。 READPAST
はまた、Microsoft SQL Server や SAP Adaptive Server Enterprise でもサポートされています。UPDLOCK
- INTENT ロックをスキャンのそれぞれのローに適用します。XLOCK
- WRITE ロックをスキャンのそれぞれのローに適用し、分離レベル0のトランザクションを除いて他の接続がローにアクセスするのを禁じます。FASTFIRSTROW
は、SQL Anywhere のオプティマイザーに対し、テーブル参照を含むSELECT
ブロックにFIRST-ROW
の最適化ゴールを使用させます。FASTFIRSTROW
ヒントに付随するSELECT
ブロックのあらゆるテーブル参照がゴールを変更します。SELECT
, UPDATE
, etc) は OPTION
句をサポートしています。OPTION 句の役に立つ特徴として、アプリケーション開発者側で最適化バイパスを無効にし、コストベースのオプティマイゼーションを強要できることがあります。さらに、この文単体で、これらのオプションの設定を個別にSET OPTION
文で替える必要を避け、ISOLATION LEVEL
または OPTIMIZATION_GOAL
のような特定の接続オプションを設定することができます。OPTION
句のクエリの中で設定できます。ISOLATION_LEVEL
オプションMAX_QUERY_TASKS
オプションOPTIMIZATION_GOAL
オプションOPTIMIZATION_LEVEL
オプションOPTIMIZATION_WORKLOAD
オプションUSER_ESTIMATES
オプションYou must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
User | Count |
---|---|
24 | |
10 | |
8 | |
7 | |
7 | |
7 | |
6 | |
6 | |
6 | |
6 |