10 Aralık 2015 Perşembe

SQL Server'da DBA'ler için CheckList 1.Bölüm


Genel DBA Best Practices
Günlük Olarak Yapılması Beklenenler:
·         OS event log'lar ve Sql Server Log'lar da olağandışı bir şey olup olmadığı kontrol edilmelidir.
·         Zamanlanmış olan job'ların hepsinin düzgün şekilde çalıştığı kontrol edilmelidir.
·         Backup'ların başarılı şekilde güvenli bir ortama kayıt edildiği doğrulanmalıdır.
·         SQL Server'ın out of disc space hatası almadığı kontrol edilmeli ayrıca iyi performans sağlanabilmesi için bütün diskler üzerinde en az %15 ve üzeri boş alan bırakılmalıdır.
·         Gün içerisinde belli aralıklarla Profilier/SQL Trace ile performans izlenmelidir.
·         Düzenli olarak sistemde sorunlara sebep olabilecek problemler tanımlanmalı ve takip edilmelidir.
·         Sunucularda yapılan değişiklikler için düzenli kayıtlar tutarak performans ve benzeri sorunlar tanımlanarak dokümante edilmelidir.
·         SQL Server' da alert tanımlayarak herhangi bir problem oluşma durumunda e-mail ile bilgilendirilin ki doğru zamanda hatayı giderebilmek için aksiyon alma imkânı yaratın.
·         Düzenli olarak backup'lar alarak test server'lar da bunları çalışılabilirliğini test edin. Her gün aldığınız bütün backup'ları test etmek zorunda değilsiniz. Fakat alınan backup’ların doğru ve çalışır durumda olduğundan emin olun.
·         Profesyonel gelişiminizi ilerletmek için DBA olarak yeni bir şeyler öğrenmeye zaman ayırın.

INSTALLATION
·         Acil durumlarda hızlı aksiyon alabilmek için SQL Server Instance yükleme talimatlarının en ince ayrıntısına kadar yazılı olarak bulunması gerekmektedir.

·         Eğer mümkünse,  bütün SQL Server Instance'ların tutarlı olabilmesi için şirket kapsamında yükleme ve konfigre seçenekleri aynı olmalıdır.

·         SQL Server                 Servis'lerini instance üzerinde yüklemeyin.(Microsoft Full-Text Indexing, Reporting Service, Analysis Service gibi...)

·         Yüksek performans için SQL Server Windows işletim sistemi üzerinde kullanın.

·         Optimum performans sağlamak için fiziksel server'ınızda bir tane SQL Server Instance çalıştırın.

·         En verimli I/O performansı için databse file(.mdf) ile log file (.ldf) farklı disklerde konumlandırın.

·         Eğer Temdb sistem içerisinde çok yoğun kullanılıyorsa, Tempdb'nin de ayrı bir disc üzerinde çalışmasını sağlayın.

·         Domain Controller üzerinde SQL Server kurulumu yapmayın.

·         SQL Server'ın NTFS formatında ki diskte yüklü olduğundan emin olun.

·         NTFS data file encryption ve compression’ı(sıkıştırma) SQL Server database ve log dosyalarında kullanmayın.

UPGRADİNG

·         Upgrade işlemine başlamadan önce SQL Server Upgrade Advisor'u çalıştırın.

·         Yükseltme işlemine başlamadan önce gerekli olan değişiklikleri yapın.

·         Production ortamına geçmeden önce upgrade işlemini test ortamında deneyin ve uygulamalarınızı yeni upgarde edilmiş SQL Server üzerinde deneyin.

·         Upgarde işlemini yapmadan önce yeni sürümde çıkabilecek problemlere karşı geri dönüş için planlamanızın olduğundan emin olun.

·         SQL Server cluster'ları upgarde etmeyin.  Bunun yerine yeni bir donanım üzerinde rebuild edin.

·         SQL Server önceki bir sürüm üzerinden yükseltme yaparsanız, bütün veritabanı istatistiklerinizi güncellemeniz gerekmektedir. Çünkü istatistikler update işlemi esnasında otomatik olarak güncellenmezler. Manuel olarak müdahale etmeniz gerekir.

SECURİTY

·         SQL Server'ın fiziksel güvenliği sağlanmalıdır, yetkisiz bir kullanıcının fiziksel olarak server'lara bağlanması engellenmelidir.

