Masters Of SQL

SQL Server ile ilgili bilgiler, hayata dair paylaşımlar ve birazda eğlence tabii...
Deadlock’sız, Blocking’siz, Contention’sız günler diliyoruz :)
Sysadmin sizinle olsun

SQL 2016 yenilikleri (CTP3)



Gün geçmiyor ki Microsoft yeni bir sürümle karşımıza çıkmasın :). Daha önce Padawan'ın güzel güzel anlattığı SQL Server 2016 CTP3 kurulum makalesinden sonra yoğun baskılar sonucunda bana da yenilikleri makalesini yazmak kaldı; arkadaş eskiden bir usta çırak ilişkisi vardı :) çıraklar ustalarına böyle zorla birşeyler yaptıramazlardı ah ah nerede o eski günler :):) işin şaka ve goy goy kısmını geçtikten sonra asıl mevzuya girelim tabii detaylara fazla girmeden sadece literatürünüz gelişsin diye yazdım. :)

• SQL Server 2016 (CTP 3.0) indirmek için tıklayınız Community Technology Preview 3 (CTP 3.0), go to Evaluation Center.
• Azure hesabınız varsa SQL Server 2016 kurulu hazır Virtual Machine için tıklayınız

SQL Server 2016 Faydaları:
• Geliştirilmiş bellek performansı sayesinde 30x daha hızlı işlemler, disk tabanlı ilişkisel veritabanları ve gerçek zamanlı operasyonel analitik işlemlerde 100x daha hızlı sorgular.
• Kurum içi ve bulut içinde kullanılan sistemlerde uygulamalarda değişiklik yapmadan verilerinizi Encrypted olarak korumanıza yardımcı olur.
• Stretch Veritabanı teknolojisi sayesinde uygulamada değişiklik olmadan güvenli bir şekilde, OLTP verileriniz için Microsoft Azure da tarihsel olarak tutmanızı sağlar.
• Windows, iOS ve Android için yerel uygulamalar ile mobil cihazlarda zengin görsellik.
• PolyBase T-SQL kullanarak ilişkisel ve ilişkisel olmayan sorgularınızın yönetimini kolaylaştırın.
• AlwaysOn tarafında Azure SQL Server secondaries node kullanarak daha hızlı hibrid yedekleme, yüksek kullanılabilirlik ve felaket kurtarma senaryoları (HADR)

Genelde yenilikler SSMS üzerinde olduğundan dolayı O Services i anlattım. Ayrıca özellikle Analytics le ilgilenen arkadaşlar için yeni services olan SQL Server R Services duyuruldu bu kısımlar biraz daha olgunlaştıkça makale halinde yayınlamaya çalışacağız.

Database Engine (SSMS)
   
Stretch Database
Server terminolojisine yeni katılmış bir özellik. Yaptığı iş aslında çok güzel (gerçi şu azure a bir alışamadım :) ) lokalde bulunan veritabanının tarihsel olarak değişimlerini azure da bulunan sql sunucuya gönderiyor. Bu sayede hem lokal db de çalışırken hem de uzak verilere kesintisiz olarak erişmemizi sağlıyor.




JSON Desteği
Evet artık geldi beklenen gün bugünmüş. Yazılım tarafına ve rakip dblere JSON geleli yıllar oldu :):) peki kullanımı nasıl?

         SELECT * FROM OPENJSON ('{"version":"SQL Server 2016 (CTP3)","build":13,"date":"28.10.2015"}')
         


            SELECT [key], value
            FROM OPENJSON('["en-GB", "en-UK","tr-TR"]')
         


Columnstore Index
SQL Server hayatına 2012 ile birlikte giren ColumnStore Index her geçen gün güçlenerek büyümeye devam ediyor. Önce OLAP mimarisine geldi sonrasında OLTP ye eklediler şimdi ise InMemory table lara ekleme yapıldı. Microsoft un sayfasında açıkladığı gibi gelen yapılar (gelecek diyelim :) ) aşağıda.  


Columnstore Index Feature

SQL Server 2012

SQL Server 2014

SQL Server 2016 Community Technology Preview 3 (CTP 3.0)

Batch execution for multi-threaded queries

yes

yes

yes

Batch execution for single-threaded queries

yes

Archival compression option.

yes

yes

Snapshot isolation and read-committed snapshot isolation

yes

Specify columnstore index when creating a table.

yes

AlwaysOn supports columnstore indexes.

yes

yes

yes

AlwaysOn readable secondary supports read-only nonclustered columnstore index

yes

yes

yes

AlwaysOn readable secondary supports updateable columnstore indexes.

