Bik*_*own 2 sql-server identity sql-server-2014
因此,在基本编码和测试过程中,我们看到多个表的 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);
Run Code Online (Sandbox Code Playgroud)
这似乎不太可能,因为您或其中一位管理员将不得不竭尽全力做到这一点。相似地...
您可以IDENTITY通过首先运行以下语句将您喜欢的任何内容插入到列中:
SET IDENTITY_INSERT dbo.Transaction_Payment_NO ON;
Run Code Online (Sandbox Code Playgroud)
您在问题中提到了这一点,但只是为了完整性 - SQL Server 缓存标识值以提高性能。但是,如果服务重新启动或发生 AG 故障转移,这些预先分配的标识值可能会丢失。这会导致更可预测的差距(在现代版本的 SQL Server 上为 10,000)。