Contained Availibility Group – SQL Server 2022 Feature

Contained Availibility Group – SQL Server 2022 Feature Bu Yazımızda SQL Server 2022’nin Feature’larından olan Contained Availablity Group’tan bahsedeceğiz. SQL Server Always on ile birlikte birçok kullanıcı oluşturdukları Agent Job ve User’larda zaman zaman problemler ile karşılaşmaktadır. Özellikle hangi job’un primary’de hangi Job’un secondary’de çalışacağı konusu zaman zaman problemler yaratmaktadır. Tamda bu noktada SQL Server 2022 Contained AG özelliği ile bu probleme çözüm getirmek için hayatımıza girdi. Yazımızda adım adım nasıl Contained AG oluştrulur ve oluştururken nelere dikkat etmeliyiz bunları tek tek ele alacağız. 1.Adım: Yeni bir Availablity Group Wizard oluşturuyoruz. Görsel 1: New Availability Group Wizard   2.Adım: Yeni bir AG oluşturuyoruz. Burada önemli nokta Contained seçeneğinin seçilmesi. Reuse seçeneğini yeni oluşturduğumuz Contained AG’de seçmiyoruz Reuse’un kullanımı ile alakalı yazı içerisinde detaylı olarak paylaşacağız. Görsel 2: New Availability Group as Contained   3.Adım: Hangi database’in Contained AG içerisinde olacağını belirliyoruz. Biz örneğimizde ContainedDB’yi örnek olarak ele alacağız. Görsel 3: […]

Contained Availibility Group – SQL Server 2022 Feature

Contained Availibility Group – SQL Server 2022 Feature

Bu Yazımızda SQL Server 2022’nin Feature’larından olan Contained Availablity Group’tan bahsedeceğiz.

SQL Server Always on ile birlikte birçok kullanıcı oluşturdukları Agent Job ve User’larda zaman zaman problemler ile karşılaşmaktadır. Özellikle hangi job’un primary’de hangi Job’un secondary’de çalışacağı konusu zaman zaman problemler yaratmaktadır. Tamda bu noktada SQL Server 2022 Contained AG özelliği ile bu probleme çözüm getirmek için hayatımıza girdi.

Yazımızda adım adım nasıl Contained AG oluştrulur ve oluştururken nelere dikkat etmeliyiz bunları tek tek ele alacağız.

1.Adım: Yeni bir Availablity Group Wizard oluşturuyoruz.

Görsel 1: New Availability Group Wizard

 

2.Adım: Yeni bir AG oluşturuyoruz. Burada önemli nokta Contained seçeneğinin seçilmesi. Reuse seçeneğini yeni oluşturduğumuz Contained AG’de seçmiyoruz Reuse’un kullanımı ile alakalı yazı içerisinde detaylı olarak paylaşacağız.

Görsel 2: New Availability Group as Contained

 

3.Adım: Hangi database’in Contained AG içerisinde olacağını belirliyoruz. Biz örneğimizde ContainedDB’yi örnek olarak ele alacağız.

Görsel 3: Select Databases for AG

 

4.Adım: Biz 2 node’lu bir ortamda bu işlemleri ele alıyoruz. Alwaysonn1 ve Alwaysonn2. Contanined AG içerisinde olmasını istediğimiz replicalar bunlar ve Database’leri bu Node’lar altında HADR olarak tutacağız.

Görsel 4: Select Replicas for AG

 

5.Adım: Örnek olarak oluşturduğum (ContainedDB) database küçük olduğu için Automatic Seeding seçeneği ile secondary replicaya restore etmesini istiyorum. Siz multisubnet ve büyük db’lerde farklı yöntemler ile ilerleyebilirsiniz.

Görsel 5a: Automatic Seeding

Görsel 5b: Automatic Seeding

Görsel 5c: Automatic Seeding

Görsel 5d: Automatic Seeding

6.Adım: Contained AG oluşturulduktan sonra Primary ve Secondary Node üzerinde oluşup oluşmadığını kontrol ediyoruz. Aynı şekilde replica ve database’leride kontrol ediyoruz. Sorunsuz olarak kurulduğunu görmemiz gerekmektedir. Normal AG ile Contained AG arasındaki farkı ikonlarından da farkedebilirsiniz.

Ayrıca ilgili database’in yanında kullanıcıların tutulacağı ayrı bir master ve jobların tutulduğu ayrı bir msdb database’nin oluştuğunu görmemiz gerekmetedir.

 

Görsel 6: Contained Availability Group

 

 

7.Adım: Availabiliity Group’u(AG) sorunsuz kurduktan sonra Contained AG yapısının püf noktası olan Listener objesini create etmemiz gerekiyor.

Görsel 7a: Listener Object Create

Görsel 7b: Listener Object Create

Görsel 7c: Listener Object Create

 

