SQLSaturday etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster
SQLSaturday etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster

18 Aralık 2014 Perşembe

SQL Saturday 359 -5(Monitoring and Assessing SQL Server with extended events)


5.seminer ise Batuhan YILDIZ'ın yaptığı Extended Event semineriydi.  Bugüne kadar SQL Profiler kullandığım için extended eventları hiç kullanmamıştım ancak Microsoft bir sonraki versiyonda Profilerı kaldıracağı için Extended Event konusuna bundan böyle daha sık eğilmemiz gerekecek gibi gözüküyor.

Extended Event ilk olarak 2008 versiyonu ile karşımıza çıkmış ancak o zaman bir arayüze sahip olmadığı için DBAler için pek tercih edilmemiş. 2012 versiyonu ile bir arayüze kavuşmuş.

Extended Events ile SQL Server sorgularını takip edebilir, performans analizi yapabilir, deadlock problemlerini çözebilir ve T-SQL statement’larını debug edebilirsiniz.


Extentet event bir wizarda sahip. Wizard kullanarak istediğimiz session oluşturup kullanabiliriz. Bu wizarda yardımı ile capture edeceğimiz veriyi seçerek analiz imkanını çok kolay bir şekilde yapabiliyoruz. Bu konu ile ilgili ileriki günlerde derinlemesine bir makale yazmak istiyorum

SQL Saturday 359 -4 (Write Quick, Readable and High Performance Queries Using Window Function)


4.seminer ise kitaplarından tandığımız İsmail ADAR hocanın semineriydi. Window functionları konusunda örnekler yapıldı.

Bu konuda bütün fonskiyonları yazmayacağım sadece Ranking Fonksiyonları yani derecelendirme fonksiyonları üzerine bir şeyler yazmak istiyorum.

Ranking fonksiyonları bir veri kümesi üzerinde kriter belirterek veri kümesinin gruplara bölünmesini sağlayan ve her gruba geçici bir numara veren fonksiyonlardır. SQL Server ile kullanılmaya başlayan ranking fonksiyonlarını şu şekilde listeleyebiliriz.

ROW_NUMBER:Veri kümesindeki gruplanmış her değer için numerik ve artan bir değer üretir. Bu değer istenirse tüm veri kümesi bir parça olarak alınabilir yada veriler belli kolona göre gruplanabilir.

SELECT FirstName,LastName ROW_NUMBER() OVER (ORDER BY SalesYTD
DESC
) AS 'Row Number',
SalesYTD,JobTitle

FROM
Sales.vSalesPerson
SELECT FirstName,LastName ROW_NUMBER() OVER (PARTITION BY JobTitle
ORDER
BY SalesYTD
DESC
) AS 'Row Number',
SalesYTD,JobTitle

FROM
Sales.vSalesPerson


RANK:fonksiyonuda ROW_NUMBER fonksiyonu gibi bir veri kumesi icinde
gruplama yaparak her bir veriyi belirtilen kritere gore siralama yaparak
numaralandirir. ROW_NUMBER fonksiyonundan farki ise siralama yaparken ayni degere sahip olan
satirlara ayni sira numarasi vermesidir. RANK fonksiyonunda siralama icin kullandigimiz alandaki ayni
degerler icin ayni sira numarasi kullanilir.

select i.ProductID,p.Name,i.LocationID,i.Quantity,
RANK
() OVER (PARTITION BY i.LocationID ORDER BY i.Quantity DESC) AS
'
RANK'
FROM

Production.ProductInventory i
INNER JOIN Production.Product p
ON
i.ProductID=p.ProductID


DENSE_RANK fonksiyonu RANK fonksiyonundan farklı olarak aynı sıra numarası verilse bile bir sonraki gelen kayda sıra numarası verilirken araya tekrar eden kayıt sayısı kadar boşluk ekleyen fonksiyondur.

select i.ProductID,p.Name,i.LocationID,i.Quantity,
DENSE_RANK
() OVER (PARTITION BY i.LocationID ORDER BY i.Quantity DESC) AS
'
RANK'
FROM