yes

Read-only nonclustered columnstore index on heap or btree.

yes

yes

yes1

Updateable nonclustered columnstore index on heap or btree

yes

Additional btree indexes allowed on a heap or btree that has a nonclustered columnstore index.

yes

yes

yes

Updateable clustered columnstore index.

yes

yes

Btree index on a clustered columnstore index.

yes

Columnstore index on a memory-optimized table.

yes

Nonclustered columnstore index definition supports using a filtered condition.

yes

1 To create a readable nonclustered columnstore index, store the index on a read-only filegroup.

     

Query Store
InMemory tablolarda desteklenmeye başlandı (CTP3). SQL Server 2016 ile hayatımıza giren bir kavram ve yaptığı iş DBA ler için ileride çok işe yarayacak gibi duruyor. Peki ne olaki bu Query Store :). Sorgular esnasında oluşan Execution Planlarları saklayarak geriye doğru inceleme yapmamızı ve istediğimiz birini kullanmamızı sağlayacak.

Kısaca aşağıdaki ayarla açıp kapatacağız.
    ALTER DATABASE AdventureWorks2012 SET QUERY_STORE = ON;
    




Temporal Tables (System-Versioned Tables)
Yazılım ekipleri ve DBA ler yıllardır tablolarda yapılan değişiklikleri görebilmek için taklalar atmak zorunda kalmışlardı ya trigger kullanarak insert, update ve delete ler başka bir tabloya alınmış ya da yazılım katmanında history tablolar yapılarak çözüm üretmişlerdi. SQL Server 2016 ile artık tabloların tarihsel olarak geçmişine otomatik olarak ulaşabileceğiz.

    		CREATE SCHEMA History
GO
CREATE TABLE dbo.Personel 
(
    PersonelNo int NOT NULL PRIMARY KEY CLUSTERED, 
    Ad nvarchar(50) NOT NULL, 
    Soyad nvarchar(50) NOT NULL,
    SysStartTime datetime2 GENERATED ALWAYS AS ROW START HIDDEN NOT NULL, 
    SysEndTime datetime2 GENERATED ALWAYS AS ROW END HIDDEN NOT NULL,   
    PERIOD FOR SYSTEM_TIME (SysStartTime,SysEndTime)   
)
WITH 
    (
		SYSTEM_VERSIONING = ON ( HISTORY_TABLE = History.Personel ) 
    );

    


Yeni bir özellik olduğundan dolayı bazı kısıtlamaları var tabii. Bunları uzun uzun yazmayalım linkten öğrenebilirsiniz. https://msdn.microsoft.com/en-US/library/mt604468.aspx


Always Encrypted
Verileriniz artık daha güvenli “Bizede mi lolo” Şifreleme için kullanılan KEY’i olmayan veriye ulaşamayacak (ama KEY’i yedeklemeyi unutmayın).


Dynamic Data Masking
Yine 3th parti uygulamalara taş koyacak Özellikle Day1 (devan diyenlerde var) ve UAT sistemlerde gizlenmesi gereken veriler için kullanacağımız güzel bir özellik. Daha detaylı olarak bir makalede inceleyeceğiz bununla birlikte default value ları aşağıdaki gibidir.




Birazda neler yapabileceğimizi hayal edelim :)

    
    select * from Personel 
    




Sonrasında Soyad kolonuna MASKED uyguluyoruz.
ALTER TABLE Personel
ALTER COLUMN Soyad ADD MASKED WITH (FUNCTION = 'partial(2,"XXX",0)');


ve bir tane TestUser oluşturarak onunla tablomuza Select çekiyoruz.

CREATE USER TestUser WITHOUT LOGIN;
GRANT SELECT ON Personel TO TestUser;

EXECUTE AS USER = 'TestUser';
SELECT * FROM Personel;
REVERT;



Veri tabanı içerisinde MASKED uygulanmış kolonları bulmak için aşağıdaki query çalıştırılır.

SELECT c.name, tbl.name as table_name, c.is_masked, c.masking_function
FROM sys.masked_columns AS c
JOIN sys.tables AS tbl 
    ON c.[object_id] = tbl.[object_id]
WHERE is_masked = 1;

        



Replication Geliştirmeleri

Memory-Optimized tablolarda artık replication destekleniyor. Azure database i içinde replication desteği başladı.


SQL Server 2016 CTP3 Kurulumu

Merhabalar,

