SQL Server Kurulumu

  Sql Server kurulumu diğer veritabanlarının kurulumuna göre nispeten kolay bir kuruluma sahiptir. Ancak varsayılan özellik ve ayarlar tamamen kabul edilerek bir kurulum yapılırsa performans ve güvenlik konularında sorunlar yaşanabilir. Burada Microsoft’un “best practice” önerilerine göre SQL Server 2019 enterprise versiyonunun kurulumunu ve kurulum sonrası konfigürasyonunu anlatacağız. Değişik versiyonların arasındaki farklılıklara burada değinmeyeceğiz ancak enterprise versiyonunun en kapsamlı versiyon olduğunu belirtelim. Değişik versiyonlara göre işletim sistemi gereklilikleri değişebilmektedir kurulum için. SQL Server’ın Domain Controller sunucusu üzerine kurulmaması önerilir.
  SQL Server kurulacak sistemi test etmek isterseniz I/O performansını test etmek için kullanılan SQLIOSIM isimli araçla ilgili şu yazıdan bilgi alabilirsiniz. Depolama performansını iş yükü altında test etmek için kullanılan DISKSPD aracıyla ilgili olarak da şu yazıdan bilgi alabilirsiniz. 
  Aşağıda yeri geldikçe microsoft dökümanlarının bağlantılarını da paylaşacağım.  SQL Server kurulumu için .NET framework gereklidir. Eğer sistemde kurulu değilse SQL Server kurulumu esnasında otomatik başlayacaktır. SQL Server kurulumu için gerekli donanım ve yazılım gereksinimlerine  şu yazıdan bakabilirsiniz. İlk kurulum ekranında aşağıdaki ekranla karşılaşıyoruz: Installation menüsünden en üstteki seçeneği seçiyoruz.

Burada kutuyu işaretleyip güncellemeleri kurulum öncesinde kontrol edip kurulmasını sağlayabiliriz. Kurulumdan sonra da güncellemek mümkündür. Değişik senaryolara göre istenilen seçenek uygulanabilir.

Daha önce kurulmuş bir instance için eklemeler de yapabiliriz. Yeni bir instance kurulumu da yapabiliriz. Biz yeni bir kurulum için üstteki seçeneği seçiyoruz.

SQL server için seri numaramızı giriyoruz. Üstteki seçenekle ücretsiz süreli kullanımı da seçebiliriz.

Lisans koşullarını kabul ediyoruz.

Burada kuracağımız özellikleri seçmemiz gerekiyor. Bu özellikler :

Database Engine services : Veritabanının temel bileşenidir. Veriyi depolayan, işleyen ve güvenliğini sağlayan temel servistir. Bu yazıdan detaylı bilgiler edinebilirsiniz.
Sql Server Replication : Veritabanı replikasyon işlemleri için gerekli servistir. Bir sunucu ve veritabanındaki bir nesneyi bir başka sunucudaki veritabanına replike etmek için gereklidir. Tekil sunucu kuruyorsanız ihtiyaç yoktur.
Full Text and Semantic Extractions for Search : Büyük text veri içeren tablolarda arama işlemlerinde kullanılır.
Data Quality Service: Veri düzeltme, standartlaştırma, tutarlılık kontrolü, tekilleştirme vb. gibi işlemler için kullanılır.
Polybase Query Services for External Data : Polybase client bağlantı aracı kurmadan Oracle, Teradata, MongoDB, Hadoop, Cosmos DB gibi veritabanlarından ve büyük veri platformlarından T-SQL kullanarak SQL server’ın sorgulanabilmesini sağlar. Documentation Components : Yardım dökümanları kurulur.
Analysis Servces : iş zekası, veri analizi, raporlama uygulamaları için veri madenciliği yapmamıza yarayan bileşendir.
Integration Services : İki Sql server veritabanının birbiriyle entegre olarak aktarımına olanak sağlar.
Client Tools Connectivity : İstemcilerden veritabanı sunucusuna bağlantı için gerekli bileşenleri içerir.
Client Tools Backward Compatiblity : Eski sürüm veritabaları için bağlantı desteği

Tüm özelliklere değinmedik, belli başlı önemli olanları açıklamaya çalıştık. Kurulmak istenen bir özellik istenildiği zaman kurulum başlatılıp eklenebilir. Kullanılmayacak olan özelliklerin performans açısından kurulmaması önerilir.

Instance ismi girebilir ya da default instance seçebiliriz. Default seçtiğimizde sunucu ismiyle bağlantı kurmak mümkündür. İsim verdiğimizde sunucu adıyla birlikte instance adı da gerekli olacaktır.

