STRETCH DATABASE NEDİR? SQL SERVER 2016

Yayınlandı: 12 Ocak 2017 / Genel

SQL SERVER İLE STRETCH DATABASE KULLANIMI

Herkese Merhaba,

Bu yazımda sizlere SQL  Server 2016 ile birlikte Hybrid Cloud Solutions başlığı altında gelen yeniliklerden biri olan STRETCH DATABASE özelliğinden bahsediyor olacağım. Stretch database nedir?

Günümüz teknolojisiyle birlikte Microsoft yerinde saymayarak yeni ürünler üretmeye, varolan teknolojilerini geliştirmeye odaklanmış durumda. Bildiğimiz üzere Microsot cloud alanında da geliştirmeler yapmaya devam ederek daha güçlü durumda olmayı hedeliyor. SQL Server 2016 ile birlikte gelen yeniliklerden biri olan stretch database özelliği ile birlikte Microsoft bizlere veritabanımızdaki belli başlı verilerimizi Azure portalı üzerinde bulunan Azure SQL veritabanlarımız içerisinde tutabileceğimizi açıkladı.

Hangi tür verileri Azure’a göndermeliyiz?

Local veritabanlarımızda bulunan bir tabloyu sorguladığımızda o sorgu SQL Server’ın oluşturduğu execution plan doğrultusunda çalışarak sonuç döndürecektir. Ancak Azure’a gönderdiğimiz verileri sorguladığımızda localden çıkarak network üzerinden azure’a erişerek ve size oradaki datalara erişmenizi sağlar.

 

giris

Stretch Database yeniliğini kullanarak verilerimizi iki farklı şekilde Azure’a gönderebiliyoruz. Birinci yöntem Entire Table seçeneği. SQL Server CTP versiyonlarında Stretch DB sadece Entire Table seçeneği ile sunulmuştu. Yani siz Stretch DB özelliğini kullanmak istediğinizde tüm tabloyu azure’a göndermek zorundaydınız.

Stretch DB’nin çıkış amacı arşiv verilerimizin disklerinizde çok fazla yer tutmasını engelleyerek daha az maliyetli olan azure’a taşınmasıydı. Mesela sizin satışla ilgili bir arşiv tablonuz var. Ve siz sadece 2015 öncesi verilerinizi Azure üzerinde, 2015 ve sonraki verilerinizin ise fiziksel sunucunuzda durmasını istiyorsunuz. CTP versiyonlarındaki Stretch DB özelliği ile bunu yapamıyorduk, Ancak Microsoft SQL Server 2016 yı tam olarak sahaya sürdüğünde yukarıdaki senaryoyu karşılayabilecek bir ek geliştirme yaptı. Bu sayde tablo içindeki verilerin içeriğine göre (mesela tarih kolonları) verilerimizi bölerek azure’a gönderebiliyoruz.

 

İlk olarak stretch db için kullanacağımız bir tablo oluşturalım ve içine veri yükleyelim.

 

–create database
use master
go
Create Database StretchDB
go
use StretchDB

–create table and insert data
select * into dbo.StretchTable
from AdventureWorks2014.Sales.SalesOrderHeader

 

Bu veritabanındaki siparişler tablosuna bakıyoruz ve yıllara göre siparişlerimizi ve sipariş sayısını gruplanmış olarak görüyoruz.

–Year-based total sales
select
year(OrderDate) as Year,
count(OrderDate) as TotalSales
from StretchTable
group by year(orderdate)
order by 1

3

 

Şimdi 2014 yılında yapılan siparişlerin tarihini bugün olarak güncelleyelim.

–Update 2014’s orders as 2016’s orders
update StretchTable set OrderDate = GETDATE()
where year(OrderDate) = 2014

Verilerin son haline bakıyoruz.

4

 

Bizden istenen 2017 den önceki siparişlerimin olduğu verilerin tamamını azure’a göndermek. 2017 ve sonrasın ise local de yani diskimizde kalsın istiyoruz. İlk başta veri kavramlarından bahetmiştik. 2017 de yapılan sipairşler hot veri olarak kabul ediyoruz. 2016 ve öncesindeki verileri ise cold data olarak sınıflandırabiliriz. Bu sınıflandırma sonucunda hot data ve cold data satır sayısı aşağıdaki gibidir.

5

Stretch DB özelliğini aktif etmek için öncelikle SQL Server seviyesinde remote data archive özelliğini aktif ediyoruz.

İlk olarak  Exec sp_configure komutu ile remote data archive özelliğinin aktif olup olmadığını kontrol ediyoruz. Eğer run_value 0 ise kapalı anlamına geliyor ve aşağıdaki kod ile aktif hale getiriyoruz.

