トランザクション分離レベルの設定

トランザクション分離レベルを設定するために、アプリケーションは SQL_ATTR_TXN_ISOLATION 接続属性を使用します。 データ ソースが要求される分離レベルをサポートしていない場合、ドライバーまたはデータ ソースは上位レベルを設定できます。 データ ソースでサポートされるトランザクション分離レベルと既定の分離レベルを決定するために、アプリケーションは、それぞれ SQL_TXN_ISOLATION_OPTION オプションと SQL_DEFAULT_TXN_ISOLATION オプションを使用して SQLGetInfo を呼び出します。

トランザクション分離のレベルが高いほど、データベース データの整合性に対する保護を最も高くすることができます。 シリアル化可能なトランザクションは、他のトランザクションの影響を受けないことを保証されるため、データベースの整合性を維持することが保証されます。

ただし、トランザクションの分離レベルを高くすると、データのロックが解除されるのをアプリケーションが待機する可能性が高くなるため、パフォーマンスが低下する可能性があります。 次の場合、アプリケーションでは、パフォーマンスを向上させるために、より低い分離レベルを指定できます。

  • アプリケーションのトランザクションを妨げる可能性のある他のトランザクションが存在しないことを保証できる場合。 このような状況は、小規模な会社で 1 人のユーザーが、1 台のコンピューターで人事データを含む dBASE ファイルを管理し、これらのファイルを共有しない場合など、限られた状況でのみ発生します。

  • 速度が精度よりも重要であり、エラーが少ないと思われる場合。 たとえば、ある会社が小規模な販売を多く行い、大規模な販売はまれであるとします。 すべての未決済販売の合計値を見積もるトランザクションでは、コミットされていない読み取り分離レベルを安全に使用できます。 トランザクションには、未決済注文または決済され、その後ロールバックされる注文が含まれますが、通常は互いに相殺され、トランザクションはそのような注文に遭遇するたびにブロックされないため、はるかに高速になります。

詳しくは、「オプティミスティック コンカレンシー」を参照してください。