Bir SQL Kurulumuyla karşınızdayız. 2016’nın başlarında çıkması planlanan SQL Server 2016 için fragman niteliği taşıyan kurulumumuza başlayalım isterseniz. Legolardan ev yapar gibi, adımlardan geçe geçe Sql Server’ımızı kuracağız. Tabi setup’ımızın olması şart. Ekim sonunda yayınlanan CTP 3.0 ( 180 günlük deneme sürümü) için buyrun tık tık :
(Özellikle ilk şunu belirtelim CTP olduğu için ürün release olduğunda aynı ekranlar olmayabilir sonra "vay biz görmedik vay biz duymadık olmasın :)" )

CTP dediğimiz kavram “Community Technology Preview” anlamına gelen, SQL Server’ın bir ön sürümü niteliğinde deneme amaçlı inceleyebileceğimiz bir sürümdür. Setup’ımızı da temin ettiysek başlayalım o zaman.

İlk olarak setup’ımızın olduğu klasörü açarak, Yönetici olarak çalıştırıyoruz.

Installation’dan en üstteki “New SQL Server stand-alone…” seçeneğini seçerek devam ediyoruz.



Lisans seçeneğinde, biz 180 günlük deneme sürümünü kullanacağımız için Evaluatin’ı seçerek devam ediyoruz. SQL Server 2016 henüz piyasaya çıkmadığı için Lisanslı olarak yükleyemiyoruz ne yazık ki.

Lisans sözleşmesini de kabul ederek devam ediyoruz

Burada karşımıza iki seçenek çıkıyor. İkinci seçeneği tıklayarak devam edersek, bir sonraki adımda tüm feature’lar seçili olarak karşımıza çıkar. Biz kendi istediğimiz feature’ları seçeceğimiz için ilkini seçerek devam ediyoruz.

SQL Server 2016 da diğer sürümlerine göre yeni Feature’ların geldiğini görüyoruz. Bir önceki, 2014 sürümünde olmayan “Advanced Analytics Extension” ve “Polybase Query Service for External Data” feature’larına bu makalede değinmeyeceğiz. Bugün basit bir SQL kurulumu yapacağız. O sebeple, Feature seçeneklerinden “Database Engine Services” ve “Management Tools”u seçerek devam ediyoruz.

Geldik kuracağımız SQL Instance’mıza isim vermeye. Bu kısımda çok düşünmemize gerek kalmadı. SQL’imiz için “MASTERSOFSQL” instance ismi, verebileceğimiz en anlamlı isim olur diye düşünüyoruz.

Server Configuration’da karşımıza bir değişiklik daha çıkıyor. Önceki sürümlerde SQL kurulumundan sonra, Local Policy’den yaptığımız Perform Volume Maintenance Task ayarını, Microsoft yeni sürümünde, SQL kurulumu sırasında sorarak, işini sağlama alıyor.

Collation’da herhangi bir değişiklik yapmıyoruz. Next diyerek devam ediyoruz.

Database Engine Configuration penceresinin, ilk sekmesinde(Server Configuration) hem SQL Server Authentication hem de Windows Authentication istediğimiz için Mixed modu seçerek, sa şifresi giriyoruz. Burada yeteri kadar karmaşık bir şifre yazmamız gerekiyor. Add Current User’a da basarak, o anki kullanıcımızı eklemiş oluyoruz.

Data Directories sekmesinde oluşturacağımız database’lerin data ve log file’ları nerede tutulacağına karar veriyoruz. D klasörümde oluşturduğum SQLDATA, SQLLOG ve SQLBACKUP klasörlerimi seçerek data ve loglarımın ayrı dosyalarda tutulmasını tercih ettim.

Başka bir yenilikle karşılaşıyoruz. TempDB sekmesi güzel düşünülmüş bir ayrıntı. Önceki sürümlerde olmayan bu sekmede TempDB data file ve log sayılarını, büyüklüğünü, büyüme şeklini, nerede tutulacağını seçebiliyoruz.

Microsoft’un “Kuruluma hazır mısın bakalım?” dediği bu kısımda da, bir önceki sekmelerde yaptıklarımızdan emin olduğumuzu düşünüyorsak INSTALL diyerek kurulumumuzu başlatıyoruz.

SQL’imizi başarıyla yüklüyoruz. Gazabımız mübarek olsun,
günün popüler tabiriyle "Vurur yüze ifadesi Success oldu bir tanesi" :):):)


Bir SQL kurulumunun daha sonuna geldik.
Yer yer hızla geçen process bar’ları gördük heyecanlandık, yer yer bitmek bilmeyen Installation’da sıkıldık, darlandık.
Succeeded gördük, neşelendik.

Bir sonraki yazımıza kadar kendinize iyi bakın

DBA mi? O ne olaki :) (Bölüm 2)

