我希望Laurion Burchall讀取該:-)插入萬元的小記錄到可擴展存儲引擎(捷藍) - 快速
我需要儘可能快地插入一百萬微小的記錄。
現在我在一個非常緊密的循環,其中,對於每一個記錄,我
a) start a transaction (JetBeginTransaction)
b) prepare an update (JetPrepareUpdate)
c) add the row (JetSetColumns)
d) commit the transaction (JetCommitTransaction)
眼下,在這個過程中,我在一個處理器的緊密循環來的。目標機器有多個CPU,大磁盤和大量可用RAM。
我想知道如何獲得更好的性能。
就交易而言,我做了一些實驗,並且遇到了錯誤,如果我在一次交易中放置了太多數據,就會出現錯誤。我想更好地理解那裏發生了什麼 - 我是否有一個bug,或者是一個交易的上限,如果上限,我可以放大上限?我只是在研究這個問題,因爲我猜測一個事務讓ESE能夠在RAM中執行更多緩存,最大限度地減少磁盤沖刷? - 這只是一個猜測?
一般來說,我該如何利用多個處理器/大量RAM /和漂亮的磁盤?我打開數據庫兩次並從那裏開始?我不太確定線程安全和事務方面會發生什麼情況。如果我對數據庫有兩個句柄,每個在事務中,在提交之前立即可以在第二個句柄上寫入一個句柄,還是需要首先提交?
任何提示的讚賞
here are the constraints
a) I've got a million records that need to be written into the DB as fast as possible
b) to fully generate the record for insertion there are two searches that need to occur within the same table (seeking keys)
c) This is a rebuild/regeneration of the DB - it either worked, or it didnt.
If it didnt there is no going back, a fresh rebuild/regeneration is
needed. I cannot restart mid process and without all the data none of
the data is valuable. READ: having one big transaction is fine if it
improves perf. I'd like ESE to cache, in ram, if that helps perf.
的感謝!
非常感謝! – stuck 2010-12-14 21:49:01
這裏是一個鏈接到一個文檔Laurion張貼在MSDN http://blogs.msdn.com/b/laurionb/archive/2008/11/07/some-basic-esent-performance-measurements.aspx – stuck 2010-12-21 02:04:47
我不是獲得我希望看到的perf。我可以在一臺不錯的機器上(大約7200秒的SATA磁盤的i7)在約4.3秒內添加約10,000條非常小的記錄。只有當一個唯一的,非空字符串被添加到數據庫時,纔會出現問題。我看到CPU負載很低,並且在使用procmon進行監視時很少出現很小的寫入。考慮到記錄的小尺寸,這對我來說似乎沒有意義?我打電話給JetCommitTransaction(JET_bitCommitLazyFlush)。給定一切(延遲刷新+大maxVerPage值+低CPU負載+在procmon中測量的小IO)。我能做什麼?假設磁盤運動是可能的? – stuck 2011-06-07 02:15:33