2010-04-07 64 views
2

在SQL事件探查器中,您可以看到,通過主鍵對錶進行的非常簡單的更新大約需要10-30ms。在大約每10次更新時,寫入列顯示,在所有其他更新中顯示。這意味着大約每10個更新語句仍然需要磁盤IO。我不知道這是爲什麼。在事務提交之前排隊所有IO會不會更有效率?爲什麼SQL事務內部的更新仍然需要磁盤IO?

+2

它確實在一定程度上排隊所有I/O請求。發生檢查點時,髒頁會成批寫出。 http://technet.microsoft.com/en-us/magazine/2009.02.logging.aspx – 2010-04-07 19:51:17

回答

4

一旦你更新了一個大小的表,你想在哪裏存儲這些類型的內存更新,可以說10 000 000條記錄?

您希望在哪裏商店事務日誌。

AS plentifull爲RAM看來,我們不能假設它是無止境的...

1

而且,與我在等待/ O,直到交易結束可能不會連帶着無盡的RAM的最佳方案,因爲那樣的話交易將需要等到所有的I/O操作完成。

否則,實際上最好是寫入磁盤以進行長時間運行的事務(但以這種方式不破壞原子性)。

+0

爲什麼不緩衝幾兆而不是隻寫10次? – usr 2010-04-07 21:33:46

+0

10次寫入很可能只有幾兆字節。我不知道MS SQL Server緩衝的細節,但通常對緩衝的限制是http://en.wikipedia.org/wiki/ACID遵從性的後果。 – Unreason 2010-04-07 22:13:03

相關問題