26 Ekim 2015 Pazartesi

Transaction Log Dosyaları Nedir? Ne İşe Yarar?



   Transaction log file'lar SQL Server içerisinde yapılan her türlü işlemin tutulduğu yerdir.  SQL Server içerisindeki en önemli parçalardan biri denilebilir. Çünkü herhangi bir disaster recovery durumunda verilerin kurtarılmasını sağlar. Tatbikî transction log file'da herhangi bir bozulma yoksa. Her bir database modifikasyonunda log kayıtları transaction log'lar yazılmaktadır. Burada bilinmesi gereken bir diğer husus değişlikler log'lanırken sıralı olarak kayıt edilirler.
   Transaction log'lar BULK IMPORT ve SELECT INTO durumları haricinde SQL Server'daki her bir transaction’ı saklarlar. Yapı içerisinde Virtual Log Files adı verilen (VLF) küçük parçalara ayrılmışlardır. Bir VLF dolduğu zaman bir sonraki erişilebilir olan VLF yazılmaya devam eder. Aslında buradaki yapıyı bir döngüye benzetebiliriz. Eğer bütün işlemler tamamlanır ve commit edilirse inactive duruma düşen VLF'ler'in içi boşaltılır ve yeniden yeni oluşan log kayıtları tutulması için en başa dönülür. Bu boşaltma işlemi gerçekleşebilmesi için VLF'lerin inactive durumda olması gerekir aksi takdirde log kayıtları gerekli olduğu için silinemez durumda olacaktır.  Inactive durumda olanlar bu sayede tekrardan kullanılabilir ve overwrite işlemi gerçekleşir. Transaction log'lar içerisinde bulunan bir kayıt eğer commit'lendiyse, page'lerde yapılan değişikler checkpoint vasıtasıyla disk'e yazıldıysa full, differential ya da log backup alındıysa artık daha fazla o kayda transaction log' da ihtiyaç yoktur.
   Logical log transaction log'ların aktif parçalarıdır. Log Sequence Number(LSN) transaction log'lar içerisinde her bir transaction için tanımlanırlar. Online transaciton log’lar içerisinde MinLSN en eski aktif transaction'nın başlangıç noktalarıdır.
   Sql server içerisinde birden fazla transaction log tanımlayabilirsiniz. Fakat bu spesifik durumlar dışında önerilen bir şey değildir. Aynı zamanda yazma işlemini arttırdığı için SQL Server performansını düşürübeilir.

Transaction Log’lar Neden Büyür?
                Her bir transaction online transaction log'lara kayıt edildiğinden daha önce bahsetmiştik. Bundan dolayı SQL Server çalışırken transaction log'lar boyut olarak büyürler. Bu nedenle transaction log'ların SQL Server'ın belirlemiş olduğunuz stratejisine uygun olarak bakımlarının yapılması oldukça önemlidir.
   SQL Server'ın transaction log'ların saklanma biçimine göre bize sunmuş olduğu üç farklı recovery model bulunmaktadır.
                1) Simple Recovery Model:  Bu modelde transaction log backup alınması SQL Server tarafından desteklenmemektedir. Log'ların silinme işlemi otomatik olarak yapılmakta ve disk içerisinde ki alan tekrardan kullanılabilir olmasını SQL Server bize kendisi sağlamaktadır. Bu modelde data kaybı riski bulunmaktadır. 
                2)Bulk- Logged Recovery Model:  Bu model de transaction log back up SQL Server tarafından desteklenmektedir. Burada simple recovery model de olduğu gibi otomatik olarak silme işlemi gerçekleşmez. Overwrite olması için transaction log backup'ların düzenli olarak kullanılmayan alanlar inactive olarak işaretlenmelidir. Bulk-Logged recovery model'de bulk operasyonlarını minimum düzeyde loglayarak transaction log’ların alan kullanımı azaltır.
                3)Full Recovery Model:  Transaction log backup bu modelde desteklenmektedir. Normal şartlar altında data kaybı bu modelde mümkün değildir.  Full recovery modelde de otomatik olarak transaction log'lar silinmezler.  Bulk logged recovery modelde de olduğu gibi bu modelde de düzenli olarak kullanılmayan alanlar inactive olarak işaretlenmelidir ki overwrite işlemi gerçekleşebilsin. Bütün transactionlar log'landığı için bu modelde trasaction log'lar oldukça hızlı bir şekilde büyüme eğilimindedirler.
SQL Server yönetiminde Transaction Log’ların bakımının yapılması en önemli görevlerden birisidir denilebilir.  Genelde günlük olarak transaction log'lar izlenmeli hatta çok fazla network trafiği olan sistemlerde daha sık olarak monitoring işleminin yapılması önerilir. Transaction log space'i (kullanılabilir alanı) aşağıdaki kodla izleyebiliriz.

