

# Aurora DSQL での同時実行制御
<a name="working-with-concurrency-control"></a>

同時実行により、複数のセッションがデータの整合性と一貫性を損なうことなく、同時にデータにアクセスして変更することができます。Aurora DSQL は、最新かつロックフリーの同時実行制御メカニズムを実装しながら、[PostgreSQL との互換性](https://docs.aws.amazon.com/aurora-dsql/latest/userguide/working-with-postgresql-compatibility.html)を提供します。スナップショットの分離を通じて完全な ACID コンプライアンスを維持し、データ整合性および信頼性を確保します。

Aurora DSQL の主なメリットは、一般的なデータベースパフォーマンスのボトルネックを排除するロックフリーのアーキテクチャです。Aurora DSQL は、遅いトランザクションが他のオペレーションをブロックするのを防ぎ、デッドロックのリスクを排除します。このアプローチにより、Aurora DSQL は、パフォーマンスと拡張性が重要な高スループットアプリケーションに特に役立ちます。

## トランザクションの競合
<a name="dsql-transaction-conflicts"></a>

Aurora DSQL は、オプティミスティック同時実行制御 (OCC) を使用します。これは、従来のロックベースのシステムとは動作が異なります。OCC はロックを使用する代わりに、コミット時に競合を評価します。同じ行の更新中に複数のトランザクションが競合すると、Aurora DSQL は次のようにトランザクションを管理します。
+ コミット時間が最も早いトランザクションは、Aurora DSQL によって処理されます。
+ 競合するトランザクションは、再試行する必要があることを示す PostgreSQL シリアル化エラーを受け取ります。

競合を処理する再試行ロジックを実装するようにアプリケーションを設計します。理想的な設計パターンはべき等性であり、可能な限り最初の手段としてトランザクションの再試行を可能にします。推奨されるロジックは、標準 PostgreSQL のロックタイムアウトまたはデッドロック状況におけるアボートおよび再試行ロジックに似ています。ただし、OCC では、アプリケーションでこのロジックをより頻繁に実行する必要があります。

## トランザクションパフォーマンスを最適化するためのガイドライン
<a name="dsql-perf-guidelines"></a>

パフォーマンスを最適化するには、単一キーまたは小さなキー範囲における高い競合を最小限に抑えます。この目標を達成するには、次のガイドラインを使用して、クラスターキー範囲に更新を分散するようにスキーマを設計します。
+ テーブルのランダムなプライマリキーを選択します。
+ 単一キーでの競合が増加するパターンは避けてください。このアプローチにより、トランザクション量が増えても最適なパフォーマンスが保証されます。