Production.ProductInventory i
INNER JOIN Production.Product p
ON
i.ProductID=p.ProductID where
i.ProductID in(
436,461,443)

 
NTILE fonksiyonu diğer ranking  yani derecelendirme fonksiyonlarından farklı olarak veri kümesini gruplarken her bir grup içinde en fazla kayıt olacağı bilgisini dışarıdan parametre olarak almaktadır.

SELECT p.FirstName, p.LastName,s.SalesYTD,a.PostalCode,
NTILE
(5) OVER(ORDER BY SalesYTD DESC) AS 'Ntile'
FROM
Sales.SalesPerson s
INNER
JOIN
Person.Person p
ON s.BusinessEntityID=P.BusinessEntityID
INNER
JOIN Person.Address a on a.AddressID=p.BusinessEntityID

SQL Saturday 359 -3( How Latch Contention Affects the Performance? )


3. Katıldığım seminer Turgay SAHTİYAN hocanın How Latch Contention Affects the Performance? adlı semineriydi. 

Bu seminerde öncelikle olarak latch nedir ve lock nedir ve aralarındaki farklar konuşuldu. 

Latch nedir tanımına bakacak olursak birden fazla process memoryde bulunan bir page'i değiştirmek isterse SQL Server ilk isteyen process için latch koyar.  Diğer processlerinde işlem yapmasını engeller. Aynı anda bir fazla process page üzerinde değişiklik yapabilseydi page tutarlılığı bozulurdu. Bu koyulan Latch'e PageLatch_EX adı verilir.

Aynı işlem bir page'in diskten memorye getirilmesi sırasındada olur. Bunada PageIOLatch_EX adı verilir.

DB serverda birden fazla Cpu varsa aynı objeye paralel olarak erişen process sayısı artacaktır. Aynı objeye birden fazla process erişmek isteyebileceğinden dolayı latch yaşanması kaçınılmazdır.

Latchler ile locklar birbirine oldukça benzerler ancak aralarında bir fark vardır. SQL Server lock'ı transaction tamamlanana kadar koyarken latch'i fiziksel operasyon bitene koyar.  İlgili page'de fiziksel işlem bitince latch kalkarken lock transaction tamamlanıncaya kadar durur.

Latchler üzerinde kullanıcılar hiçbir işlem yapamazken locklar üzerinde transaction level ile oynayarak değişiklikler yapabilirler.


Latch analizi için  Sys.dm_exec_wait_stats ve sys.dm_exec_latch_stats DMVleri kullanılırken  lock analizi için ise sys.dm_tran_locks ve sys.dm_exec_sessions DMVleri kullanılır.

Ayrıca Latch Contentiondan Hash partitioning yöntemi üzerine konuşuldu. Bir bankada DBA olarak çalışıyoruz. 1400 tane bankamatik şubemiz var. Her yapılan işlem bir identity kolonda veya bir sequence nesnesinden bir numara alarak ID kolonuna üzerine veri olarak işlenmektedir. Bu kolon clustered indexdir.

Her yapılan işlemi her zaman son page üzerine yapılacağı için latch contention'dan kaçmak nerdeyse imkansızdır.
Bundan kaçmak için Clustered Index'te değişiklik yaparak BankamatikID ekleyebiliriz. Ancak bu durumda  leading kolon olarak non-sequential bir kolon seçildiği için Page Split ve index fragmentation ile karşılaşılacağız.

Burada çözüm tablodaki bir kolon üzerinden oluşturulan bir hash value üzerine partitioning yapmaktır. Bu şekilde gelen insert’ler sıralı olarak farklı partition’lara dağılacak ve hep aynı page’e erişim olmayacağından dolayı contention çözümlenmiş olacaktır.


SQL Saturday 359 -2( How to understand if the storage is a problem on the database server)


İkinci seminerde Türkiye'de SQL Serverın en büyük gurularından birisi olan Yiğit AKTAN hocanın Troubleshooting: How to understand if the storage is a problem on the database server? Adlı seminerine katıldım. Şimdiye kadar teknik açıdan olsun sürükleyicilik açısından olsun  en iyi seminerlerden birisiydi.
 