DBCC SQLPERF(LOGSPACE);
GO

   Transaciton log'lar oluşturulmuş olan stratejiye göre düzenli olarak back up'ları alınması auto growth özelliğine göre tercih edilmesi daha sağlıklı olacaktır. Çünkü Transcation log back up aldıktan sonra SQL Server Transaction log dosyasını back up alındığı için truncate edecektir. Back up alındıktan sonrada o alan tekrardan kullanılabilir durumda olacaktır. 
   Transaction log backup'lar disaster recovery durumlarında ciddi önem arz etmektedir. Çünkü bu şekilde ciddi data kayıpları yaşamadan verilrimizi kurtarabiliriz.Örneğin 15 dakikalık aralıklarla back up alınabilir. Bu süreye sisteminize göre siz karar vermeniz daha doğru olacaktır. Bu sayade VLF'ler inaktif olarak işaretlenir ve overwrite ile tekrardan kullanılır.




12 Ekim 2015 Pazartesi

SQL Server'da Tablo Üzerindeki Aktivitelerin Takibi


Tablo Üzerindeki Aktivitelerin Takibi

Performance tuning’de önemli olan unsurlardan biride hangi tablo üzerinde ne kadar işlem yapıldığını anlamak olacaktır. Aşağıdaki kodda her bir  tablo için bize bilgiler döndürülecek ve bunlar bize tablolar üzerinde gerçekleşen read ve write işlem hacmini gösterecektir.
Yalnız dikkat edilmesi gereken bir husus varki dynamic managament views'dan bu istatistikler Sql Server her restart edildiğinde temizlenirler. Bu istatistikleri(wait ve latch) aynı zamanda manuel olarak da silebilirsiniz. (Dynamic Managament Views  ve function'lar bize server'ın durumu hakkında bilgi verir. Buradan Sql Server'ın durumunu izleyebilir, yaşanan herhangi bir problemi teşhis edebilir yada  performans iyileştirmeleri yapabilirsiniz.) Server'ın daha uzun süre açık olması dynamic management views'ın size daha güvenilir istatiskler sunmasını sağlayacaktır.


SELECT  @@ServerName AS ServerName ,
DB_NAME() AS DBName ,
OBJECT_NAME(ddius.object_id) AS TableName ,
SUM(ddius.user_seeks + ddius.user_scans + ddius.user_lookups)
AS Reads ,
SUM(ddius.user_updates) AS Writes ,
SUM(ddius.user_seeks + ddius.user_scans + ddius.user_lookups
+ ddius.user_updates) AS [Reads&Writes] ,
(SELECT    DATEDIFF(s, create_date, GETDATE()) / 86400.0
FROM      master.sys.databases
WHERE     name = 'tempdb'
) AS SampleDays ,
( SELECT    DATEDIFF(s, create_date, GETDATE()) 
AS SecoundsRunnig
FROM      master.sys.databases
WHERE     name = 'tempdb'
) AS SampleSeconds
FROM    sys.dm_db_index_usage_stats ddius
INNER JOIN sys.indexes i ON ddius.object_id = i.object_id
AND i.index_id = ddius.index_id
WHERE   OBJECTPROPERTY(ddius.object_id, 'IsUserTable') = 1
AND ddius.database_id = DB_ID()
GROUP BY OBJECT_NAME(ddius.object_id)
ORDER BY [Reads&Writes] DESC;
GO







1 Ekim 2015 Perşembe

MS SQL Server Feature Selection Rehberi

   Çoğumuz SQL Server bilgisayarımıza kurmuşuzdur. SQL Server kurulumu yaparken Feture Selection ekranında SQL Server'ın bize onlarca sunduğu seçeneklerden hangilerinin ne işe yaradığını ve bizim ihtiyacımıza göre hangilerinin kurulup hangilerinin bizim ihtiyaç duymadığımızı karar verebilmek için aslında bu feature selection ekranındakilerin anlamlarını bilmemiz gerekmekte. Bende bundan dolayı seçenekleri teker teker ele alarak açıklamaya çalıştım.



   Feature selection sayfasında iki ana başlığa ayrılmış alan bulunmaktadır. Bunlardan bir tanesi Instance Features bir diğeri ise Shared Features'dir.

Instance Feature:  Buradaki özellikler her bir kurulan instance' a özel olarak seçip kurulmaktadır. Her bir instance 'ın versiyonları yada kullanım şekilleri farklı olabilir. 

Shared Features: Burada seçilen özellikler diğer instance'lar ile paylaşılan özelliklerdir.  Buradaki ortak özelliklerin her biri SQL Server sürümleri ile geriye dönük uyumlu şekilde tasarlanmıştır. 