SQL server kurulumunu varsayılan servis hesaplarıyla kurma imkanı varken, önerilen “best practice” kurulum şekli, tüm servis hesapları için ayrı hesaplar oluşturulmasıdır. Özellikle domain ortamında kurulum yaparken, servis hesaplarının yalnıza kurulum için kullanılan, oturum açılmayan yeni domain hesabı olması, “password never expire” seçeneği ile oluşturulması, sunucu üzerinde kesinlikle Administrator olmaması önemlidir. Varsayılan servis hesaplarıyla kurulum yaparsanız, always on kuramaz, cluster yapılandıramazsınız, import-export işlemlerinde, veri taşımada sorun yaşayabilirsiniz. Bunlar lokal system hesapları olduğu için ağınıza erişemez ve bunun getireceği problemlerle karşılaşabilirsiniz.Sql Server Browser servisi için kullanıcı gerekli değildir. Bu ekranda Sql Agent’ın otomatik olarak başlaması için Startup Type bilgisini automatic olarak değiştiriyoruz.
  Kırmızıyla işaretlediğimiz kutu (grant perform volume maintenance task) çok önemli bir özelliktir. SQL server, veritabanının büyümelerinde windows tan alan talep eder. Windows bir alan verir. SQL server bu alanları sıfır bir lerle yeniden yazar her seferinde ve bu da performans kaybına sebep olur. Bu işaretlendiği zaman windows SQL server’a istediği şekilde bir disk verir. 2016 öncesi sürümlerde group policy ayarlarından yapılan bir ayarlama iken artık kurulum esnasında sorulan bir özelliktir. SQL Server sunucunun collation ayarı sonradan değiştirmesi zor ama mümkün olan ve değiştirilmesi önerilmeyen bir ayardır. Kurulum esnasında size en uygun dil seçeneğini seçmelisiniz. Collation seçmeden sonraki sayfaya geçmemeye dikkat edilmelidir.

Bu ekranda sa kullanıcısına bir şifre vermek gereklidir ve mevcut oturum açmış kullanıcıyı da sql server admin olarak ekliyoruz. SQL Server’ı kendi hesabımızla kurmak şifre değişmesi, iş değişikliği ve hesabın kapanması vb. sebeplerle önerilmeyen bir kurulumdur. Çünkü bu hesap bilgileri arka planlarda bir çok noktada kaydedilmektedir. Şifresi asla değişmeyecek bir domain hesabıyla kurulması en doğrusu olacaktır. Güvenlik açısından önerilen güvenli bağlanma şekli windows authentication seçeneğidir. Ancak veritabanına bağlanacak bazı yazılımlar Sql Server authentication ister, bu yüzden mixed mode seçmekte fayda vardır.

Data Directories sayfasında dosyalarımızın tutulacağı disk alanlarımızı belirliyoruz. Eğer cluster ortamına, storage üzerine kuruyorsak hangi RAID yapısının daha uygun olacağına veritabanımızın özelliklerine göre karar vermemiz gerekir. Bu konuda genel tavsiyeler şu şekildedir: RAID 10 : yüksek I/O olan veritabanları için önerilir. Ancak disklerin yarısı kopyalama için kullanıldığından pahalı bir çözümdür. SQL server için önerilen en iyi raid yapısıdır. RAID 5 / RAID 6 : Düşük yazma performansna ama yüksek okuma performansına sahiptir. Read only veritabanları için düşünülebilir. Transaction Log’larının, TempDb nin, yazma performansı çok önemli olduğu için Raid5 pek uygun değildir. SQL Server’ın raid yapılarıyla uyumuna dair şu yazıya bakabilirsiniz.

SQL Server veriyi diskte tutmak ve yönetmek için extent denilen yapıları kullanır. Bir extent 8 page’den oluşur. Her bir page 8 kb’dır ve extent 64 kb boyutundadır. Bu yüzden SQL Server’ın kullanacağı diskleri 64K ile biçimlendirmek önerilir. Bir page de tek bir veritabanı nesnesine (tablo, index vb. ) ait bilgi tutulabilir ama extent’te birden fazla objenin verisi tutulabilir. Bu tür extent’ler mixed extent olarak adlandırılır. Tek bir objenin verisini barındırıyorsa uniform extent denir. 

Kurulumda istenen bütün dizinlerin ayrı disklerde yer alması önerilmektedir. Veritabanı data ve log klasörleri için de, tempdb data ve log kayıtları için de ayrı diskler kullanılması önerilmektedir. Burada genel olarak yapılan bir hata vardır. Özellikle sanallaştırma ortamlarında aynı fiziksel disk üzerinde oluşturulan farklı mantıksal diskler kullanılmaktadır. Veri fiziksel olarak ayrı tutulmalıdır. Bu durumda şu şekilde bir disk yapılanması yapabiliriz.