Yazımızın 1. Bölümüne erişmek için linke tıklayın DBA mi? O ne olaki :) (Bölüm 1)


Sevgili DBA’imiz,

1. İnşaa eder, kurar.(Installing/Upgrading)
Burada bir bina inşaasından bahsetmiyoruz tabi. Verdiğimiz örneklerden devam edecek olursak, bir ev hanımı ilk olarak tariflerini yazacağı defteri nasıl ayarlarsa, gerçek anlamda bir DBA de ilk olarak kullanacağı programı kurar, gerekli ayarları yapar ve gerektiğinde sürüm güncellemelerini yapar. Burada bizim defterimiz, telefon rehberimiz Microsoft SQL Server’dır.

2. Bilgilerinin güvenliğini sağlar. (Security)
Nasıl bir müzisyen bestelerinin çalınmaması için onları en güvendiği yerlerde saklarsa, DBA de sorumlu olduğu bilgilerin güvenliğini sağlamaktan sorumludur. Bestesi çalınması bir müzisyen için ne kadar kötüyse, bilgilerinin başka ellere geçmesi de bir DBA için hoş karşılanamayan bir durumdur. Düşünsenize, bankadaki hesap bilgilerinize başka birinin erişebildiğini… Açıklanması zor bir durum.

3. Yedeklenmesini\ Yedekten dönülebilmesini garanti eder. (Backup/Recovery)
Bir öğretmenin sınav, ödev ve ara sınav sonuçlarını tuttuğu kağıtlarının olduğunu düşünelim. Her sınıf için bir sürü saklamak zorunda olduğu kağıdı mevcut. Peki bir gün, masasındaki sıcak çikolatanın bu kağıtların üzerine döküldüğünü varsayalım. Şimdi ne yapacak? Eğer elinde o kağıtların fotokopisi veya herhangi bir yedeği yoksa, mecburen tüm kağıtları yeniden tek tek hazırlayacak. Bu da belki ekstra birkaç gün daha harcamasına neden olacak. Öğretmen, bu kazanın üstünden bir şekilde gelse de DBA’in işi ne yazık ki bu kadar kolay değil. Burada bilgilerimi kaybettim, yeniden oluşturayım diyemeyiz. Hesabınızdaki paranın birden uçtuğunu ve bunu tutan kaydın da silindiğini düşünsenize. Bu sebeple işini yapan bir DBA, bilgilerinin güvenilir olduğu kadar, bu bilgilerin düzenli olarak yedeğinin alındığını ve kötü bir kaza anında bu yedeklerden dönebileceğini de garanti edebiliyor olmalı. Bu noktada ne kadar sıklıkla yedek alacağı(saatli mi, günlük mü, haftalık mı…) DBA’in çalışma ortamındaki bilgilerin kritikliğine göre değişeceğinden, bunun da analizini yapabiliyor olmalı.

4. Performansı iyileştirmeye çalışır.
Daha iyisi olma ihtimali varken, neden kötü bir sistemle çalışalım ki? Her sene telefonların, laptopların yenileri çıkıyor. Burada görünüşe baktığımız kadar, performansını da nasıl inceliyorsak, bir önceki sürümle yeni çıkan sürüm arasında nasıl farklılıklar olduğunu araştırıyorsak, iyi bir DBA’de kendi kullandığı sistemi daha efektif kullanabilmek adına gerekli çalışmalar yapmalıdır. Yazılan sorguların, ne kadar sürede getirdiğini, kaç okuma, kaç yazma yaptığını, iyileştirme yapılabilme ihtimali olup olmadığını… inceliyor olmalıdır. Birbirinin kitleyen sorgular var mı, makinanın CPU’su, memory’si nasıl? Bakıyor olmalı.

5. Yüksek Erişilebilirlik(High Availability) ve Felaket Senaryosu(Disaster Recovery) Planlarını Yapar.
Bazı mağazalar elektrikler kesintisinde dahi müşteri kaybetmemek adına nasıl jenaratörü devreye sokuyorsa, işini iyi yapan bir DBA de yaşanan en ufak bir aksaklık ya da kesintide, verilerinin ulaşılabilir olmasını sağlamalı(High Availability). Karşılaşabileceği felaketlere karşı kendisini önceden hazırlayarak, gerekli önlemleri alabilmeli. Çalıştığı binada yangın çıkabilir, bulunduğu bölgeyi sel basabilir veya deprem olabilir. Bu tarz durumlarda, verisine ulaşabileceği, bulunduğu bölge dışında, başka bir güvenli alanı önceden düşünerek, hazırlığını yapmalıdır (Disaster Recovery).