·         Sadece gerekli olan network kütüphaneleri ve protokolleri SQL Server instance'da yüklü olmalıdır.

·         Sysadmin yetkisi olabildiğince minimize edilmelidir.

·         Sadece ihtiyaç dâhilinde sysadmin yetkisi ile giriş yapılmadır. Sysadmin yetkileri gerekli değilken DBA'ler için farklı account'lar tanımlanmalı ve normal durumlarda bu yetki ile login olunmalıdır.

·         SA'ya olabildiğince karmaşık bir şifre atanmalı ve SQL Server'a bu şifre kullanılarak asla giriş yapılmamalıdır. Bunun yerine SQL Server'a sysadmin olarak login olurken Windows Authentication hesabı kullanılmalıdır.

·         Kullanıcılara işini gerçekleştirebileceği minimum oranda yetki verilmelidir.

·         Kullanıcılara direk olarak tablolara erişmek yerine stored Procedure ya da view'lara erişim yetkisi sağlayın.

·         SQL Server Login yerine mümkün olduğunca windows authentication login'i kullanın

·         SQL Server login hesabı için güçlü bir şifre kullanın.

·         Public database rolü için izin yetkilerini kısıtlandırın.

·         SQL Server'a artık bağlanmasına ihtiyaç kalmayan kullanıcıların login hesaplarını temizleyin.

·         Sysadmin olmayanlara asla xp cmdshell yetkisi vermeyin.

·         Production ortamında bulunan SQL Server instance'lardan sample veritabanlarını silin.

·         Kullanıcı gruplarını yönetebilmek için Windows Global Groups ya da SQL Server Role benzer izinleri kullanın.

·         SQL Server üzerinde network paylaşımı yapmaktan kaçının.

·         Login auditing ilgili düzenlemeler yapılarak kimlerin login’lerinin başarılı olup kimlerin başarısız olduğunun takibini yapın.

·         SA hesabı ile uygulamalardan SQL Server'a erişmek için giriş yapılmamalıdır.

·         SQL Server'ın arka planda firewall ile korunduğundan emin olun direkt olarak internete savunmasız olarak bağlantıya izin vermeyin.

·         Her bir SQL Server servisi farklı bir Windows domain account'u altında çalıştırılmalıdır.

·         SQL Server servis hesapları ihtiyaç olunan minimum düzeyde izin ve yetkiler ile çalıştırılmalıdır.

·         SQL Server'ın kurulu olduğu server da antivirüs ve antispyware koruması için güvenlik programları kullanın. Gün içerisinde kullanıcı aktiviteleri yoğunluğu azken sistemi taratın.

·         Bütün SQL Server backup'larınızı 3. parti uygulamalar ile şifreleyin(Red Gate, SQL Backup Pro)

·         SQL Server güvenlik taraması sisteminizin güvenlik açıklarınızı tespit eder.

·         SQL Server ve client arasında SSL ya da IPSEC bağlantısını kullanın.

·         Eğer SQL Server 2005/2008 kullanıyorsanız password policy kontrolünü aktif edin.

JOB MAINTENANCE

·         Aynı SQL Server Instance içerisinde farklı job'ların örtüşmesine izin vermeyin. İdeal olan, her bir job farklı zamanlarda çalışacak şekilde planlanmalıdır.

·         Yeni bir job oluşturduğunuz zaman hataları yakalayabileceğinizden emin olmalısınız. Log job aktivitileri ve fail olma durumunda sizi haberdar edecek alert'ler tanımlamasınız.

·         Bütün job'lar atayabileceğiniz ve bir SQL Server login hesabı tanımlayıp job'ların çalışması bunun üzerinde sağlanmalı ve bütün job'lar bu hesap altında toplanmalıdır.

·         Eğer tanımladığınız job'lar T-SQL kodu içeriyorsa, yazılan kodun optimize ve verimli çalıştığından emin olun.

·         Periyodik olarak(günlük,haftalık yada aylık ) logical fregmentation önüne geçebilmek için veritabanızdaki index'lerin rebuild yada reorganize edilmelidir.

·         DBCC ve CHECKDB'yi belli periyotların bütün veritabanı üzerinde çalıştırarak database'in bütünlüğünü denetlemek gerekir.

