Recent comments

None


İçerik Ara











Yasal Uyarı
Bu sitede sunulan tüm bilgi ve dökümanlar Turgay Sahtiyan tarafından yazılmaktadır. Yazıların kaynak göstermek şartıyla kullanılması serbesttir.

© Copyright 2009-2013
Takvim
<<  Haziran 2017  >>
PaSaÇaPeCuCuPa
2930311234
567891011
12131415161718
19202122232425
262728293012
3456789
Keywords

SQL Server kullanan müşterilerde yeni gelen güzel özelliklerinden dolayı SQL Server 2012’ye upgrade planlari yavaş yavaş yapılmaya başlandı. Sizin de bu tarz bir planınız var ise 450+ sayfadan oluşan aşağıdaki technical guide’ın oldukça işinize yarayacağına eminim.

SQL Server 2012 Upgrade Technical Guide

Not : Blog haricinde, faydali gördügüm yazilari ve linkleri twitter adresimden paylasiyorum. Beni twitter'da takip etmek için : twitter.com/turgaysahtiyan


SQL Server 2012 RTM olduktan sonra büyük projelerde kullanılmaya şimdiden başlandı. Tabii ki sistemlerdeki best practice kullanımları oldukça önemli. SQL Server 2012 BPA tool’u ile sistemlerin best practice kontrollerini kullanışlı bir arayüz ile rahatça yapabiliriz.

Tool’u aşağıdaki adresten indirebilirsiniz.

http://www.microsoft.com/en-us/download/details.aspx?id=29302

SQL Server 2012 BPA tool’unun kurulum ve kullanımı SQL Server 2008 R2 sürümü için çıkarılan Best Practice Analyzer tool’una oldukça benzemekte. Bu konu ile alakalı yazdığım detaylı makaleye buradan erişebilirsiniz.

Best Practice’ler ile dolu günler geçirmeniz dileğiyle :)

Not : Blog haricinde, faydali gördügüm yazilari ve linkleri twitter adresimden paylasiyorum. Beni twitter'da takip etmek için : twitter.com/turgaysahtiyan


SMP mimarilerde en büyük problemlerden biri de; çok fazla CPU içeren sistemlerde system bus üzerindeki beklemedir. Bu tarz sistemlerde bütün CPU’lar memory’e erişmek için tek bir system bus kullanılır, bu da system bus üzerinde CPU beklemesi anlamına gelir. CPU sayısı ne kadar artarsa system bus üzerindeki bekleme o kadar artacaktır. NUMA yani Non-Uniform Memory Access, tek bir system bus kullanımını bypass etmek için dizayn edilmiştir.

[more]

NUMA Mimarisi

Numa mimarisinde CPU ve Memory gruplanarak node’lar oluşturulur. Her bir node’un kendi CPU’ları ve memory alanları hatta kendi I/O kanalları bulunur. Her node’da CPU’ların memory alanlarına erişmesi için kendi system bus’ları bulunur. Bu şekilde tek bir system bus’a bağımlılık ortadan kaldırılmış olur.

numa

Node’un kendi grubu içinde bulunan memory’e Local Memory, diğer node’daki memory’leri ise Foreign ya da Remote Memory denilir. Foreign Memory alanına erişim Local Memory alanına erişmekten daha yavaştır. Bu yüzden NUMA mimarisi iyi dizayn edilmeli ve Foreign Memory kullanımı minimize edilmelidir. Foreign Memory’e yapılan erişimler SQL Server:Buffer Node altında bulunan foreign page performance counter’ı ile izlenebilir.

SQL Server 2005 ile beraber full NUMA desteği sunulmaktadır. SQL Server’ın NUMA kullanıp kullanmadığı SQL Server error log’dan kontrol edilebilir. Eğer NUMA kullanılıyor ise aşağıdaki mesaja benzer bir mesaj SQL Server error log’da yer alacaktır.

Multinode configuration: node 0: CPU mask: 0x00000000000000f0 Active CPU mask: 0x00000000000000f0. This message provides a description of the NUMA configuration for this computer. This is an informational message only. No user action is required.

Multinode configuration: node 1: CPU mask: 0x000000000000000f Active CPU mask: 0x000000000000000f. This message provides a description of the NUMA configuration for this computer. This is an informational message only. No user action is required.

