SQL Server 2014'te MASSIVE Kimlik sütunu değer atlaması

Aug 19 2020

Bu nedenle, temel kodlama ve testin ortasında, birden çok tablo için Kimlik değerlerinde büyük bir modelsiz sıçrama gördük. Herhangi bir sunucu hatasından veya toplu işlem girişiminden haberdar değiliz, ancak DBA'lar günlükleri inceliyor.

Boşluklar, sunucunun yeniden başlatılmasında görülen tipik 1.000 veya 10.000 değildir.

Application_NO2.320 satırlık bir tablo için boşluk 10.410.345'tir

Transaction_Payment_NO 685 kayda sahip bir tablo için şaşırtıcı bir şekilde 1.712.149.313 atladı.

Bu kadar büyük ve görünüşte keyfi atlayışlara neyin neden olabileceğine dair herhangi bir fikriniz var mı?

Yanıtlar

5 JoshDarnell Aug 19 2020 at 01:06

Bazı olası suçlular:

  1. test süreci, bir işlemde birçok satır oluşturur ve ardından işlemi geri alır

Bahsettiğiniz gibi, şu anda test yapmakta olduğunuzdan en olası neden bu gibi görünüyor. Belki de bu tablolarda değişiklik yapan, sonuçları doğrulayan ve ardından değişiklikleri geri alan bazı otomatik testler yürütülmektedir.

Bir işlem geri alındıktan sonra kimlik değerleri yeniden kullanılmaz, bu da bu senaryoda büyük boşluklar görmenize neden olur.

  1. Biri RESEEDkomutu kullandı

Şu komutla mevcut "sonraki kimlik" değerini manuel olarak değiştirebilirsiniz:

DBCC CHECKIDENT ('dbo.Transaction_Payment_NO', RESEED, 1712149313);

Bu daha az olası görünüyor, çünkü siz veya yöneticilerden birinin bunu yapmak için kendi yollarından çıkması gerekir. Benzer şekilde...

  1. Biri bu değerleri manuel olarak ekledi

IDENTITYÖnce bu ifadeyi çalıştırarak bir sütuna istediğinizi ekleyebilirsiniz :

SET IDENTITY_INSERT dbo.Transaction_Payment_NO ON;
  1. Yük devretmeleri ve yeniden başlatmalar

Soruda bundan bahsettiniz, ancak sadece eksiksizlik için - SQL Server, performansı artırmak için kimlik değerlerini önbelleğe alır. Ancak bu önceden tahsis edilmiş kimlik değerleri, hizmet yeniden başlatılırsa veya bir AG yük devretme meydana gelirse kaybedilebilir. Bu, daha öngörülebilir boşluklara yol açar (SQL Server'ın modern sürümlerinde 10.000).