·         DBCC komutlarını transaction'ın yoğun olduğu zamanlarda kullanmaktan kaçınmak gerekir. Bu komutlar I/O oranını yoğunlaştırır ve SQL Server'ın performansını düşürmektedir.

·         Eğer çok nadiren SQL Server Service'lerini restart'larsanız muhtemel olarak SQL Server'ın Log'ları ciddi miktarda büyüyecektir. Bundan dolayı bunların yüklenmesi ve görüntülenmesi ciddi zaman gerektirir. Güncel error log'u kapatıp yeni bir tane oluşturabilirsiniz.  Bu sayede log'lar ciddi şekilde büyümeyecektir. Bu haftalık olarak yapılabilir.

SQL SERVER CONFIGURATION SETTINGS

·         SQL Server configuration settings'in ayarları default’tan gelen şekli ile kalmalıdır.  Yapılacak olan herhangi bir değişiklik sadece deneyim sahibi olan bir dba tarafından gerçekleştirilmeli ve yapılacak olan değişikliğin server'a lehne veya aleyhine olacak sonuçları kestirebilmelidir.

·         Eğer 32 bit'lik SQL Server kullanıyorsanız ve RAM miktarınız 4 GB'dan yüksekse AWE ayarlarınızın doğru şekilde ayarlandığından emin olun.

·         Çoğu durumda "maximum server memory" ve "minimum server memory"  varsayılan değerlerinde bırakılmalıdır. Çünkü SQL Server, serverdaki memoryi dinamik olarak paylaştırıp optimum performansı sağlar. Eğer 32-bit AWE memory yada 64-bit AWE memory kullanıyorsanız, bu durumda server'daki fiziksel RAM miktarından daha az olarak "maximum server memory" değiştirebilirsiniz.

DATABASE SETTİNGS

·         "Auto create statistics" ve "auto update statistics" seçenekleri tüm user'lar da default olarak bırakılmalıdır. Çok ender durumlar söz konsu olduğu zaman bunlar kapatılabilir ve eğer kapalı durumdaysa manuel olarak istatistikleri update ederek veriler güncel tutulmalıdır.

·         Otomatik Shrink seçeneği her ne kadar çok cazip gözükse de bu çok fazla tavsiye edilen bir seçenek değil. SQL Server kaynaklarını gereksizce harcamak ayrıca index fregmentasyonuna (parçalanma) sebep olacaktır. Eğer ki shrink'in kullanılması gereken bir durum söz konusu ise bunu manuel olarak yapın. Otomatize etmeyin.

·         AutoGrowth seçeneği ile database boyutunun otomatik olarak yönetilmesine güvenilmemelidir. Bunun yerine database'in büyüme trendini izleyerek ileriye yönelik planlama yapıp database boyutu düzenlenebilir. AutoGrowth seçeneği sadece beklenmedik büyümeler için kullanılmalıdır.

REPLICAITON

·         İhtiyaçlar replication topolojisi tasarlanmadan önce net bir şekilde belirlenmelidir. Başarılı bir replication için öncesinde iyi bir planlama yapılmalıdır.

·         İdeal olanı publisher, distributer ve subscriber'ların farklı fiziksel donanımlarda bulunmasıdır.

·         Backup'ların test edilmesi ve yapıya göre belirlenmiş uygun bir restore stratejisi oluşturulmalı ve dokümante edilmelidir.

·         Gerçekten SQL Server replication üzerinde çeşitli gelişmiş modifikasyonlara ihtiyaç duymadıkça performans ve diğer konularda sorunlar ile karşılaşmamak için SQL Server sunmuş olduğu seçenekler üzerinde değişiklik yapmayın. Eğer bunlar üzerinde değişiklik yapıldıysa bütün yapılan değişikliklerin testini yapın ve herhangi bir sorun olmadığından emin olun.

·         Periyodik olarak publisher ve subscriber'lar arasındaki data'ların bütünlüğünün sağlandığından emin olun.

·         Düzenli olarak replikasyon süreçleri ve job'ların sorunsuz çalıştığını takip edin.

·         Düzenli olarak replikasyon performansını izleyin ve her şeyin yolunda gittiğinden emin olun.

·         Bütün replikasyon job'larına alert tanımlayın. Eğer ki job'ların birinde bir fail olma durumu söz konusu olursa en kısa sürede müdahale edebilme şansınız olsun.


KAYNAKÇA
simple-talk.com