2015-08-28 58 views
0

這個問題是在MS SQL 2008服務器標準R2約奇怪的行爲SP3差距IDENTITY列 - 巨大的 - MS SQL Server 2008 R2的標準64位SP3

我看了一下IDENTITY增量在SQL Server中的許多問題和他們之間的奇怪差距。但基本上人們都說它與交易或重新啓動有關。在我的情況下(我們使用的是MS SQL Server 2008 R2標準64位SP3的命名實例)的差距簡直是巨大的。 應用程序在表中插入了130 000條記錄,併發生「算術溢出IDENTITY轉換爲int」錯誤。 我們截斷表格,並批量插入70 000條記錄。在批量插入IDENTITY列的最大值超過9 000 000!

由於這不是正常的負載,而是質量插入 - 在此操作過程中沒有回滾,重新啓動或任何其他問題。

因此差距不是千分之一,而是千分之十。

由於我不控制應用程序代碼(這是從其他公司購買的商業軟件),我很害怕我該怎麼做這樣的數據庫的管理員?我是否每6個月將表格截斷一次?實時監控ID列?

間隙的大小不是1000,而是千分之十。 有沒有學生遇到過類似的問題?

+0

可能重複作者:http://stackoverflow.com/questions/17587094/identity-column-value-suddenly-jumps-to-1001-in-sql-server – CeOnSql

+0

你是如何創建標識列。可以定義間隙的大小 –

+0

爲什麼不能在將數據插入表中之前使用DBCC命令,那麼間隙將不會增加 – mohan111

回答

1

身份差距的可能共振是插入語句回滾的時候。您正在使用的第三方應用程序,它可能是在這個regard.I罪魁禍首,因此建議你創建一個虛擬表如下測試你的說法,看看如果SQL Server導致差距:

create table TestGaps 
(
    id int identity(1,1) 
    ,someValue char(5) 
) 
go 
with cte as 
(
    select 1 as rn,'ABCDE' as val 
    union all 
    select (rn + 1), val from cte where rn<32767 
) 
insert into TestGaps(someValue) 
select val from cte option(maxrecursion 32767) 
1

對不起,本身不是解決方案,但您可以從以下sys表中確認種子值和增量值;

select 
     object_name([object_id]) as [objectname] 
    , [name] 
    , [seed_value] 
    , [increment_value] 
    , * 
from sys.identity_columns 

increment_value通常是1,但如果它是100例​​如然後插入10個新行後您的身份值由1000擁有先進的。

相關問題