Seminerde Sql Serverda yaşanabilecek IO problemleri ve bunların çözüm yöntemleri üzerine konuşuldu.  Bir işlem bir kayıt üzerinde değişlik yapacağı zaman ilk olarak kaydın olduğu page'i bulmak için memorye bakar. Burda yoksa  diskten okuyarak memory'e alır. SQL Server kayıtları direk diskten okumaz. Öncelikle memory'e alır. Burdan okur. Okuma devam ederken bir başka işlem bu page erişmek isterse ilk işlemin okuma işlemini bitirmesini bekler. Buna PageIOLatch_EX denir.  Aynı anda iki işlem aynı page'e erişip memory'e alamaz.

Bu PageIOLatch_EX problemlerinin nasıl tespit edileceği ve nasıl çözümler bulunacağı üzerine çok güzel bir seminer oldu.

I/O problemlerinde DBAler öncelikli olarak çözümü storage yöneticileri ile konuşarak bulmak isterler. Ancak genellikle çözüm bulunamaz. Çünkü storage yöneticileri hatalarını genellikle kabul etmezler. Bu gibi durumlarda problemin ne olduğu ve çözümün ne olacağı konusunda demo yapıldı.

Çözüm Örnekleri
  1. IO hızınızı artırmak ve hızı yüksek bir altyapıya sistemimizi taşımak. Disk yapımızı SSD ile değiştirmek.(Bu ilk etapta pek kolay gözükmüyor.)
  2. Eksik Indexleri yeniden oluşturmak
  3. Kullanılmayan Indexleri silmek
  4. İstatiktikleri Update Etmek
  5. MDF ve LDF disklerini ayrı diskler üzerine koymak ve TempDB veritabanını hızlı disklere taşımak.


Seminerde  sp_WhoIsActive  stored prosedürü üzerine bilgi verildi. Bu prosedür  Adam Machanic tarafından yazılmış. Sistemde o anda çalışan activiteleri görüntülüyor.

SQL Saturday 359 -1(SQL Server 2014: HA and DR Solutions)


Bu yazı dizimde 06.12.2014 tarihinde gittiğim SQL Saturday gününde katıldığım seminerlerden bahsetmek istiyorum. SQL Saturday  konusunda kısaca bilgi verecek olursak SQL Pass tarafından her Cumartesi dünyanın bir şehrinde düzenlenen bu etkinlikde  SQL Server konusunda hem lokal hemde uluslararası konusunda derin deneyime sahip uzmanlar eğitimler veriyorlar.

Türkiye'de 4.sü düzenlenen bu eğitim Microsoft Türkiye ofisinde yapıldı. 5 ayrı salonda toplam  30 'a yakın seminerden oluşmakta. Bende bu  etkinliği 4 senedir katılıyorum.

4 senedir gittiğim bu etkinlikde her yıla oranla katılımcı sayısı arttığını görmek çok sevindirici. Ancak Microsoft'un verdiği destek konusunda baya sıkıntılı. Kötü bir organizasyon ,kayıt yaptırıp kapılarda kalan insanlar, 45 dakika beklenen yemek sırası, salonların ısıtma ve havalandırma problemi gibi bir sürü problem.  Ancak gerek SQL Server Öncülerinin gösterdiği çaba gerekse eğitmenlerin teknik bilgisi ve tecrübeleri hepsine bedel diye düşünüyorum.

Katıldığım seminerlerden bahsedecek olursam ilk  katıldığım seminer Levent OKTAR hocanın SQL Server 2014: High Availability and Disaster Recovery Solutions semineriydi.

 
SQL Server ilk versiyonlarından bu yana bu konu ile ilgili bazı çözümler sunmakta.   Ancak son yıllarda iş sürekliliğinin sağlanması ve felaket senaryoları konusunda önemin artması ile birlikte database üreticileride  bu konularda baya geliştirmeler yapmışlardır.

  1. Replication
  2. Log Shipping
  3. Mirroring
  4. Failover Cluster
  5. Always-on

