SQL Anywhere は、スキーマ・ロック、ロー・ロック、テーブル・ロック、位置・ロックを必要に応じて使用し、必要な一貫性レベルを確保します。特定のロックの使用を明示的に要求する必要はありません。ただし、要件に最も合う独立性レベルを選択することで維持される一貫性レベルを管理する必要があります。ロックの種類を知っておくと、独立性レベルの選択、および各レベルのパフォーマンスへの影響を理解する上で便利です。1 つのトランザクションがロックを取得することで自分自身をブロックすることはできないことに注意してください。ロックの競合は、2 つ以上のトランザクション間でのみ発生します。
4 つのロックはそれぞれ特定の目的がありますが、すべての種類が干渉し合うため、トランザクション間でロックの競合が発生する原因となります。データベースの一貫性を確保するために、一度に 1 つのトランザクションだけが 1 つのローを変更できます。2 つのトランザクションが同時に 1 つの値を変更できてしまうと、1 つの値が 2 つの異なる値に変更されることになります。このため、ローの書き込みロックは排他ロックであることが重要です。これに対して、複数のトランザクションが 1 つのローを読んでも問題は生じません。ローを変更するわけではないので、競合することはありません。このため、ローの読み込みロックは多くの接続間で共有されていても構いません。
次の表に、競合するロックの組み合わせを示します。スキーマ・ロックはローに適用されないため、含めてありません。
読み込み (ロー) | 意図的 (ロー) | 書き込み (ロー) | 共有 (テーブル) | 意図的 (テーブル) | 排他 (テーブル) | 幻 (位置) | 挿入 (位置) | |
---|---|---|---|---|---|---|---|---|
読み込み (ロー) | 競合 | 競合 | ||||||
意図的 (ロー) | 競合 | 競合 | 競合 | |||||
書き込み (ロー) | 競合 | 競合 | 競合 | 競合 | 競合 | |||
共有 (テーブル) | 競合 | 競合 | 競合 | |||||
意図的 (テーブル) | 競合 | 競合 | ||||||
排他 (テーブル) | 競合 | 競合 | 競合 | 競合 | 競合 | 競合 | 競合 | 競合 |
幻 (位置) | 競合 | 競合 | ||||||
挿入 (位置) | 競合 | 競合 |
Copyright © 2009, iAnywhere Solutions, Inc. - SQL Anywhere 11.0.1 |