我有45個active
併發插入事務,每個事務試圖插入(只插入沒有任何選擇或更新)大約250行到某些表。防止SQL Server併發插入鎖定
問題是,當事務想要將數據插入表中時,多索引行和索引頁上大約有1000個X和IX鎖(sys.dm_tran_locks
)。
我已經將索引移動到SSD,但它沒有任何意義,我還有很多未決事務,每個事務大約需要200ms到4000ms,根據SQL事件探查器上的Adult logout
完成。
緩衝區I/O,緩衝區鎖存,鎖定,鎖存,記錄等待時間在活動監視器中爲0或非常低。
我試圖增加交易次數,但我沒有任何意義,Activity monitor
中的執行次數也是一樣的。
我的系統信息:
- 2X E5, 日誌文件
- SSD RAID 0,數據
- HDD RAID 10,
- SSD的Raid 0的指標,
- + 64GB DDR3,
- SQL Server 2014 SP2
1.我已經禁用/刪除了很多索引。 2.我已將所有Primaries更改爲非身份,bigint並在業務級別進行初始化。 3.填充因子超過90. 4.我會這樣做,但是如果我爲每個表使用單獨的分區,它會做出任何更改?因爲I/O將是相同的。 5.內存是不可能的我認爲,根據2014年的限制和分貝(4TB)的大小 – Milad
對於#3你必須看看插入過程中的分裂和分頁數量。如果是這種情況,可以將Fillfactor降低到50%甚至更低。數據不應該按聚簇索引順序排列,那麼您可以一次插入多個頁面。對於#4,您可以將一個表分成多個文件。 –
非常感謝您的提示,我已將某些索引的填充因子降低到20%,並將頁面填充到70%,並將碎片最小化。此外,我還爲大表(一個文件組)添加了兩個文件,並將它們移動到另一個HDD。在這種情況下,插入和選擇將具有更好的性能,因爲兩個HDD執行操作(一個用於小型表,另一個用於大型RAID10)。此外,我創建了順序range-id而不是順序的,可以創建具有最小鎖定的多索引頁面。最後,我用「插入批量」進行批量插入,將性能提高到400%。 – Milad