2012-01-17 10 views
4

私はこの質問をgoogleしようとしましたが、これに似た質問は見つかりませんでしたので、私はここで尋ねています。これは問題のように思えるかもしれませんが、データベースがどのようにして同時挿入を処理するのか分かりません。データベースエンジンは同時挿入をどのように処理しますか?

100人のユーザーが挿入クエリを実行したとします。データベースは同時に複数のレコードを挿入しますか(同じ秒、同じナノ秒など)、または各レコードを順番に挿入しますか?データベースはマルチスレッド環境で動作するので、自然な答えは同時に挿入を開始することになります。

+0

[データベースエンジンにおける分離レベル](http://msdn.microsoft.com/en-US/library/ms189122%28v=SQL.90%29.aspx) –

答えて

5

SQL Serverのようなデータベースエンジンは、ARIESWrite-Ahead Loggingプロトコルのいくつかのバージョンを使用します。このようなプロトコルでは、ログをシーケンシャルストリームとして書き込む必要があるため、100個のCPUが同時にログオンすると、100個のCPUサーバがログにアクセスしたときに内部的にシリアル化する必要があります。したがって、「ナノ秒」レベルでの並行性は、理論的には可能ではありません。トピックはいくつかの場所で説明されています(Write-Ahead Transaction LogTransaction RecoveryおよびHow It Works: Bob Dorr's SQL Server I/O Presentationを参照)。

しかし、実用的な観点から、あなたは、トランザクションとisolation levelsの観点から考える必要があります。

1

ユーザーが独自のトランザクションで挿入を行うと仮定すると、エンジンが孤立して各トランザクションをコミットします。コミットがテーブルに入ると、どのスレッドが実行時間スライスを早く取得するかに基づいて、任意の方法で順序付けられます。ユーザーがテーブルの制約を妨げるデータを挿入すると(たとえば、一意の値に一意の値を挿入しないと)、あるランダムなユーザーのトランザクションは成功し、他のすべてのトランザクションは失敗します。

関連する問題