NUMA mimarisi Soft-NUMA ve Hardware-NUMA olmak üzere 2 şekilde yapılabilir. Hardware desteği ile yapılan NUMA konfigurasyonlarına Hardware-NUMA denmektedir. Hardware-Numa mimarisinde NUMA’nın sağladığı bütün avantajlar (CPU,Memory ayrımı vs.) kullanılabilir.

Hardware NUMA desteği olmayan sistemlerde CPU Affinity Mask ve Register üzerinden Soft-NUMA konfigurasyonu yapılabilir. Soft-NUMA’yı Hardware-NUMA’dan ayıran en önemli fark; Soft-NUMA’da node’lar kendi memory alanlarına sahip değildir ve bütün node’lar ortak bir memory alanına erişirler. Yani bir başka deyişle Soft-NUMA’da memory alanı node’lar için ayrı ayrı gruplanamaz.

SQL Server 2008’de CPU Affinity Mask ve Register üzerinden Soft-NUMA konfigurasyonun nasıl yapıldığını aşağıdaki BOL dokümanından inceleyebilirsiniz.

http://msdn.microsoft.com/en-us/library/ms345357.aspx

Not : Blog haricinde, faydali gördügüm yazilari ve linkleri twitter adresimden paylasiyorum. Beni twitter'da takip etmek için : twitter.com/turgaysahtiyan


Son dönemde iş hayatımda bazı değişiklikler oldu. Bugün bu değişiklikler hakkında topluca kısa bir bilgilendirme yapmak istedim :)

Beni twitter ya da diğer sosyal ağlarda takip eden arkadaşların haberi vardır. Geçen hafta iş hayatımda bir kariyer değişikliği yaptım. Ekim 2009’dan beri çalıştığım Eurobank’taki görevimden ayrılarak kariyerime Microsoft’ta PFE olarak devam etmeye karar verdim. İlk haberini vermek istediğim ve iş hayatımdaki en büyük değişiklik bu. :)

Bu iş değişikliğinden sonra MVP’lik durumumda ve SQL Server Öncüleri’ndeki başkanlık görevimde de bazı zorunlu değişiklikler oldu.

Bildiğiniz gibi MVP topluluğu bağımsız profesyonellerden oluşan bir topluluk. Bu yüzden 2011 yılında SQL Server alanında almış olduğum MVP’lik ödülünü artık Microsoft kimliği taşıdığımdan dolayı devam ettiremeyeceğim. Bu grubun içinde bulunmak benim için gerçekten gurur vericiydi. Hele 2012 MVP Summit gerçekten inanılmaz bir deneyimdi. :)

Diğer bırakmak zorunda olduğum görev ise SSO’daki başkanlık görevim oldu. Bildiğiniz gibi SSO’nun kurulması ve bu aşamaya gelmesinde tüm lider arkadaşlarım ile beraber ciddi mesai ve emek harcadık. Kurulum mottolarımızdan biri SSO’nun bağımsız bir topluluk olmasıydı. İşte bu yüzden SSO’daki başkanlık görevimi bugün itibarıyla Yiğit Aktan’a devrediyorum. Eminim kendisi bayrağı aldığı noktadan çok daha ileriye götürecektir.

Tabii başkanlık görevimi bırakmam SSO’yu bıraktığım anlamına gelmiyor. Gene her zaman olduğu gibi makale, webcast ve session’larım ile SSO etkinliklerinde yer almaya devam edeceğim.

Hem benim adıma hem de alakalı diğer kişi ve topluluklar adına hayırlı olması dileğiyle,

Turgay Sahtiyan

Not : Blog haricinde, faydali gördügüm yazilari ve linkleri twitter adresimden paylasiyorum. Beni twitter'da takip etmek için : twitter.com/turgaysahtiyan


Blog’um oglum Kuzey’den sonra ikinci çocuğum oldu diyebilirim. Hatta bloğumun doğum tarihi Kuzey’den daha eski. Dolayısıyla blog ilk çocuğum oluyor :)

image

Bugün blog’umun doğum günü. Geride kalan 3 seneye baktığımda “çocuğuma” el bebek gül bebek baktığımı görüyorum. Bu süreç zarfında 400’ün üstünde yazı yayınlamışım ki bu rakam 3 günde 1 yazı anlamına geliyor.

Umarım seneye gene burada yeni yaşını kutlarız.

Mutlu yıllar :)

Not : Blog haricinde, faydali gördügüm yazilari ve linkleri twitter adresimden paylasiyorum. Beni twitter'da takip etmek için : twitter.com/turgaysahtiyan