C:\   işletim sistemi D:\ Data root directory: Sistem veritabanları ve kurulum dizinidir ve işletim sistemi ile aynı diskte olmaması önerilir. Data, Log, backup ve tempdb dosyalarının da burada olmaması önerilir. E:\DATA : Database dosyalarının (mdf, ndf) tutulacağı disk. F:\LOG : Log dosyalarının tutulacağı disk G:\TEMPDATA : Tempdb data dosyalarının tutulacağı disk. Tempdb, geçici tabloların, geçici değişkenlerin, online index operasyonlarının ve sıralamalarının,dbcc checkdb komut aksiyonlarının, cursor’ların vb. gibi bir çok işlemin geçici olarak tutulduğu veritabanıdır. H:\TEMPLOG : Tempdb log dosyalarının tutulacağı disk. Tempdb logları da, database loglarının da ayrı disklerde olması, olağanüstü büyümeleri ve diski doldurma ve diskteki diğer dosyaları etkileme ihtimalini ortadan kaldırmaktır. I:\BACKUP : Backup dosyalarımızın tutulacağı disk. Burada backup dosyalarımızın data ve log dosyalarımızla ayrı sunucularda hatta ayrı lokasyonlarda olması çok önemlidir. Çünkü veritabanının zarar gördüğü bir felaket durumunda eğer aynı sunucuda, lokasyonda barındırıyorsak, backup da zarar görecektir ve verilerimizi kurtaramayacağız demektir.

Tempdb dosya sayısı işlemci core sayımız 8 den az ise core sayısı kadar, 8 den büyük ise 8 olarak ayarlanmalıdır. Initial size hem data hem log için 8MB da bırakılmamalıdır. Daha yüksek bir değer seçilmelidir. Dosyalar için belirlenen boyutlar birbirinin aynı olmalıdır. Bu konuda şu yazıdaki tempdb konfigürasyonuna dair microsoft tavsiyelerine göz atabilirsiniz.

MaxDOP bir sorgu için kaç tane işlemci çekirdeğinin kullanılacağı ayarıdır. Sunucunun iş yüküne, instance sayısına vb. göre seçilmelidir. Varsayılan olarak tüm core lar kullanılmaktadır. Başlangıç olarak aynen bırakabilirsiniz.

SQL Server veritabanının sunucu hafızasının ne kadarını kullanacağını belirleyebiliriz. Biz yazıda kurulum sonrası konfigürasyon kısmında ele aldık. Bu ekranı atladık.

Filestream veritabanındaki tablolara, windows un klasör yapısından birer dosyaymış gibi erişebilmemize yarayan bir özelliktir. Belge yönetim sistemlerinde, sharepoint gibi yazılımlarda pdf leri dışardan okumamıza izin verir. Bu aşamayı da geçtikten sonra özet bir ekran karşımıza gelir ver install butonuna basınca kurulum başlar.

Kurulum sonrası ayarlamalar 1 – Veritabanını kurduktan sonra SQL Server Management Studio’yu Microsoft’un şu sayfasından indirip kurmamız gerekiyor. 2- Sunucu power ayarlarından “high performance” seçeneği seçilir.  Buradaki diğer seçenekler dizüstü bilgisayarlar için etkili seçeneklerdir. Sunucularda ihtiyaç olmayan güç tasarrufu seçenekleridir. Bu tarz güç tasarrufu seçenekleri BIOS yazılımlarında da bulunabilmekte ve açık bırakıldığında sunucu performansını kötü etkileyebilmektedir.

3- Local Policy ayarları yapılır.SQL server’ın arka planında çalışan bazı işlemlerle ilgili kullanıcıların ilgili yetkilere atanması gerekir. Başlat-> secpol.msc açılır. Lokalde yapılırken bu yol takip edilir ama domain ortamında sunuculara merkezi olarak bu politikalar basılabilir. Bu ekranda “Local Policies –> User Rights Assignment” açılır.