Seminerde bu 5 konu üzerinde teorik bilgiler anlatıldı.  Ancak 2012 ile birlikte gelen Always-On demosu yapılabildi. 2012 öncesinde High Availability konusunda ve Disaster Recovery konusunda ilk 4 madde birlikte kullanılarak çözümler geliştirilmekteydi. 2012 ile birlikte gelen Always-on ile birlikte bu 4 teknolojinin birlikte kullanılması ile elde edilen HADR çözümlerini tek başına yapabilmektedir.

 
Bu yapı bize Server seviyesinde koruma, Sql Server seviyesinde koruma sağlayabildiği gibi database seviyesinde koruma ve client connection seviyesinde koruma sağlar.

Always-on konusunda kısaca değinecek olursak öncelikle AlwaysOn Availability Groups arka planda Windows Failover Clustering teknolojisi üzerinde çalışmaktadır. Ancak Failover Cluster yapısı gibi ortak disk alanı olmasına gerek yoktur. İster shared disklere ister lokal diskler üzerinde çalıştırılabilmektedir.

Always-On kurulumunda öncelikle kurulacak server üzerinde yukarıdada belirttiğim gibi Windows Failover Cluster teknolojisi kurulu olmalıdır.   Windows Server Failover cluster yapısı kurulumunda 2 serverda da aynı versiyon işletim sistemi kurulu olmalıdır.  Aynı updateler yapılmış olmalıdır.Ancak failover cluster yapısında olduğu gibi  ortak bir shared disk alanı bulunmasına gerek yoktur.

Bu yapıda yer alacak tüm serverlar aynı domain içinde bulunmalıdır. Ayrıca tüm serverlar Failover Cluster yapısına eklenmelidir.   Üzerilerinde domain yapısı kurulu olmamalıdır. Tüm veritabanları Full Recovery modda olmalıdır.

Avalibality groupu senkron ve asenkron olarak iki farklı  şekilde tanımlayabiliyoruz.  Senkron modda  bir transactionın başarılı olması için tüm replicalarda tamamlanmış olması gerekmektedir. Ancak buda transaction'un geç bitmesine neden olmaktadır. Ancak replikalar arasında veri tutarlılığı sağlar.  Asenkron modda ise primary serverda tamamlanan her transaction replicalarda da tamamlanmış sayılacağı için işlemler hızlı olmaktadır ancak veri bütünlüğü ve tutarlılık garanti edilmez. 

 
Yukarıdada anlattığım gibi failover cluster yapısından farklı olarak shared disk gereksinimi olmadığı farklı subnetlerde kurulum yapılabilir. Ve hatta Azure üzerine bile replika kurulumu yapılabilir. 


7 Kasım 2014 Cuma

SQLSaturday #359, ISTANBUL

Dünyanın en büyük SQL Server topluluğu PASS tarafından düzenlenen ve tam gün süren SQLSaturday etkinliği 06 Aralık 2014 tarihinde İstanbulda yapılacak.


Kayıt Olmak İçin Tıklayabilirsiniz.

