Sql-Server
SQL Server 2014 中的 MASSIVE Identity 列值跳躍
因此,在基本編碼和測試過程中,我們看到多個表的標識值出現了巨大的非模式跳躍。我們不知道任何伺服器故障或嘗試的批量操作,但 DBA 正在查看日誌。
差距不是典型的 1,000 或 10,000 在伺服器重新啟動等情況下看到的。
Application_NO
對於具有 2,320 行的表,間隙為10,410,345
Transaction_Payment_NO
在有 685 條記錄的表格中躍升了驚人的 1,712,149,313。關於什麼可能導致如此大且看似隨意的跳躍的任何想法?
一些可能的罪魁禍首:
- 測試過程在事務中創建許多行,然後回滾事務
正如您提到的,這似乎是最可能的原因,您目前正在進行測試。也許有一些正在執行的自動化測試對這些表進行更改,驗證結果,然後回滾更改。
事務回滾後不會重用標識值,這就是導致您在此方案中看到較大差距的原因。
- 有人使用了
RESEED
命令您可以使用以下命令手動更改目前的“下一個身份”值:
DBCC CHECKIDENT ('dbo.Transaction_Payment_NO', RESEED, 1712149313);
這似乎不太可能,因為您或其中一位管理員將不得不竭盡全力去做。相似地…
- 有人手動插入了這些值
IDENTITY
您可以通過首先執行以下語句將您喜歡的任何內容插入列中:SET IDENTITY_INSERT dbo.Transaction_Payment_NO ON;
- 故障轉移和重啟
您在問題中提到了這一點,但只是為了完整性 - SQL Server 記憶體標識值以提高性能。但是,如果服務重新啟動或發生 AG 故障轉移,這些預先分配的標識值可能會失去。不過,這會導致更多可預測的差距(在現代版本的 SQL Server 上為 10,000 個)。