–Show remote data archive
Exec sp_configure

–Change it
EXEC sp_configure ‘remote data archive’, 1;
RECONFIGURE; GO
1

 

Stretch DB özelliğini hangi veritabanı üzerinde kullanacaksak eğer o veritabanı üzerinde stretch db özelliğini aktif hale getiriyoruz.

2

Klasik introduction ekranını geçiyoruz. 🙂

6

Bu ekranda azure’a hangi tabloları göndermek istiyorsak o tabloyu seçiyoruz. Ancak burada dikkat etmemiz gereken kısım Migrate sekmesinin altındaki Entire Table kısmı. Çünkü eğer siz tablonun tamamını azure’a taşımak istiyorsanız Entire Table seçeneğini seçmeniz gerekiyor. Eğer tablo içindeki belli veriyi taşımak istiyorsanız Entire table seçeneği ile değil, entire table yazan yere tıklayarak Choose Rows seçeneği ile devam etmemiz gerekiyor.

7

Burada azure’a göndermek istediğimiz veriler için gerekli olan koşulları belirtiyoruz. Öncelikle Choose Rows  seçeneğini seçiyoruz. Daha sonra sipariş tarihi kolonuna göre verileri sınıflandırdığımı belirtiyoruz.(OrderDate) Koşul için gerekli tarihi giriyoruz.(20160101). Daha sonra yapmış olduğumuz koşulu Check ediyoruz. SQL Server yukarıda belirtmiş olduğumuz şartlara uygun olarak gerekli kodun scriptini alta çıkarıyor.

 

8

 

Eğer Entire Table seçeneği ile devam etmiş olsaydık SQL Server bütün tablodaki tüm verileri azure’a taşıyacaktı. Daha sonra bu tabloya bir veri eklendiğinde SQL Server gidip veriyi direk Azure’daki tabloya yazacaktı. Ancak şimdi SQL Server arka planda bir Table Valued Function (TVF) oluşturacak ve gelen verinin orderdate kısmına bakarak verileri azure’a yada localdeki tabloya yazacak. Oluşturacağı TVF içerisinde yukarıda oluşturuduğu scripti kullanacak. Bu sayede gelen veriler TVF den geçerek hangi koşula uyuyorsa o koşula göre yapılarımızda tutulacak.

Şimdi Azure hesabımıza bağlanıyoruz.

9

Bu ekranda azure hesabımızla alakalı gerekli konfigurasyonları tamamlıyoruz. Azure hesabımızın bölgesini seçiyoruz. Daha sonra Azure daki Serverımızı belirliyoruz. Burada iki farklı seçenek var. Eğer siz azure hesabınızda var olan bir server üzerinde bu işlemi gerçekleştirmek istiyorsanız Existing Server seçeneğini seçerek varolan serverlardan birini seçerek devam edebilirsiniz. Eğer azure’da hiç server oluşturmadıysanız Create New Server seçeneği ile devam edebilirsiniz. Bu sayede server kurulumunu da azure portalına gitmeden defaul ayarlarıyla yapabiliyorsunuz.

10

Local ile Azure arasındaki veri alış verişi sırasına güvenlik sebebiyle oluşturulacak olan DMK için şifre giriyoruz.

11

Next diyerek süreci tamamlıyoruz.

12

 

Şimdi tüm işlemler tamamlandıktan sonra verilerimizin nerede tutulduğuna bakalım.

sp_spaceused @objname = ‘dbo.StretchTable’, @mode = N’LOCAL_ONLY’

komutuyla ilgili tablonun diskte duran satır sayısı bilgisine ulaşıyoruz. Gördüğünüz gibi 11761 adet veri diskte duruyor. Yani bizim için HOT DATA olan veriler.

13

sp_spaceused @objname = ‘dbo.StretchTable’, @mode = N’REMOTE_ONLY’ komutuylada ilgili tablonun azureda duran verinin satır sayısını kontol ediyoruz. 19704 satır veri azure’a taşınmış durumda.

 

14

 

Şimdi tablomuza bir sipariş insert edelim. Bu siparişin tarihi 20120101 olsun.