Kesinleşen Sessionlar ;
Title Speaker Level
SQL Server Deep Dive Denis Reznik Intermediate
AlwaysOn Unplugged: Scalability Solutions with SQL Server 2012/2014 Yigit Aktan Advanced
Backups for Azure SQL Databases and SQL Server instances running on Azure Virtual Machines Chandra Mohan Situmalli Intermediate
Building abstract layers for data protection and business logic Uwe Ricken Intermediate
Common TSQL Mistakes Kevin Boles Intermediate
Connection – Session – Request Uwe Ricken Advanced
Correcting Database Corruption: Advanced Techniques Yigit Aktan Advanced
CSI Indexes Chandra Mohan Situmalli Intermediate
Data quality with DQS components in Integration Services Alexander Karl Intermediate
Database Recovery: Backup and Restore Basics Andrey Zavadskiy Beginner
Deadlocks. Everything that developer needs to know Denis Reznik Intermediate
Deep dive to SQL Server configuration for SharePoint Server Gokan Ozcifci Advanced
Developerlar için SSDT kullanımı Çağlar Özenç Beginner
Dive into the Query Optimizer-Undocumented Insight Benjamin Nevarez Advanced
DMV for administration of indexes Uwe Ricken Advanced
DQS step-by-step with Domain Management, Knowledge Discovery and Matching Policies Alexander Karl Intermediate
Effective T-SQL. To be effective or not to be. Denis Reznik Intermediate
Execution Plans Detail From Zero to Hero Ismail ADAR Beginner
Handling data types in SQL Server tomaz kastrun Intermediate
How does SQL 2014 In Memory OLTP enhance Performance? Işıl Efe Intermediate
How to tune your applications before moving your database to Microsoft Azure SQL Database (PaaS) Faruk Celik Beginner
INSERT / UPDATE / DELETE – deep dive Uwe Ricken Advanced
Introducing Microsoft Azure HDInsight Belkis Ozhorasan Intermediate
Introduction to Reporting Services for SharePoint Gokan Ozcifci Beginner
Let’s cook ‘best SQL Server DBA practices’ Satya (SQLMaster) Shyam Jayanty Intermediate
Making customer segmentation using SQL Server SSAS tomaz kastrun Advanced
Microsoft Analytics Platform System Serdar Altug Beginner
Monitoring and Assessing SQL Server with extended events Batuhan Yildiz Advanced
Optimizing SQL Server 2012 for SharePoint 2013 Gokan Ozcifci Advanced
Practical Tips when Troubleshooting AlwaysOn issues Sibel Nal Intermediate
Query Processing in In-Memory OLTP (Hekaton) Benjamin Nevarez Intermediate
Relational Data Management on Microsoft Azure Mine Tokus Beginner
Replay your workload and save the business! Boris Hristov Intermediate
SharePoint – from distrust to acceptance Gokan Ozcifci Intermediate
SQL 2014 Column Store Index Enhancements Işıl Efe Intermediate
SQL 2014 Enhancements Overview Mine Tokus Intermediate
SQL Injections and Penetration Testing on SQL Server 2014 Ismail Adar Advanced
SQL Server 2014 New Features Kevin Boles Intermediate
SQL Server 2014: High Availability and Disaster Recovery Solutions Levent Oktar Intermediate
SQL Server AlwaysOn and Clustering,Mirroring and Log Shipping Yusuf Kahveci Advanced
SQL Server Data platform upgrade Techniques, best practices & notes from the field Satya (SQLMaster) Shyam Jayanty Intermediate
SQL Server Performance Troubleshooting Batuhan Yildiz Advanced
SQL Server Query Design and Optimization Recommendations For Developers Ismail ADAR Intermediate
SQL Server ve Azure ML ile Tahminleme Modelleri Koray Kocabas Advanced
SQL Server: Performance Tuning and Troubleshooting Denis Reznik Advanced
The nightmare of locking, blocking and isolation levels! Boris Hristov Intermediate
Transaction Isolation Levels Deep Dive Yigit Aktan Intermediate
Transaction Log Basics Andrey Zavadskiy Intermediate
Understanding Parameter Sniffing Benjamin Nevarez Intermediate
Unit Testing SQL Server Kevin Boles Intermediate
Unit Testing with SQL Server Data Tools Andrey Zavadskiy Intermediate
Usage of R in SQL Server for better data understanding tomaz kastrun Intermediate
Useful Dynamic Management Views and Functions for SQL Server 2014 Ismail Adar Intermediate
Windowing Functions: THE Reason to Upgrade to 2012+ Kevin Boles Advanced
Write Quick, Readable and High Performance Queries Using Window Functions with SQL Server 2014 Ismail Adar Intermediate
You want rules? You want Policy-Based Management! Boris Hristov Intermediate


Sql Server DateTime Veri Tipindeki Datayı Türkçe Formatında Göstermek

  SQL'de tarihleri farklı formatlarda göstermek için FORMAT fonksiyonunu kullanabilirsiniz. Türkçe kısa tarih formatı genellikle "...