SQL Server 2017 IDENTITY_CACHE Yeniliği

SQL Server 2017 ile hayatımıza giren güzel bir özellikten bahsedeceğiz bugün. IDENTITY_CACHE özelliği ;

Bu özelliği 2016 versiyonunda hayatımıza giren sys.database_scoped_configurations tablosunda görebiliriz.

SELECT * FROM sys.database_scoped_configurations

Bu özellik default olarak aktif gelmektedir.

Şimdi bir kaç örnek ile daha detaylı inceleyelim bu özelliği ,

İlk adım olarak bir demo tablo oluşturup o tabloya data basıyoruz.

Bu işlemi aşağıda hazırlamış olduğum query bloğu ile gerçekleştirebilirisiniz.

-- sqlturkiye_2017 isminde bir demo tablosu oluşturuyoruz.
Create Table sqlturkiye_demo2017
(
id int identity(1,1),
Name varchar(100),
Email varchar(100)
)

-- sqlturkiye_2017 isimli demo tablomuza kayıt giriyoruz.
INSERT INTO sqlturkiye_demo2017 values ('Yusuf Kahveci','[email protected]')
INSERT INTO sqlturkiye_demo2017 values ('Yaşar Kahveci','[email protected]')
INSERT INTO sqlturkiye_demo2017 values ('Şevket Kahveci','[email protected]')
INSERT INTO sqlturkiye_demo2017 values ('Hasan Kahveci','[email protected]')
INSERT INTO sqlturkiye_demo2017 values ('Marcus Malmö','[email protected]')

--Tablomuz içerisind eki kayıtları kontrol ediyoruz.

select * from sqlturkiye_demo2017

En son aşamada tablomuza SELECT çekerek datamızı kontrol ettikten sonra başka bir session açıyoruz ve oerada aşağıda ki gibi transaction başlatıp INSERT işlemi yapmayı deniyoruz.

Başka bir Session da da aktif sessionlar neler onlara bakarak teyid ediyoruz işlemimizi.

Gördüğünüz üzere 51 no lu session commit beklemekte.

Aktif session ımız devam ederken SQL Server Engine Servisini durdurmamız gerekmekte. Bunun bir kaç yöntemi var. İster Services üzerinden,ister SQL Server Configuration Manager üzerinden ister isede SSMS üzerinde query yazarak durdurma yapabiliriz.

Biz SSMS üzerinden durdurma yöntemini seçip daha sonra Servisi ayağa kaldırırkende SQL Server Configuration Manager aracını kulllanacağız.

Şimdi aşağıda ki komut ile servisimizi durduralım.

SHUTDOWN WITH NOWAIT

Göründüğü üzere servisimiz durmuş durumda. SQL Server Configuration Manager üzerinden bakalım servisimizin durumuna,

Şimdi ise aynı ekrandan Engine Servisinin üzerine gelip sağ tıklayıp START diyerek servisi ayağa kaldıralım.

Servisimiz ayağa kalktıktan sonra tablomuza tekrar SELECT atalım.

 

Gördüğünüz üzere Transaction içerisinde attığımız INSERT ler servis durması ile Rollback olduğunu tablomuzda ki kayıt sayımız ile teyid ediyoruz.

Şimdi ise transaction içerisinde yolladığımız Insert leri normal şekilde yapalım ve sonra tablomuzu tekrar  kontrol edelim.

INSERT INTO sqlturkiye_demo2017 values ('Denis Merph','[email protected]')
INSERT INTO sqlturkiye_demo2017 values ('Zeus Dell','[email protected]')
INSERT INTO sqlturkiye_demo2017 values ('Monica Mırc','[email protected]')
INSERT INTO sqlturkiye_demo2017 values ('Hans Kleins','[email protected]')

Tablomuza SELECT çekelim ,

Gördüğünüz üzere IDENTITY değerimiz 1001 den sonra ya geçmiş durumda. IDENTITY_CACHE den dolayı bu şekilde bir değer ile arttırıma devam etti tablomuz. Bu süreçten kurtulmak için. SQL Server 2017 ile aktif halde gelen IDENTITY Cache özelliğini pasif etmeniz gerekmektedir.

 

Bunun içinde aşağıda ki script ile pasif hale getiriyoruz ,

-- IDENTITY_CACHE Özelliğini pasif yapıyoruz.
ALTER DATABASE SCOPED CONFIGURATION SET IDENTITY_CACHE = OFF

Daha sonra teyid ediyoruz 2016 ile hayatımıza giren tablo içerisinde,

-- Kontrol ediyoruz.
SELECT * FROM sys.database_scoped_configurations WHERE name ='IDENTITY_CACHE'

 

Bu şekilde Identity değerlerimiz bizim kontrolümüzde arttırımlar yapacaktır. Bu özelliği GUI ile SET edemezsiniz bu yüzde. t-sql kullanmanız gerekmektedir.

Örneğimizi isteyenler bu özelliği OFF yaptıktan sonra deneyip IDENTITY değerlerinin kaldığı yerden devam ettiğini görebilirler.

Kolay Gelsin.

 

2 Replies to “SQL Server 2017 IDENTITY_CACHE Yeniliği”

    1. Selam Salih,

      Evet bu özelliği kapatmanız gerekmekte , Aslında sisteminizin yapısına ve ihtiyacına göre davranış göstermeniz gerekmekte ama bu özelliği kullanacak yapılarınız olması zor gibi.

      Default ta kapatıp sonra ihtiyacınız durumunda aktif etmeniz en sağlıklısı.

      Kolay Gelsin.

Leave a Reply

Your email address will not be published. Required fields are marked *