Act as part of the operating system : İşletim sistemi gibi çalışma rolü veriyoruz. Bunun için SQL Agent hesabı eklenmeli. Adjust memory quotas for a process : İşlemci , ram gibi kaynakları sorgu bazında, proses bazında atayabilmek için agent kullanılabilir. Agent’a bu yetkiyi kullandırabilmek için buraya eklenmesi gerekir. Bypass traverse checking : SQL Agent eklenir.Sorgularda yardımcı olacak bir izin. Windows kullanıcısına klasör dizininde engellemeye takılmadan gezinme imkanı verir. Lock Pages In Memory : Buna da servis hesabını eklememiz gerekiyor. SQL server bu ayar ile Windows’un memory yönetimini aşıp memory de kendine ait alanları tutmaya devam eder. İşletim sisteminin memory’de kendine ait yerleri boşaltmasının önüne geçer. Memory azaldığında işletim sistemi hafızayı boşaltmaya başlar çünkü. Log on as a batch job : Job’lar içerisinde batch dosyası , komut çalıştırabilmek için gereklidir. SQL Agent hesabı eklenir. Log on as a service : Servis hesabının da Agent hesabının da burada ekli olması gerekir. Servis hesabının değiştirilmesi pek önerilmez ama değiştirilirse buraya yeni servis hesabının eklenmesi gerekir. Perform volume maintenance tasks : Buraya mutlaka SQL server servis hesabı eklenmiş olmalıdır. Replace a process level token: Windows kullanıcısına farklı bir kullanıcıyla işlem yapma imkanı verir. SQL Agent hesabı “run as” şeklinde başka prosesler çalıştırabilir. Buradaki tüm değişiklikler yapıldıktan sonra veritabanı sunucusunu restart ediyoruz. Buradaki policy ayarlarına dair detaylı bilgiye şu sayfadan erişebilirsiniz.

4 – SQL server configuration manager’ı açıyoruz.

Burada istersek kullanıcıyı değiştirebiliriz. Daha önce kurulumda karşımıza çıkan filestream buradan da açılabilir. Burada startup parametrelerine baktığımızda master sistem veritabanının yerini görüyoruz. İstersek buradan path değiştirebiliriz. Ayrıca buradan bağlantı şeklimizi değiştirebiliyoruz. Örneğin single user bağlanma, açılış da bazı trace flag leri çalıştırma vb. gibi. Bu ekranda yapılan değişiklikler servisin restart edilmesini gerektirir.

5- Yine configuration manager da aşağıdaki menüye giriyoruz.

SQL Server’ın kullandığı varsayılan 1433 portunu istersek buradan değiştirebiliriz. Burada eğer 1433 portunu değiştirmeye karar verirsek tekrar eden tüm bloklardan değiştirmemiz gerekir. SQL server’ın varsayılan portunun 1433 olduğu bilindiğinden güvenlik açısından önemli bir seçenektir portu değiştirmek. Yerel bağlantılarda güvenlik nedeniyle SQL Server 1433 portunu tamamıyla kapatmaz. Port değiştirmek uzak bağlantılarda mümkündür. 6- SQL Server kurulduktan sonra upgrade yapmak istersek https://sqlserverbuilds.blogspot.com/ adresinden son çıkan service pack ve cumulative update leri indirip kurabiliriz 7- Kurulum esnasında da memory ayarları gelmişti ancak, kurulum sonrasına ertelemiştik. İstenirse o aşamada da yapılabilir. SSMS’da sunucunun properties ekranında memory sekmesine geliyoruz. SQL server için atanan maximum hafıza boyutu önerilen olarak sunucunun %80 idir. Böyle bir sınırlama getirmemizin nedeni SQL Server’ın sunucudaki tüm hafızayı kullanmaya meylidir. Minimum server memory alanı ise ayar yaptığımız instance için “Minimum server memory” alanına girdiğimiz boyut kadar hafıza rezerve etmemizi sağlar. Aynı sunucuda birden fazla instance olduğunda, ya da başka çalışan uygulamalar sözkonusu olduğunda tercih edilen bir ayardır.

8- Processors sekmesinde de kullanılacak core lar seçilebilir. Ya da boş bırakılarak tüm işlemci corelarının kullanılacağı şekilde bırakılabilir. Varsayılan budur.

9 – Security tabında authentication mode’u değiştirebilir, başarılı girişleri, başarısız giriş denemelerini ya da her ikisini loglara yazmasını seçebiliriz. 10 – Connections tabında maximum bağlantı sayısı sınırlandırabiliriz. Sıfır değeri sınırlandırmayı kaldırır. 11 – Kurulum tamamlandıktan sonra sunucu üzerinde firewall aktif ise, SQL Server’ın kullandığı portlara izin verilmesi, antivirüs var ise veritabanı dosyalarını (mdf, ndf, ldf, bak, trn,log, txt) taramasının engellenmesi performans açısından önemlidir. 12- SQL Server kurulumu tamamlandığında kurulum dizinine ConfigurationFile.ini isimli bir dosya atar. Bu dosya kurulumda seçtiğiniz konfigürasyonu içerir. Başka bir sunucuya aynı konfigürasyonla kurulum yapmak istediğinizde yalnızca bu dosyayı göstererek aynı özelliklerde bir sunucu kurabilirsiniz.