2012-01-17 50 views
4

我試圖谷歌了這個問題,但沒有發現類似這樣的問題,所以我在這裏問。這可能看起來像一個noob問題,但我真的不知道數據庫如何處理併發插入。數據庫引擎如何處理併發插入?

如果100個用戶啓動插入查詢。數據庫是否同時插入多個記錄(相同的秒,相同的納秒等)還是將每個記錄一個接一個地插入?數據庫運行在多線程環境中,所以自然的答案會被同時插入。

+0

[數據庫引擎中的隔離級別](http://msdn.microsoft.com/en-US/library/ms189122%28v=SQL.90%29.aspx) – 2012-01-17 05:02:15

回答

5

像SQL Server這樣的數據庫引擎(我假設你問過,因爲你是這樣標記的)會使用ARIESWrite-Ahead Logging協議的某些版本。由於這種協議要求將日誌寫爲順序流,因此通常會同時觸發100個插入,即使在100臺CPU服務器上訪問日誌時也必須進行內部序列化。因此,如你所暗示的,在「納秒級」的併發性在理論上甚至是不可能的。該主題在幾個地方進行了描述,請參見Write-Ahead Transaction LogTransaction RecoveryHow It Works: Bob Dorr's SQL Server I/O Presentation

但是,從實際角度來看,您應該考慮交易和isolation levels

1

假設用戶在自己的事務中插入數據,引擎會單獨提交每個事務。當提交進入表中時,它們將以任意方式進行排序,這取決於哪個線程獲得了更早的執行時間片。如果用戶插入干擾表約束的數據(例如,它們將非唯一值插入到唯一列中),則一個隨機用戶的事務將成功,而其他所有其他用戶的事務將失敗。