SQL Server IDENTITY 列增量間隙:了解快取
SQL Server 的 IDENTITY
列,用於產生唯一的行標識符,有時會表現出意外的行為:伺服器重新啟動後,增量會跳躍數百,而不是依次增加一。這不是一個錯誤,而是 SQL Server 2012 中引入的效能最佳化的結果。
SQL Server 快取標識值以提高效能。 此快取通常儲存 1,000 個 int
值或 10,000 個 bigint
/numeric
值。一旦快取耗盡,就會分配新的批次。 但是,重新啟動伺服器會丟棄所有未使用的快取值。
觀察到的跳躍,最後三位數字保持不變(例如,始終以 306 結尾),反映了初始分配 1,000 後剩餘的緩存值。
雖然這種快取機制會在 IDENTITY
序列中產生間隙,但它主要提高了效能。 除非頻繁重啟很常見,否則影響很小。 然而,有幾個選項可以緩解這個問題:
IDENTITY
列替換為 SEQUENCE
對象,以便更好地控制快取大小。 ALTER DATABASE SCOPED CONFIGURATION SET IDENTITY_CACHE = OFF;
以停用特定資料庫的快取。 重要的是要記住,即使使用這些解決方法,並發插入和事務回滾仍然會產生間隙。對於要求絕對序列連續性的應用程序,請考慮 UUID 生成器或自訂序列實作等替代方案。
以上是為什麼重新啟動後我的 SQL Server IDENTITY 增量會跳躍?的詳細內容。更多資訊請關注PHP中文網其他相關文章!