INSERT INTO [dbo].[StretchTable]
([RevisionNumber],[OrderDate],[DueDate],[ShipDate],[Status],[OnlineOrderFlag],[SalesOrderNumber],[PurchaseOrderNumber],[AccountNumber],[CustomerID],[SalesPersonID],[TerritoryID],[BillToAddressID],[ShipToAddressID],[ShipMethodID],[CreditCardID],[CreditCardApprovalCode],[CurrencyRateID],[SubTotal],[TaxAmt],[Freight],[TotalDue],[Comment],[rowguid],[ModifiedDate])
VALUES
(8,2012-01-01,GETDATE(),getdate(),5,1,’SO59814′,NULL,NULL,1,NULL,NULL,1,1,1,NULL,NULL,NULL,10,10,10,30,NULL,newid(),GETDATE())

15

Veriyi ekledikten sonra tekrar kontrol ediyoruz ve aşağıdaki gibi azure’da tutulan verimizin satır sayısı 19705 olduğunu görüyoruz. Yani eklediğimiz kayıttaki sipariş tarihi 2016 dan büyük olduğu için SQL Server tarafından stretch table oluşturduğumuzda arka planda oluşan TVF sayesinde ilgili kayıt direk azure’a eklenmiştir.

ek1

Şimdi sipariş tarihi 2017 olan bir kayıt ekleyelim.

INSERT INTO [dbo].[StretchTable]
(
[RevisionNumber],[OrderDate],[DueDate],[ShipDate],[Status],[OnlineOrderFlag],[SalesOrderNumber],[PurchaseOrderNumber]
,[AccountNumber],[CustomerID],[SalesPersonID],[TerritoryID],[BillToAddressID],[ShipToAddressID],[ShipMethodID],[CreditCardID],[CreditCardApprovalCode],[CurrencyRateID],[SubTotal],[TaxAmt],[Freight],[TotalDue],[Comment],[rowguid],[ModifiedDate]
)
VALUES
(8,getdate(),GETDATE(),getdate(),5,1,’SO59814′,NULL,NULL,1,NULL,NULL,1,1,1,NULL,NULL,NULL,10,10,10,30,NULL,newid(),GETDATE())

16

Gördüğümüz gibi sipariş tarihi 2017 olduğu için bu HOT DATA dediğimiz kısıma giriyor. TVF yönlendirmesiyle ilgili kayıt azure’a değil, direk diskimize yazılıyor. Daha önce 11761 olan diskimizdeki satır sayısı 11762 olmuştur.

ek2

SQL Server’in arka planda oluşturduğu TVF’ı fonksiyonlar altında görebiliriz.

17

Tablonun içeriğine girdiğimizde aşağıdaki gibi kod bloğunu görebiliriz.

18

Stretch Database özelliğini kapattığımızda Azure’daki verilerimize ne olacak?

Stretch DB özelliğini kapatmak istediğimizde aşağıdaki gibi iki seçenekle karşılaşıyoruz. Verileri azure’da bırak. Yada verileri tekrar azure’dan geri getir.

19

Tabloyu disable ettikten sonra veritabanının stretch db özelliğini pasife çekebiliriz. Ayrıca kurulum sırasında azure üzerinde oluşturduğunuz server’ı silmek istiyorsanız eğer azure portalına girerek ‘SQL Server’ olarak aratıp serverlera erişebilir, ilgili server’ın içine girdikten sonrada o server’ı aşağıdaki gibi kaldırabilirsiniz.

 

20

Server’ı kaldırdıktan sonra altında oluşan veritabanı kendiliğinden silinecektir.

Yenilik için kişisel yorumum : SQL Server 2016 ile birlikte gelen yenilikler SQL Server tarafını çok güçlendirdi. Stretch Database yeniliği de özellikle vizyon açısından önemli yeniliklerden biri olmakla beraber Microsoft’un bu alana yapacağı yatırımlar ve geliştirmeler ile birlikte çok  daha fazla kullanışlı hale gelecektir.

Eğer Stretch Database ile ilgileniyorsanız yada Azure üzerindeki hizmetleri kurcalamak isterseniz Microsoft bizlere denememiz için ücretsiz olarak 1 ay kullanabileceğimiz 610 TL lik deneme hesabı sunuyor. Kesinlikle değerlendirmenizi tavsiye ederim.Aşağıdaki linkten azure portalına gidip deneme hesabı açabilirsiniz.

https://azure.microsoft.com/tr-tr/free/?&wt.mc_id=AID_SEM_

Umarım sizler için faydalı olmuştur.

Bir sonraki yazıda görüşmek üzere…

 

 

 

Bir Cevap Yazın

Aşağıya bilgilerinizi girin veya oturum açmak için bir simgeye tıklayın:

WordPress.com Logosu

WordPress.com hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Google fotoğrafı

Google hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Twitter resmi

Twitter hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Facebook fotoğrafı

Facebook hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Connecting to %s