INSTANCE FEATURE:
Databese Engine Service: Bu kısımda aslında SQL Server temel servisler, depolama, işlemler ve dataların güvenliğini sağlamak gibi temel şeyleri içerir.  Altında ise Replication, Full-Text Search, tools for managing relational and XML Data ve Data Quality Services(DQS) Server bulunmaktadır.
  • The Database Engine: çekirdek servistir ve depolama, güvenlik gibi temel işlemleri içerir.
  • Replication: Replikasyon teknolojisi ise data'ların yada database objelerinin bir veritabanından başka bir veritabanına senkron yada asenkron olarak kopyalanması, gönderilmesi işlemini sağlar.
  • Full Text Search: SQL Server tablolarında yapılan sorgularda karakter bazlı işlevsellik sağlar. 
  • Data Quality Service: Tutarsız yada doğru olmayan data'ların tespit edilip temizlenmesini sağlar. Check Box'ı seçerek DQS server'ın yüklenmesi sağlanır. SQL Server'ın yüklenmesi tamamlandıktan sonra  DQSInstaller.exe dosyasını çalıştırarak kurulumu tamamlayabilirsiniz. Eğer SQL Server'ı default instance olark kurulumunu tamamladıysanız aşağıdaki path'den ulaşabilirsiniz. -- C:\Program Files\Microsoft SQL Server\MSSQL13.MSSQLSERVER\MSSQL\Binn.--

Analysis Services: Olap ve veri madenciliğini uygulamalarını oluşturmak ve bunları yönetebilmek için gerekli araçları içermektedir.

Reporting Services - Native : Server ve Client öğelerini oluşturmak, yönetmek ve matrix, raporlar ve grafikleri  içerir.  Ayrıca reporting servis genişletebilir bir platformdur. Rapor uygulamarı geliştirmek için de kullanılabilir.

SHARED FEATURES:
  • Reporting Services - SharePoint: ­ Reporting Service Sharepoint modu raporlama oluşturmak, yönetmek ve raporları sunmak için kullanılan sunucu tabanlı bir uygulamadır.
  • Reporting Services Add-in for SharePoint Products:  Sharepoint ürünü ile Reporting Service'in entegre olup bunların yönetilmesi ve kullanıcı ara yüzünü içerir. 
  • Data Quality Client: Data Quality Client uygulaması data kalite operasyonlarında kullanılan standalone bir araçtır. Bu araç data kalite projelerinin oluşturulması ve bu oluşturulan projelerin yürütülmesine olanak sağlar. Data'ların yönetiminden sorumlu, data kalitesini yüksek standartlara çıkarıp bu şekilde kalmasını koruyacak ekipler (Data steward'lar, data uzmanları yada IT sorumluları) data kalite projelerini düzenler ve bunları yürürlükte tutar. Proje işlevlerini gerçekleştirir.
  • Client Tools Connectivity: Client tools, sunucu ile istemci arasında iletişim kurulabilmesi için gerekli komponentleri barındırır. Bunlara ağ kütüphanesi, OLAP, ODBC, ADODB, ADOMD+ dahildirler.
  • Integration Services: Integration Services görsel ve programlanabilir objelerin taşınması, kopyalanması ve dataların dönüştürülmesi için kullanılırlar.
  • Client Tools SDK: Program geliştiricileri için gerekli development kit kaynaklarını barındırır.
  • Documentation Components: Yardım dökümantasyonu ile ilgili bölümdür.Sql Server da bulunan help içeriğini görüntüleme ve bunu yönetmek için kullanılan bileşenleri içerir.
  • Management Tools - Basic: SQL Server Database Engine, SQL Server Express, sqlcmd utility ve SQL Server PowerShell içi SQL Server Management Studio desteği sunar.
  • Management Tools – Complete: Reporting Service, Analysis Services ve Integration Services için SQL Server MAnagement Studio desteği sunar. *SQL Server Profiler *Database Engine Tuning Advisor *SQL Server Utility Management içeriğini destekler.
  • Distributed Replay Controller:  SQL Server Distributed Replay Controller çıkacak olan yeni SQL Server sürümlerinin etkilerini ölçer aynı zamanda donanımsal yada işletim sistemi upgarde'lerinde uyumluluk durumu konusunda yardımcı olmaktadır.
  • SQL Client Connectivity SDK: Veritabanı uygulama geliştirme için SQL Server Native Client'ı (ODBC/OLE DB) içerir.
  • Master Data Services: Kesinliği ve denetimi sağlayabilmek amacıyla farklı sistemleri tek bir sistem üzerinde entegre edebilmek için kullanılan bir platformdur.