SSDT makale serimin 10. makalesine geldik. Bu makalede Refactor özellikleri ile objelerin isim ve schema gibi bilgilerinin hızlı bir şekilde nasıl değiştirilebileceğine bakıyor olacağız.

[more]

Refactor menüsü ile aşağıdaki işlemleri yapabiliriz.

1

  • Rename : Obje adını ve refere edildiği yerlerin tamamını değiştirmek için kullanılır.
  • Move to Schema : Objenin schema’sını değiştirmek için kullanılır.
  • Expand Wildcards : select sorgularındaki “*” kısmını kolon adlarına dönüştürmek için kullanılır.
  • Fully-qualify Names : select sorgusundaki kolon adlarını full qualified hale dönüştürmek için kullanılır.

Rename

Objenin adını refere edildiği yerler de dahil olmak üzere değiştirmek için kullanılır.

AdventureWorks projesi altındaki uspGetManagerEmployees SP’sini açalım ve Person.Contact yazısı üzerindeyken sağ tuş menüsünden Refactor >> Rename butonunu tıklayalım.

2

Gelen ekranda Contact tablosu için yeni bir isim belirleyelim. Örneğin ContactNew yapalım.

3

Preview Changes yazısı tıklı ise değişiklik yapılması gereken bütün refere edilen objelerin listesi bir sonraki ekranda karşımıza çıkacaktır. Bu ekrandaki objeler bir önceki makalemde anlattığım Find All References bilgisi ile aynı olacaktır.

4

Değiştirilecek bütün yerlerin ön izlemesine yaptıktan sonra Apply butonuna basarak değişikliklerin yapılmasını sağlayabiliriz.

İşlemler tamamlandığında Person.Contact tablosunun geçtiği her yer Person.ContactNew olarak değişecektir.

5

Move to Schema

Yukarıdaki örnekte anlattığım gibi objenin schema’sını hızlı bir şekilde refere edildiği tüm yerler ile beraber değiştirmeye yarar.

Expand Wildcards

Bu özellik ile “select *” sorgusunu “select kolonadlari” şekline dönüştürebiliriz.

Örneğin şu şekilde bir SP’miz olduğunu düşünelim.

6

Mouse “yıldız (*)” ‘ın üzerinde iken sağ tık menüsünden Refactor >> Expand Wildcards butonunu tıklarsak “*” kolon adlarına dönüşecektir.

7

Fully-qualify Names

Bir önceki örnekteki kolon adlarını full qualified names yani alias’lar kolon adlarının önünde olacak şekilde değiştirmeye yarar.

Person.Contact tablosu üzerinde iken sağ tık menüsünden Refactor >> Fully-qualify Names butonunu tıklarsak;

8

Bütün kolon adlarının önüne alias konularak full qualified hale dönüştürülecektir.

9

Refactor menüsü ile kod değişiklikleri yapmak oldukça kolay bir hale getirilmiş durumda. Bu özelliğe en kısa zamanda alışmanızı tavsiye ederim.

Bir sonraki SSDT makalemde görüşmek üzere.

Not : Blog haricinde, faydali gördügüm yazilari ve linkleri twitter adresimden paylasiyorum. Beni twitter'da takip etmek için : twitter.com/turgaysahtiyan


SSDT makale serimin 9. makalesinde development yaparken işleri kolaylaştıran 2 kod navigasyon yardımcısından, Go To Definition ve Find All References özelliklerinden bahsedeceğim.

[more]

Bu özelliklerin ikisine de Visual Studio kullanan kişilerin aşina olduklarını düşünüyorum. Go To Definition ile objenin tanımlandığı kod bloğuna, Find All References ile ise objenin refere edildiği yerlerin bilgisine erişebiliriz.

Go To Definition

AdventureWorks projemiz içindeki uspGetManagerEmployees SP’sini çift tıklayarak açalım ve mouse Person.Contact tablosu üzerinde iken mouse’un sağ tuş menüsünden Go To Definition butonuna basarak bu tablonun create script’ine erişebiliriz.

1

Find All References

Aynı tablonun yani Person.Contact tablosunun tüm refere edildiği yani kullanıldığı yerleri bulmak için sağ tuş menüsünden Find All References butonunu tıklıyalım.

2

Referans listesi alt tarafta Find Symbol Results penceresinde görüntülenecektir. Bu listedeki istediğimiz bir satıra tıklayarak referansın yapıldığı script bloğuna erişebiliriz.