8.Adım: Listener Objesini sorunsuz olarak create ettikten sonra listener ismi ile connect oluyor ve server’dan farklı olarak sadece ilgili ag altındaki database’i görüyoruz. Bunun sebebi ise. Contained_AG_Master ve Contained_AG_Msdb database’lerin okuduğu için sadece o database’i sys.master_files ve sys.databases altından okumasından kaynaklanıyor.

 

Görsel 8: Listener Object Connect

 

 

 

9.adım: Listener objesini oluşturduktan sonra aşağıda hem server üzerinden hemde listener üzerinden job ve kullanıcılar oluşturacağız. Burada oluşturmuş olduğumuz kullanıcı ve job’un farklı master ve msdb altında oluştuğunu göreceğiz.

Aynı zamanda Primary Node altında oluşturduğumuz jobun kendi msdb’sinde Listener altında oluşturduğumuz job’un ise contanined msdb database’inde oluştuğunu göreceğiz.

Note: Hem server’da hem listener’da aynı işlemi yapan job oluşturulması soruna yol açabilir. Bu işlemleri lütfen kontrollü şekilde yapınız.

 

Görsel 9: Primary Node and Listener Job Create

 

10.adım: Yukarıdaki örneğe benzer şekilde kullanıcılarıda Primary Node ve Listener üzerinde oluştuduğumuzun farklı olduğunu bu yüzden kullanıcıları oluştururken dikkat edilmesi gerekmektedir. Kullanıcı kaynaklı erişim sıkıntılarına neden olabilir.

Görsel 10: Primary Node Login (UserServer)

Görsel 11: Secondary Node Login

Görsel 12: Listener Login (UserListen)

11.Adım: Bu adımda failover sonrasında jobların secondary Node üzerine gidip gitmediğini kontrol edeceğiz.

Görsel 13: Failover Process

Failover sonrası secondary node kontrol ettiğimizde hiçbir kullanıcı ve job’un gelmediğini fakat listener üzerinden bağlandığında tüm kullanıcıları ve jobları göreceğiz. Sebebi ise tüm bilgiler contained_ag_master ve contained_ag_msdb altında tutulmaktadır. Listener her zaman primary çözer ve yeni primary’imiz alwaysonn2 olmuştur.

 

Contained AlwaysOn Reuse Kullanımı

Adından da anlaşılacağı üzere, Contained AG için otomatik oluşan ag_master ve ag_msdb database’lerinin tekrar kullanımı ile alakalıdır.

Biz bu  database’leri contained ag oluştururken yeniden oluşturmasın varolanları kullanmasını istiyorsak bu ilgili database için bu seçeneği seçerek ilerleyebiliriz. Aşağıda konuya ilişkin örneği inceleyebilirsiniz.

Ortamda daha önce kurduğumuz ContainedDB ve Contained AG’ye bağlı Contained_AG_master ve Contained_AG_msdb database’lerimiz var. Contained_AG_master ve Contained_AG_msdb database’lerimizi tekrar kullanmak aşağıdaki adımları izleyerek devam edeceğiz.

1.Adım: AG’yi primary node üzerinden siliyoruz. Bu adım reuse seçeneğinin kullanımını göstermek için yapılmıştır. Siz bu işlemi production ortamda denemeyiniz.

Görsel 14: Contained AG Drop

 

 

2.Adım: Secondary ortamda ContainedDB ve Contained AG’ye bağlı Contained_AG_master ve Contained_AG_msdb database’lerimizin Restoring mode’a geçtiğinden emin oluyoruz.

Görsel 15: Secondary Node Databases

 

3.Adım: master ve model database’lerimizin oluştuğu isim ile aynı olacak şekilde AG’mizi oluşturuyoruz. Eğer AG ismini farklı yaparsanız database ve ilgili db’ye ait master, msdb database’lerini AG’ye ekleyemezsiniz.

 

Görsel 16: Contained AG and Reuse System Databases

 

 

4.Adım: Sadece Eklemek istediğimiz database’i seçiyoruz. Özellikle ilgili AG için master ve msdb database’lerini seçmiyoruz.

Görsel 17: Contained AG Database

 

5.Adım: İlgili Replicayı ekledikten sonra Join Only diyerek AG’ye dahil etmesini istiyorum.

Görsel 18: Contained Database Join

 

 

6.Adım: Finish dedikten sonra ekleme işlemini gerçekleştiriyoruz. Eğer eklemez ise ilgili database’lerden log backup alıp restore ettikten sonra ekleyecektir.

Görsel 19: Contained Database Join

Görsel 20: Contained Database Join

 

Benzer Yazılar

MSSQL Load(Stress) Test – II

SQL Server 1 gün önce

