2016-09-10 55 views
2

在我的MS SQL Server上的所有數據庫表中,id列在每次重新啓動服務器時跳轉1000或更多。由於這是一個本地應用程序,並且服務器是從我的一臺筆記本電腦託管的,所以我每天都關閉它,然後關閉服務器。MS SQL Server:int Ids跳轉1000

最終,這個程序將被用於大規模的設置,我擔心這種行爲 - 做數學運算,如果每次跳1000次,我仍然有超過400萬個唯一ID一個新的進入,但計劃是這個數據庫增長多年和幾年。如果我用完獨特的ID會發生什麼? BigInt也遇到了這個問題,但是增加了10000個,而不是1000個。我查看了整個互聯網,似乎很多人通過將-t272設置爲啓動參數來解決了這個問題,但它並不適用於我。任何人都可以告訴我一個工作嗎?

+0

@a_horse_with_no_name他們不問他們爲什麼會發生這種情況,他們擔心消費範圍內的差距會造成影響。 –

回答

4

不用擔心。

您將不會在筆記本電腦上運行生產服務器,並且每天假設我將其關閉?

對於幾乎所有的生產服務器,您都不會頻繁地重新啓動SQL Server服務,以便在int允許的數字範圍內產生任何顯着的負值。

即使你「輸」在整個1000每次重新啓動這仍然只是從1到2147483647,您可能需要bigint如果你的應用是夠忙的,但它是非常不可能的,這將是該範圍內的0.0000465661%唯一的原因,並且在這種情況下你不會因爲需要而結束。

舉一個例子,假設您每天重新啓動服務四年,因此丟失了可能的值4 * 365 * 1,000 = 1,460,000

如果在相同的時間段內你溢出int並且需要BIGINT,這意味着你在做(2147483647 - 1460000)/(4 * 365) = 1,469,879插入一天。因此,在你需要BIGINT之前,這個問題會花費不到一天的時間。

+0

以下是我對此的想法: 我有一張桌子供人使用,然後是一張桌子,將人們連接到一張測量圖上,每個人可能在此表中有大約100條記錄。如果它跳躍1000,我將失去10個人的測量空間,如果這種情況持續發生,它實際上會增加很多。我知道服務器很可能在實際啓動時不會重新啓動,但我只是爲了避免發生這種情況 - 除了-t272標誌外,還有其他解決方法嗎? – itman1234

+1

那麼不要這樣想。從邏輯的角度來考慮這個問題,用少得可笑的術語比「加起來相當多」。即使你每天重新啓動服務器3年,它也只會加起來達到問題所消耗的'3 * 365 * 1000 = 1095000'範圍。如果在相同的時間段內你溢出int並且需要BIGINT,這意味着你在做'(2147483647 - 1095000)/(3 * 365)= 1960172'插入一天。因此,至少在你需要使用BIGINT之前,這個問題花費不到一天的時間。 –

+0

謝謝,我明白現在這不是一個真正的問題。 – itman1234