6. Kapasiteyi Planlar.
Çiçeklerle ilgilendiniz mi bilmiyorum. Ama mutlaka ilgilenen bir iki kişiye rastlamışsınızdır. Gün be gün çiçeğin büyümesini, suyunun yeterli olup olmadığını, saksına sığıp sığamayacağını inceler, zamanla saksısına sığmazsa değiştirir, yeni çözüm yollarıyla çiçeklerini büyütmeye devam eder. Aslında bir DBA için elindeki veriler de birer çiçeğidir. Verilerinin boyutlarını düzenli takip etmeli, büyümesini izlemelidir. Çiçeğin saksıya sığıp sığamayacağını inceleyen kişi gibi, DBA da verilerini tuttuğu veri tabanlarının büyüyebileceği yeterli disk alanı olup olmadığını kontrol etmelidir. Çiçekler çok büyüdüğünde arşivlenmez ama DBA, gerek gördüğü yerlerde verilerini arşivlemelidir.

7. Bakım Yapar(Maintenance).
Arabanın yağına, suyuna bakar gibi, DBA de belli başlı bakımlarını yapmalıdır. “Verileri tutarlı mı?”, “Kullanabileceği fazla alan var mı?”, “Verilerini düzgün sıralayabiliyor mu?”, “İstatistikleri güncel mi?” tarzında sorularının cevaplarını arıyor ve bunlarla ilgili çalışmalar yapıyor olmalı. SQL’in tuttuğu kayıtları(log), hata kayıtlarını(error log) incelemeli. Kurduğu düzenli çalışan işlerin(job), gerçekten de düzenli çalışıp çalışmadığını, çalışmadıysa nasıl bir hata yüzünden çalışmadığını analiz etmeli.

8. İş Zekası ve Veri Madenciliği konuları hakkında bilgi sahibidir.
DBA, bu konularla doğrudan ilgilenmese de, genel anlamda bilgi sahibi olmalıdır.

9. Toplantılara katılır.
Arkadaşlarımızla düzenleyeceğimiz bir etkinlikte bile, birbirimize sorar, en uygun günü, yeri, saati belirleriz. Bir DBA de yapacağı işlerde, sistemle, networkle, yazılımcısıyla ortak hareket ediyor olmalıdır. Toplantılara katılarak, kendi sisteminin ne kadar etkileneceğini, neye müsaade edip neye edemeyeceğini paylaşmalı, insanlarla iletişim kurmalıdır.

10. Dökümantasyon yapar.
Dökümantasyon, angarya bir iş gibi dursa da, en iyi DBA yaptıklarını yazan DBA’dir. En basitinden, karşısına çıkan bir sorunu, o an bulduğu bir yöntemle çözmüş olsa da, iki gün sonra bu yöntemi hatırlamayabilir. Soruna karşı uyguladığı çözümü not etmiş olsa, iki kere araştırma yükünden kurtulmuş, zamandan tasarruf etmiş olacaktır. Kendisi için ileride oldukça işine yaracak dökümanları yazmaktan kaçmamalıdır. Kaldı ki, kendisi kullanmayacak olsa dahi, bir sonraki junior DBA için yararlı olabilecek tecrübelerini aktarmış olacaktır. Ben ilk kez SQL ile tanıştığımda “Bilgi, seninle ölmesin” demişti işini çok iyi yapan bir DBA’imiz. O kişinin kim olduğunu, nasıl biri olduğunu zamanla siz de öğreneceksiniz

11. Yatar.
İşte en sevdiğim bölüm. Tek geçerim. İster inanın ister inanmayın bir DBA, işini iyi yapan bir DBA yatar. Temeli sağlam atılan, düzgün inşaa edilen bir bina nasıl çok büyük bir sorun çıkarmazsa, mimarisini sağlam kurmuş, adımlarını bir bir yerine getirmiş bir DBA de yatar. Tabi, yazılım da dahil olmak üzere diğer çalışma arkadaşları da aynı özen ve hassasiyeti gösterirse

Toparlayacak olursak, DBA’lik annelik gibidir. Gerektiğinde yemeğini yarıda bırakıp çalışırsın, uykunun en tatlı yerinde kalkıp bakarsın, bilgilerini korursun kollarsın, bir çocuk büyütür gibi gerekli özen ve hassasiyetle seversin SQL’ini. Çocuk büyüdüğünde bir anne nasıl gururla bakarsa evladına, bir DBA de gururla bakar sistemine.

Ne diyelim, kolay gelsin. Emeklerinizin karşılığını almanız dileğiyle…