SQL Server üzerinde yük oluşturarak kaynak kullanımlarını ve sql server’ın bu yük ile başa çıkma durumu incelenmek için zaman zaman bazı testler yapılır. Yük oluştururken Microsoft tool’u ile bunu yapmak isterseniz daha önce kaleme aldığımız MSSQL Load (Stress) Test adlı makalemize bakabilirsiniz. Bu testleri yapmak için birçok tool vardır. Bunlardan biri de Adam Mechanic’in yapmış olduğu SqlQuerryStress Tool’u dur. Bu tool ile istediğiniz sorguyu istediğiniz thread’de ve istediğiniz sayıda göndererek sistem üzerinde yük oluşturabilirsiniz. Bu başlık altında SqlQueryStress tool’un kullanım durumuna ve kullanım sonrasında Sql Server üzerindeki yükleri inceleyeceğiz. Öncelikle bu tool’u aşağıdaki linkten indirebilirsiniz. İndirdikten sonra exe’yi yönetici olarak çalıştırmanız tool’un başlatılması için yeterli olacaktır. Bu tool’u birden fazla kez açıp farklı sorgularda gönderebilirsiniz. https://github.com/ErikEJ/SqlQueryStress/releases Görsel-1 Görsel – 2 Görsel – 3 Exe’yi başlattığımızda yukarıdaki görsel bizi ilk olarak karşılayacaktır. Burada başlatmadan önce Database button’u ile yükü hangi server ve database üzerinde, hangi kullanıcı ile yapacağımız bilgisini girmemiz gerekmektedir. […]

MSSQL Load(Stress) Test

SQL Server 1 gün önce

Bu yazıda SQL Server üzerinde yükler oluşturacağız, yük oluştururken SQL Server üzerindeki workload’ları inceleyeceğiz. SQL Server’da Yük Testi (Stress Testi) oluşturmak istediğimizde birçok tool önümüze çıkacaktır. Microsoft bu testi yapabilmemiz için bizimle RML Utilities Tool’unu paylaşmıştır. Öncelikle tool’u PC’inize kurmak ve yüklemek için aşağıdaki adımları takip etmelisiniz. Aşağıdaki linke girşi sağladıktan sonra downlaoda etmelisiniz. https://www.microsoft.com/en-us/download/details.aspx?id=103126 Görsel – 1 Görsel – 2 Kurulum başarılı şekilde tamamlandıktan sonra Tool’un aşağıdaki path’e kurulduğunu teyit edebilirsiniz. “C:\ProgramData\Microsoft\Windows\Start Menu\Programs\RML Utilities for SQL Server\” Görsel – 3   CMD’yi açtıktan sonra; aşağıdaki parametreleri kullanarak kendi yazmış olduğumuz sorguları stress testi için gönderebiliriz. Görsel – 4 Microsoft bu testi yaparken oStress komutunu kullanarak yapmaktadır. T-Sql query’lerin yük oluşturabilmesi için tasarlanmıştır. Bu sayede veritabanına ciddi bir yük bindirebilirsiniz. SQL Server üzerinde yük üretmek için bir database’e ihtiyacımız olacak. Biz bunun için AdventureWorks Veritabanını kullandık. Aşağıdaki link üzerinden bu Database’in backup’ını indirerek Restore edebilirsiniz. https://github.com/Microsoft/sql-server-samples/releases/download/adventureworks/AdventureWorks2022.bak Yük oluştururken 3 adet […]

SQL Server Plan Cache Temizlemenin 9 Farklı Yolu

SQL Server 4 gün önce

SQL Server Cache Temizleme Yöntemleri Bu yazımızda SQL Server’da cache problemleri ile karşılaştığımızda hangi yöntemle nasıl çözümler üretebileceğimizin üzerinde duracağız. Bu işlem sistemde öngörülemeyen sorunlara yol açabileceğinden, komutları çalıştırmadan önce uzmanlardan yardım almanızda fayda olacaktır.   Cache üzerinde sorun yaşamamıza neden olacak bazı durumlar vardır; Query’lerde çok fazla Recompile kullanımı. Özellikle Store Procedure içinde yer alan Option Recompile kullanımı. Dynamic T-SQL code’ların çok fazla kullanımı. SQL Server Instance’ın ihtiyacı olan memory’den daha az memory verilmesi. Uzun süre çalışan ve size olarak çok fazla data çeken query’ler Index’siz kullanılan query’ler. Birden fazla SQL Server Instance kullanımında var olan Memory’den daha fazla memory kullanımına izin verilmesi.   Yukardaki durumlar memory dar boğazı yaşamamıza neden olacaktır ve bunun sonucunda cache temizleme ihtiyacı duyacağımız durumlar ortaya çıkması olasıdır. Cache temizlemenin birçok yöntemi vardır. Bu yöntemleri birlikte ele alacağız.   1-) DBCC FREEPROCCACHE Bu komut yardımı ile bir Resource pool’u ya da specific bir planı […]

0 Yorum

Yorum Yaz

Rastgele