3

Bir sonraki SSDT makalemde görüşmek üzere.

Not : Blog haricinde, faydali gördügüm yazilari ve linkleri twitter adresimden paylasiyorum. Beni twitter'da takip etmek için : twitter.com/turgaysahtiyan


Daha önce SQL Server 2012 Management Studio aracında code snippet kullanımını şu makalemde incelemiştik. Bugün ise SSDT aracında Code Snippets kullanımına bakıyor olacağız.

[more]

Code Snippets’ın ana amacı daha hızlı kod geliştirmektedir. Tablo, SP, View oluşturmak gibi SQL Server üzerinde yapılabilecek her script işleminin örnek kodunu barındıran Code Snippets, intellisence özelliği ile beraber kod geliştirmeye oldukça hız kazandırmaktadır.

Script ekranında Code Snippets’a sağ tık menüsünden ya da CTRL+K,CTRL+X tuş kombinasyonu ile ulaşabiliriz.

0

Örneğin Table bölümünden Create Table ile ilk kod parçacığımızı ekleyelim.

1

Eklediğimiz kod bloğunda tabii ki bazı değişiklikler yapmamız gerekmekte. Değiştirilmesi gereken yerler sarı ile işaretli olan yerlerdir. İlgili yere mouse’u getirdiğimizde bir bilgi ekranı görüntülenir.

2

Ayrıca tab butonu ile sarı bölümlerin yani değişiklik yapılması gereken bölümlerin üzerinde hızlıca gezinebiliriz.

Yazımın başında söylediğim gibi Code Snippets’ın amacı kod geliştirme sürecini kısaltmaktır. Bu yüzden bu yeni özelliğe en kısa sürede alışmanızı tavsiye ederim.

Not : Blog haricinde, faydali gördügüm yazilari ve linkleri twitter adresimden paylasiyorum. Beni twitter'da takip etmek için : twitter.com/turgaysahtiyan


SSDT makale serimin 7. makelesinde SSDT ile beraber gelen bir diğer güzel özellik “Code Analysis” üzerine konuşuyor olacağız.

[more]

Code Analysis ile dizayn, isimlendirme ya da performans açısından problem oluşturabilecek potansiyel durumlar analiz edilebilir. Manuel ya da her build işleminde otomatik olarak çalıştırılabilen Code Analysis sayesinde daha development esnasında problemleri önceden farkedip düzelterek kod kalitenizi arttırabilirsiniz.

Code Analysis sırasında kontrol edilecek kuralları projenin properties ekranında ayarlayabiliriz.

1

Kontrol edilmesini istemediğimiz kuralların yanındaki check işaretini kaldırabiliriz.

Gene bu ekranda “Enable Code Analysis on Build” yazısını işaretlersek her build işleminde code analysis otomatik olarak çalışacaktır.

Kurallardan bir kaçına göz atacak olursak;

  • SR008 kuralında @@IDENTITY yerine SCODE_IDENTITY kodunun kullanılması öneriliyor.
  • SR001 kuralı “select * ” ile bütün kolonların listelendiği objeleri uyarı olarak veriyor.
  • SR016 kuralı “sp_” ön adı ile başlayan objeleri uyarı olarak veriyor.

Code Analysis’i manuel olarak çalıştırmak için projeye sağ tıklayıp Run Code Analysis yazısını tıklıyoruz.

2

Analysis işleminin sonuçlarını “Error List” penceresinde görebiliriz.

3

Error List penceresinde çıkan bulguları çift tıklayarak ilgili bulguya neden olan koda erişebiliriz.

Örneğin benim projemdeki 5. bulgu @@IDENTITY kullanımı ile alakalı bir bulgu.

4

İlgili bulgu ile ilgili daha fazla bilgi edinmek için Show Error Help butonunu kullanabiliriz.

5

Bazı problemleri production ortamında değil de daha development ortamında iken farkedip düzeltmek oldukça önem taşımakta. SSDT ile gelen Code Analysis özelliği ile yukarıda anlattığım şekilde kodlarınızı analiz edip potansiyel problemlerin önüne geçerek kod kalitenizi arttırabilirsiniz.

Not : Blog haricinde, faydali gördügüm yazilari ve linkleri twitter adresimden paylasiyorum. Beni twitter'da takip etmek için : twitter.com/turgaysahtiyan