SQL Server Sürümleri ve Her Sürümde Gelen Yenilikler
Bu makalede SQL Server 2000’ten başlayarak her sürümde gelen yeniliklerin veritabanı yöneticileri ile ilgili kısımlarını anlatacağım.
Yeni sürümler geldikçe de makaleyi güncellemeye devam edeceğim. Böylelikle hangi özelliğin, sql server’ın hangi sürümünde geldiğini tek makale içersinden bulabileceğiz.
Ayrıca her konuyu farklı makalelere yönlendirdiğim için öğrenmek isteyeceğiniz konulara kolayca geçiş yapabileceksiniz.
Bu makaleyi okumadan önce sizi yönlendirmek istediğim, faydalı olacağını düşündüğüm birkaç makale var.
SQL Server’ın tarihine kısaca “SQL Server Nedir?” isimli makaleden göz atmanızı öneririm.
Bir SQL Server veritabanı yöneticisinin bilmesi gerekenleri de “SQL Server Veritabanı Yöneticisinin Yol Haritası” isimli makaleden bulabilirsiniz.
Yeni kurulumdan sonra bazı konfigürasyonlar yapmak gerekir. Bununla ilgili “Yeni Kurulumda Yapılması Gereken Konfigürasyonlar” isimli makaleyi okumanızı tavsiye ederim.
High Availability ile ilgili SQL Server’daki seçenekler arasındaki farkları anlatan “SQL Server Failover Cluster, Database Mirroring, Always ON,Replication ve Log Shipping Farkları” isimli makalenin de faydalı olacağını düşünüyorum.
Makaleye geçmeden önce son olarak;
www.veritabani.gen.tr’yi, SQL Server öğrenmek için menüdeki kategorilerden ayrı ayrı takip edebilirsiniz.
SQL Server 2000 ile Gelen Yenilikler
- User Defined Function’lar geldi. “Used Defined Function Nedir?” isimli makalede detayları bulabilirsiniz.
- Indexed View’ler hayatımıza girdi. “Indexed View Nedir Ve Nasıl Oluşturulur” isimli makalede detayları bulabilirsiniz.
- SQL Server 7.0 ile view tanımında UNION ALL kullanarak partioned view’ler oluşturabiliyorduk. Fakat View üzerinde tanımlı olan tüm tabloların view’in tanımlandığı instance üzerinde olması gerekiyordu. Birden fazla instance üzerindeki tablolardaki kayıtları UNION ALL ile bir araya getirebileceğimiz Distributed Partitioned View’ler hayatımıza girdi. “Distributed Partitioned View Nedir ve Nasıl Kullanılır” isimli makalede detayları bulabilirsiniz.
- Instead Of ve After Trigger’ları hayatımıza girdi. “SQL Server Trigger Çeşitleri” isimli makalemde detayları bulabilirsiniz.
- Bigint , sql_variant ve table veri tipleri birer yenilik olarak duyuruldu. “SQL Server Veri Tipleri” isimli makalede detayları bulabilirsiniz.
- SQL Server 2000 ile beraber artık bir sunucu üzerinde birden fazla instance kurulabiliyor.
- XML desteği geldi.
- Log Shipping şu an için eskimiş bir teknoloji olsa da hala kullanım alanları bulunuyor. Bu özellikte SQL Server 2000 ile beraber karşımıza çıkıyor. “SQL Server Log Shipping Kurulumu” isimli makalede detayları bulabilirsiniz.
- Indexed View’ler hayatımıza girdi. “Indexed View Nedir Ve Nasıl Oluşturulur” isimli makalede detayları bulabilirsiniz.
SQL Server 2005 ile Gelen Yenilikler
- SSMS(SQL Server Management Studio) en göze çarpan yeniliklerden biri olarak hayatımıza girdi.
- SQL Server Configuration Manager karşımıza yeniliklerden biri olarak çıkıyor. “SQL Server Configuration Manager Ayarları” isimli makalede detayları bulabilirsiniz.
- Database Engine Tuning Advisor ile performance tuning işlemi yapabiliyoruz. “Database Engine Tuning Advisor” isimli makalede detayları bulabilirsiniz.
- CLR(Common Language Runtime) özelliği geldi. Bu özellik sayesinde TSQL ile yapamayacağınız bir çok kompleks işlemi .NET Framework’ünü kullanarak gerçekleştirebilir ve ürettiği dll’i SQL Server’a import ederek veritabanı seviyesinde kullanabilirsiniz. “CLR(Common Language Runtime)” isimli makalede detayları bulabilirsiniz.
- GRANT statement’ı ile tüm izinler verilebilir hale geldi. Aşağıdaki linkler’de veritabanı ve server seviyesinde GRANT, REVOKE ve DENY yapabileceğiniz yetkileri permission name kolonunda görebilirsiniz. GRANT ile yetkiyi veriyoruz. REVOKE ile verilmiş yetkiyi alıyoruz. DENY ile de yetkiyi engelliyoruz.
https://technet.microsoft.com/en-us/library/ms188367(v=sql.90).aspx
https://technet.microsoft.com/en-us/library/ms186260(v=sql.90).aspx
- Bütün nesneler artık bir şema içersinde yer alıyor. Ayrıca şemaların owner’ları role’ler olabiliyor. Bu şekilde bir şemayı birden fazla kişi yönetebiliyor. Önceki sürümlerde her nesnenin bir owner’lığı vardı ve bu yüzden bir kullanıcıyı silmek gerektiğinde owner’ı olduğu tüm nesnelerde owner’lığı başka bir kullanıcıya tek tek atamak gerekirdi. Owner’lık bu sürümle şema seviyesinde olacak şekilde ayarlandığı için veritabanı yöneticileri bu anlamda iş yükünden kurtulmuş oldu.
- Tablo ve Index Partition özelliği bu sürümle geldi. Aşağıdaki makalelerde partition ile ilgili detayları bulabilirsiniz.
“Veritabanında Partition Yapılmış Tabloları Bulmak“,
“Sliding Window-Switch Partition-Split Range-Merge Range“,
“Partition Yapılmış Tablodaki Partition Detaylarını Görmek“
- Address Windowing Extensions (AWE) ile mevcut iş yüküne göre kullanılan memory artık dinamik olarak ayarlanıyor. “AWE(Address Windowing Extensions) ile Memory Limitini Kaldırmak” isimli makalemde detayları bulabilirsiniz. Önceki sürümlerde AWE aktif edildiğinde, servis başlangıcında memory instance tarafından tekrar değişmeyecek şekilde alınıyordu. Bu yüzden çeşitli iş yüklerine göre memory kullanımı ayarlanamıyordu.
- ATTACH_REBUILD_LOG ifadesi ile bütün log dosyaları olmadan veritabanını attach edebiliyoruz. “ATTACH_REBUILD_LOG ile Log Dosyası Olmadan Attach Yapmak” isimli makalede detach attach işlemlerinin detaylarını görebilirsiniz.
- Instant File Initialization ile ilk disk üzerinden alan tahsis süresi kısaldı. Örneğin veritabanı oluşturmak ya da restore etmek gibi. “Instant File Initialization” isimli makalede detayları bulabilirsiniz.
- Index’ler disable edilebiliyor. Index’lerin disable edilmesi ile ilgili detaylı bilgi için “Index’i Disable Etmek” isimli makaleye göz atmak isteyebilirsiniz.
- ALTER INDEX komutu ile index’leri rebuild ve reorganize edebiliyorsunuz. Index’ler rebuild edilebiliyor.
- XML Format File’lar için XML Schema çıkarıldı.
- OPENROWSET ‘i Bulk opsiyonu ile birlite kullanarak veriyi hedef bir tabloya yüklemeden basit bir select ifadesiyle okuyabiliyorsunuz. Aşağıda örnek bir script bulabilirsiniz.
DECLARE @sql NVARCHAR(MAX) SET @sql = 'UPDATE dbo.kelimeler ' SET @sql = @sql + 'SET DOSYA = (SELECT BulkColumn FROM OPENROWSET( BULK ''C:\resim\'+ @DosyaIsmi +' '', Single_Blob) AS picture) ' SET @sql = @sql + 'WHERE KELIME = ''' + @DosyaIsmi2+''''
Örneğin devamını ve ne işe yaradığının detaylarını “Bir klasördeki image dosyalarını tsql kodlarıyla tabloya aktarmak” isimli makalede bulabilirsiniz.
Ayrıca OPENROWSET ve BULK INSERT için “Bir klasördeki image dosyalarını tsql kodlarıyla tabloya aktarmak“, “BULK INSERT Kullanımı” ve “OPENROWSET Kullanımı” isimli makaleleri okumak isteyebilirsiniz.
- SQL Server 2005 ile Database Mirroring, SQL Server 2005 SP1 ile de Database Mirroring için, mirror yapılmış veritabanlarını izleme amacıyla Database Mirroring Monitor özelliği geldi. “Database Mirroring Nedir ve Nasıl Yapılır? Mirroring Hataları ve Çözümleri..” isimli makaleyi okumak isteyebilirsiniz.
- 32 ve 64 bit işletim sistemleri için Failover Cluster teknolojisi iyileştirildi. Enterprise, Developer ve Enterprise Evalution Edition, işletim sisteminin desteklediği kadar node’u desteklerken, Standart Edition 2 node’lu failover cluster mimarisini destekliyor.
Önceki sürümlerde 32 bit işletim sistemi için 4 node’lu failover cluster desteği, 64 bit işletim sistemi için 8 node’lu(SQL Server 2000 için) failover cluster desteği vardı. Failover Cluster teknolojisinin detayları ve uygulamalı örneği için “SQL Server Failover Cluster Kurulumu” isimli makaleyi okumak isteyebilirsiniz.
- Enterprise, Developer ve Evalution Edition bir sunucu üzerinde 50 instance destekliyor. Diğer sürümlerin bir sunucuda desteklediği maksimum instance sayısı ise 16. SQL Server 2000’de tüm sürümler için bir sunucu üzerinde maksimum desteklenen instance sayısı 16 idi.
- DAC(Dedicated Admin Connection) geldi. Detayları “DAC(Dedicated Administrator Connection)” isimli makalede bulabilirsiniz.
- Hot Add Memory ile server’ı restart etmeden fiziksel olarak memory eklenebiliyor. Bu işlemi gerçekleştirebilmeniz için işletim sisteminizin ez az Windows Server 2003 ve SQL Server’ın en az SQL Server 2005 olması gerekiyor. Aynı zamanda SQL Server’ın da 64 bit olması ya da AWE’nin aktif edilmiş olması gerekiyor. SQL Server’ı -h startup parametresiyle başlatmanız gerekiyor. SQL Server 2017 ‘de bu parametre artık desteklenmiyor.
“AWE(Address Windowing Extensions) ile Memory Limitini Kaldırmak” isimli makaleyi okumak isteyebilirsiniz.
Hot Add Memory’yi kullanabilmek için SQL Server 2005’i başlangıçta -h parametresi ile başlatmanız gerekiyor. SQL Server başlangıcında SQL Server’ın çalışma şeklini belirleyen startup parametreleri için “SQL Server Startup Parametreleri” isimli makaleyi okumanızı tavsiye ederim.
Önemli bir not olarak memory’i online bir şekilde kaldıramıyoruz.
- Database Snapshot özelliği geldi. “Database Snapshot Nedir ve Nasıl Alınır?” isimli makalede detayları bulabilirsiniz.
- Checksum ve Read-Retry sql server veritabanı alt yapısına eklendi. Checksum için “Checksum ve TornPage Kavramları” isimli makalede detayları bulabilirsiniz. Read-Retry kavramı ise sql server bir I/O problemi tespit ettiğinde kısa süreli bir I/O problemi olup olmadığını tespit etmek için 4 defaya kadar fail olmuş I/O işlemini yeniden dener. Read-Retry özelliği ile I/O problemleri daha detaylı incelenmiş olur.
- Mirror Backup özelliği geldi. Detayları “Mirror Backup” isimli makalede bulabilirsiniz.
- Backup ve Restore işlemlerinde I/O hatalarına karşı TORN_PAGE_DETECTION veya CHECKSUM kontrolleri geldi. Backup ve Restore ifadelerinin sonuna WITH CHECKSUM koymanız yeterli. Backup ve Restore sırasında bu kontrolleri kullanabilmek için veritabanı seviyesinde page verify seçeneklerinin set edilmiş olması gerekiyor. “Checksum ve TornPage Kavramları” isimli makalemde detayları bulabilirsiniz.
- Beklenmedik kapanmalardan sonra servisin açılması ve database mirroring failover sırasında recovery süresi kısaldı.(Fast Recovery) SQL Server 2005’ten önceki sürümlerde recovery işlemi tamamen bitene kadar veritabanına erişilemiyordu. SQL Server 2005 ile beraber recovery’de undo fazındayken veritabanına erişilebiliyor. SQL Server’da recovery işlemlerinin detayı için “Database Checkpoint Nedir” isimli makaleyi okumak isteyebilirsiniz.
- Backup ve Restore işlemlerinde CONTINUE_AFTER_ERROR seçeneği geldi. Bu seçenekle beraber herhangi bir hata alınsa bile Database Engine işleme devam ediyor. Hatalı backup’ları restore edebilmek için güzel bir seçenek. Aşağıdaki gibi kullanabilirsiniz. Restore işlemi bittikten sonra restore sırasında alınan hatalardan ve error log’dan yola çıkarak restore edilmiş veritabanındaki hataları düzeltebilirsiniz.
RESTORE DATABASE veritabaniismi FROM … WITH CONTINUE_AFTER_ERROR, [ NORECOVERY ]
- Online Restore kavramı geldi. Veritabanı partial restore edilirken recover’ı tamamlanmış kısımlarına erişilebiliyor. Partial Restore için “FileGroup Backup ve Restore İşlemleri(Partial Backup)” ve “PieceMeal Restore” isimli makaleleri okuyabilirsiniz.
Veritabanında EMERGENCY seçeneği geldi. Bu seçeneği veritabanı SUSPECT mode’a düştüğü zaman kullanıyoruz. “Suspect Olmuş Veritabanını Kurtarmak” isimli makaleden faydalanabilirsiniz.
- WITH (MAXDOP=8) hintini Index DDL işlemerinin sonuna koyabiliyoruz. Bu hint ile indexleri oluştururken, rebuild ederken, silerken set ettiğimiz sayıda core’u kullan demiş oluyoruz. Bu sayede index rebuild işlemlerini daha hızlı gerçekleştirebiliriz. Maxdop hinti her sorgu için faydalı değildir. Bazı sistemlerde performansı daha kötü hale getirebilir. Ama şahsi tecrübem OLTP sistemlerde genelde 1 olarak set edildiğinde maksimum performansı veriyor.”Numa Nodes, MAX/MIN Server Memory, Lock Pages In Memory, MAXDOP” isimli makaleyi okumak isteyebilirsiniz.
- Plan Guides ile artık müdahale edemediğiniz sorgularınıza query hint ekleyebilirsiniz. “sp_create_plan_guide Sistem Stored Procedure’ü ile Sorgularınızın Performansını Artırın” isimli makalemde detayları bulabilirsiniz. Query Hint’ler hakkında detaylı bilgi almak için “SQL Server Query Hint Kavramı ve Bazı Query Hint’ler” isimli makalemi okumak isteyebilirsiniz.
- Snapshot Isolation Level geldi. “Isolation Level 1“, “Isolation Level 2“, “Isolation Level 3” makalelerinde tüm isolatin level’ler hakkında detaylı bilgiler bulabilirsiniz.
- Forced Parameterization ile artık parametresiz gelen sorguları parametreli hale getirebiliyorsunuz. “Optimize for ad hoc workloads ve Parameterization” isimli makalede detayları bulabilirsiniz.
- Index istatistiklerinin arka planda otomatik olarak güncellenmesini sağlayan AUTO_UPDATE_STATISTICS_ASYNC isminde bir veritabanı özelliği geldi. Veritabanı üzerinde sağ tıklayarak properties dedikten sonra Options sekmesinden ayarlayabilirsiniz. “SQL Server’da İstatistik Kavramı ve Performansa Etkisi” isimli makalede istatistik güncelleme hakkında detayları bulabilirsiniz.
- Computed Column’a persisted özelliği geldi. “Computed Column Nedir ve Nasıl Kullanılır?” isimli makalede detayları bulabilirsiniz.
- Multiple Active Result Sets (MARS) ile eş zamanlı olarak bir connection üzerinden birden fazla batch çalıştırılabiliyor. Daha çok yazılımcıların kod yazarken veritabanına erişimlerinde ihtiyaçları olabiliyor. Örnek bir kod’u aşağıdaki link’te bulabilirsiniz.
https://docs.microsoft.com/en-us/dotnet/framework/data/adonet/sql/manipulating-data
- Index’lere artık Included Column ekleyebiliyoruz. “SQL Server’da Index Kavramı ve Performansa Etkisi” isimli makalede included column hakkında detayları bulabilirsiniz.
- Index oluştururken ya da index’i alter ederken kullanabileceğimiz ALLOW_ROW_LOCKS ve ALLOW_PAGE_LOCKS opsiyonları geldi. ALLOW_ROW_LOCKS index’e erişirken row lock kullanılıp kullanılmayacığını, ALLOW_PAGE_LOCKS ise page lock kullanılıp kullanılmayacağını belirler. Default’un da bırakmanızı tavsiye ederim.(Default olarak ON ‘dur.) Bir kere default değerini değiştirdiğimde bir uygulama tamamen kilitlenmişti.
- XML veri tipindeki kolonlara artık index eklenebiliyor.
- Indexed View’de geliştirilme oldu. Artık scalar expression’lar, scalar aggregate ve user-defined function’lar, interval expression’lar, ve eşitlik koşullarını Indexed view’de kullanılabiliyor. Indexed View hakkında detaylar için “Indexed View Nedir Ve Nasıl Oluşturulur” isimli makaleye göz atmak isteyebilirsiniz.
- 4 tane Query Hint Eklendi. Bunlar RECOMPILE, OPTIMIZE FOR, USE PLAN ve PARAMETERIZATION. “SQL Server Query Hint Kavramı ve Bazı Query Hint’ler” isimli makalemde detayları bulabilirsiniz.
- 128 extent’den daha fazla alan kullanan tablolar ve index’ler silinirken ya da rebuild edilirken sql server artık page deallocation işlemini commit işleminden sonraya bırakıyor. Bu işlemi gerçekleştirebilmek için 2 faz kullanıyor. Mantıksal ve Fiziksel. Mantıksal faz’da silinecek alanlar işaretleniyor. Fiziksel faz’da ise commit sonrası bu işaretlenmiş alanların deallocation işlemi gerçekleşiyor. SQL Server 2000’de bu iki faz’da commit işlemi öncesinde gerçekleşiyordu. Mimarideki bu değişikliğin bize şöyle bir faydası oluyor. Örneğin index’i rebuild ediyorsunuz ve işlem devam ederken rollback yapılması gerekti. Henüz commit gerçekleşmediği için ve fiziksel faz’a geçilmediği için rollback işlemi daha kısa sürede gerçekleşecektir.
- Scalable Shared Database özelliği geldi. Bu özellikle ile read-only bir veritabanını birden fazla instance’a attach edebiliyoruz. Yani Read Only mode’daki bir veritabanına aynı anda birden fazla instance üzerinden erişebileceksiniz. Bu özelliği duyduğumda aklıma gelen ilk şey read-only veritabanını zaten birden fazla instance’a attach edebiliriz düşüncesi oldu. Evet bu şekilde de yapabiliriz fakat her farklı instance’a attach ettiğimizde farklı bir alan kaplayarak ekstra disk maliyeti oluşturacaktır. Bu özellikle bu disk maliyetinden kurtularak tek bir dosyayı birden fazla instance’a attach edebiliyoruz.
Scalable Shared Database reporting amaçlı tasarlanmıştır. Örneğin 8 tane sunucuya raporlama amaçlı bir veritabanını attach ettiğinizi düşünün. Her sunucunun kendi memory’si, CPU’su ve tempdb’si olduğu için sunuculardan birinde yanlış yazılmış bir sorgu sadece o sunucuyu etkileyecektir.
Bu işlemi yapabilmek için veritabanını read only bir volume’e koymanız ve bu volume’ü attach edeceğiz instance’lara mount etmeniz gerekir. Daha sonra attach işlemini gerçekleştirebilirsiniz.
Aslına bakarsanız bana çok kullanışlı gelmedi. Çünkü veri sürekli güncelleniyor ve her güncellemede detach işlemi yapıp tekrar attach yapmanız gerekiyor. O yüzden bir örnek yapma ihtiyacı hissetmedim. Siz yinede denemek isterseniz kurumunuzdaki storage yöneticinizden bütün sunuculardan görülebilecek şekilde bir disk isteyip mount ettikten sonra attach edebilirsiniz.
- SQL Server 2005 ile gelen Service Broker, Instance’lar arasında mesajlaşma ve kuyruklama işlevleri sağlayan yeni bir teknolojidir. Service Broker teknolojisi ile asenkron uygulamalar geliştirebilirsiniz.
- SQL Server artık windows üzerindeki policy’leri instance üzerindeki kullanıcılara uygulayabiliyor. “SQL Server Parola Politikası” isimli makalede parola politikası hakkında detay bulabilirsiniz.
- Birden fazla proxy account artık destekleniyor. “Joblarımızı Proxy Hesabı ile Çalıştırmak” isimli makaleyi okumak isteyebilirsiniz.
- Bunların dışında fulltext search’de, import export wizard’da, sql server profiler’da,replication’da geliştirmeler oldu.
Aşağıdaki makalelerde bahsi geçen kavramlarla ilgili detay bulabilirsiniz. Sitemizin arama kısmını kullanarak ilgili diğer makalelere de ulaşabilirsiniz.
“SQL Server Veritabanından SQL Server Veritabanına Import/Export İşlemi“,
“SQL Server Veritabanından Excel’e Tablo Aktarmak“,
“Excel’i SQL Server Veritabanına Tablo Olarak Aktarmak“,
“SQL Server Profiler Kullanarak Uzun Süren Sorguları Bulmak ve Tablo Olarak Kaydetmek“,
“SQL Server Replication Nedir?“
- SP1 ile unique nonclustered index artık online bir şekilde oluşturulabiliyor.
- SP1 ile Sorguların çalışma anında memory alıp alamadıklarını gösteren sys.dm_exec_query_memory_grants ve sys.dm_exec_query_resource_semaphores isimlerinde iki tane yeni dmw geldi.
- SP1 ile Maintenance Plan’da cleanup görevi geldi. “Maintenance Plan Kullanarak Bir Klasördeki Belirlenen Uzantıya Sahip Dosyaları Silmek(Maintenance Cleanup Task)” isimli makalede detayları görebilirsiniz.
- SP2 ile Logon Trigger geldi. “SQL Server Trigger Çeşitleri” isimli makalede detayları bulabilirsiniz.
- Instance seviyesinde CONTROL SERVER yetkisi geldi. “Veritabanı Yöneticilerinin Veriye Erişimini Kısıtlamak(Control Server ve sysadmin Farkları)” isimli makaleyi okumanızı tavsiye ederim.
SQL Server 2008 ile Gelen Yenilikler:
- Cumulative Update ve Service Pack’ler Denetim Masasındaki Program and Features’dan kaldırılabiliyor. Özellikle upgrade’ler sırasında alınabilecek bir hatada kolaylıkla geri dönebilmemizi sağlıyor. “Cumulative Update ve Service Pack’leri Kaldırmak” isimli makalede detayları bulabilirsiniz.
- Database Mirroring teknolojisinde bazı geliştirmeler oldu. Önemli gördüğüm birkaç değişikligi belirteyim.
Hot Standby Server yapısı ile Commit edilmiş transaction’larda data kaybı olmadan hızlı failover gerçekleşebiliyor.
Automatic Page Repair ile Data page’lerde oluşan corruption otomatik olarak düzeltilebiliyor.
Log kayıtları mirror server’a geldiğinde bu kayıtlar asenkron olarak diske yazılıyor. Aynı anda diske yazılmış log kayıtları da işlenir.
- Tablolar, indexler, ve indexed view’ler için page ve row bazında compression özelliği geldi. Bu özellik sayesinde verilerin diskte kapladığı alanı sıkıştırıyoruz. Böylelikle daha az IO yaparak performans kazancı sağlayabiliyoruz. Tabi IO anlamında cost azalırken CPU anlamında cost artacaktır. Compression detayları için “SQL Server Compression” isimli makaleyi okumak isteyebilirsiniz.
- Backup Compression ile backup boyutlarımızı daha da küçültebiliyoruz. “Backup Compression” isimli makalede detayları bulabilirsiniz.
- File Stream özelliği geldi. “File Stream Nedir” isimli makalede detayları bulabilirsiniz.
- Partition Switching özelliği geldi. “Partition Oluşturmak” ve “Sliding Window-Switch Partition-Split Range-Merge Range” isimli makalelerde konu ile ilgili detay bulabilirsiniz.
- Sparse Column ve Filtered Index geldi. Sparse Column null değeri fazla sayıda olan kolonlarınız için biçilmiş kaftan. Kolon’u sparse olarak tanımlarsak null değerler veritabanında hiç yer kaplamıyor. Ama kolon’da ki null oranı az ise bize dezavantajı olacaktır. Sparse Kolon’ları özellikle filtered index’lerde kullanabiliriz. Örneğin filtered index’i null olmayan kolonları filtreleyerek oluşturursak ciddi anlamda bir avantaj sağlayabiliriz. “Filtered Index Nedir” isimli makalede detayları bulabilirsiniz. Tablo tasarımı aşamasında IsSparce özelliğinden kolonu sparse olarak işaretleyebilirsiniz.
- 1024’ten fazla kolon ihtiyacı olan tablolarınız için sparse column ve column set’leri kullanarak wide tablolar oluşturabiliyorsunuz. Bu şekilde kolon sayısını 30000’e kadar arttırabilirsiniz. Tabi bir çok limiti ve dezavantajı’da beraberinde getirecektir. Şahsen bugüne kadar hiç kullanmadım ve ihtiyaç duyan bir uygulama da görmedim ama yinede ihtiyacınız olursa aşağıdaki adres’ten bilgi edinebilirsiniz.
https://msdn.microsoft.com/en-us/library/ms186986.aspx?f=255&MSPPError=-2147217396
- Hierarchyid,geometry ve geography veri tipleri geldi. “SQL Server Veri Tipleri” isimli makalede detayları bulabilirsiniz.
- User Defined Table Type ve Table Valued Parameter geldi. Detayları “User Defined Table Type ve Table Valued Parameter” isimli makalede bulabilirsiniz.
- Full-text Search artık tamamen veritabanına entegre hale getirildi. Bu süreç full-text search’te bazı iyileştirmeler sağladı. Örneğin full-text catalog’lar artık file system yerine veritabanında durduğu için veritabanı taşındığı anda artık full-text catalog’larda otomatik olarak taşınıyor. Full-text Search ile ilgili detaylı bilgi için “Full-text Search” isimli makaleyi okumak isteyebilirsiniz.
- Compound Operatörler geldi. “Compound Operatörler(+=,-=,*=,/=,%=,&=,^=,|=)” isimli makalede detayları bulabilirsiniz.
- CONVERT fonksiyonu artık binary ve karakter hexadecimal değerler arasında dönüşüm yapabiliyor. “CONVERT ve CAST Fonksiyonları” isimli makaleyi okumak isteyebilirsiniz.
- GROUP BY ifadesine GROUPING SETS, ROLLUP, ve CUBE operatörleri eklendi. Bu ifadeler ile birden fazla kategoriye göre gruplanmış verileri normalde UNION ALL ile birleştirirken tek GROUP BY ifadesinde birleştirebiliyoruz.
- Insert,Update ve Delete işlemlerini tek seferde yapabileceğimiz MERGE ifadesi hayatımıza girdi. Merge ifadesini kullandığımız “Kullanılmayan Login’leri Tespit Etmek” isimli makaleyi okumanızı tavsiye ederim.
- Tek insert cümleciğinde artık 1’den fazla(maks 1000) satırı aşağıdaki gibi insert edebiliyoruz.
USE AdventureWorks; GO INSERT INTO Production.UnitMeasure VALUES (N'FT2', N'Square Feet ', '20080923'), (N'Y', N'Yards', '20080923')
- OPTIMIZE FOR Query hint’ine UNKNOWN seçeneği eklendi. “SQL Server Query Hint Kavramı ve Bazı Query Hint’ler” ve “Parameter Sniffing” isimli makaleleri okumak isteyebilirsiniz.
- Table Hint’ler artık Query Hint olarak tanımlanabiliyor. Microsoft table hint’leri query hint olarak kullanırken plan guide kullanmamızı öneriyor. Plan guide’lar için “sp_create_plan_guide Sistem Stored Procedure’ü ile Sorgularınızın Performansını Artırın” isimli makaleyi okumak isteyebilirsiniz.
- Sorgunun tabloyu SEEK yapmasını zorlamak için gerekli olan FORCESEEK table hint’i geldi. Ben çoğu zaman bu işleri engine’e bırakmanın daha doğru olduğunu düşünürüm.
- ALTER TABLE ifadesinde kullanabileceğimiz LOCK ESCALATION opsiyonu geldi. Bu opsiyonu kullanarak ALTER TABLE işlemlerinde LOCK ESCALATION’ı pasif hale getirebiliriz. Özellikle partition yapılmış tablolarda tüm tabloya lock koyulmasını istemiyorsak işimize yarayabilir. Aşağıdaki sorgu yardımıyla partition yapılmış tablolarda lock escalation’ı partition bazlı hale getirebiliriz. Eğer tablo partition yapılmamışsa lock escalation tablo bazlı olacaktır. ALTER TABLE T1 SET (LOCK_ESCALATION = AUTO)
- SQL Server Audit hayatımıza girdi. Audit ile ilgili detaylı bilgi için “SQL Server Audit Oluşturmak” ve “Kaydedilmiş SQL Audit’leri Okumak” isimli makalelerimizi okuyabilirsiniz.
- Transparent Data Encryption(TDE) artık veritabanı dosyalarını otomatik olarak şifreliyor. TDE hakkında detaylı bilgi için “TDE(Transparent Data Encryption)” isimli makaleyi okumanızı tavsiye ederim.
- Resource Governor ile artık kaynak kısıtlaması yapabiliyoruz. “Resource Governor ile Kaynak Kullanımını Kısıtlayın” isimli makalede detayları bulabilirsiniz.
- Özelikle OLTP sistemlerden data warehouse tarzı sistemlere incremental veri aktarımlarında ya da uygulamalarındaki cache sistemlerinde işimize yarayabilecek Change Data Capture(CDC) ve Change Tracking mekanizmaları geldi. CDC ile bir tabloya yapılan insert, update ve delete işlemlerini loglanarak, hangi kaydın ne zaman değiştiği, ilk ve son hali bir değişiklik tablosunda tutulur. Daha sonra aktarmak istediğiniz hedef’e bu değişiklikleri SSIS kullanarak aktarabilirsiniz. Change Tracking’de ise yapılan işlemin tarihçesi, yani verinin update önceki hali tutulmaz. CDC, Change Tracking’e göre daha kapsamlı çalışır. Verinin önceki hallerine ihtiyacınız yoksa ve CDC ile oluşan internal tablolarınız(sadece değişiklikleri tutan tablo) fazla büyüyorsa Change Tracking’i kullanmayı düşünebilirsiniz. CDC hakkındaki detayları “Change Data Capture(CDC)” isimli makalede bulabilirsiniz.
- Data Collector ile performans verilerini toplayıp baseline oluşturabiliyoruz. Böylece sorun anında sistemde normalden farklı olarak ne olduğuna bakabilmek için elimizde bir veri olmuş oluyor. “Data Collector, Management Data Warehouse, Perfmon” isimli makalede detayları bulabilirsiniz.
- Central Management Servers(Registered Servers) ile birden fazla instance’ınızda sorgularını tek seferde çalıştırabilirsiniz. “Registered Server ile Birden Fazla Instance Üzerinde Aynı Script’i Çalıştırmak” isimli makalede detayları bulabilirsiniz.
- Hot Add CPU ile SQL Server’ın çalıştığı sunucuya, online bir şekilde fiziksel ya da mantıksal bir şekilde cpu ekleyebiliyoruz. Bu özelliği kullanabilmek için fiziksel donanımın desteklemesi ve işletim sisteminin 64-bit Windows Server 2008 Datacenter veya Windows Server 2008 Enterprise Edition olması gerekli. SQL Server’da Enterprise sürümde olmalı.
- Optimize for ad hoc workloads opsiyonu ile tek kullanımlık sorgular için, plan cache üzerinde query plan’ın tamamını oluşturmak yerine sadece küçük bir Compiled Plan Stub oluşturur. Query plan’ın tamamı sorgu ikinci kez çalıştırıldığında oluşur. Detaylar için “Optimize for ad hoc workloads ve Parameterization” isimli makaleyi okuyabilirsiniz.
- SQL Server Profiler’ın yerine sistemde Profiler’a göre daha az yük oluşturacak Extended Events geldi. Sitemizde Arama kısmına Extended Events yazarak birçok makaleye erişebilirsiniz.
- Policy-Based Management ile belirlediğiniz policy’leri instance’larınızda uygulamanız artık mümkün. Örneğin Auto Shrink Opsiyonu Açık Veritabanı var mı, veya recovery model’i simple olan veritabanı var mı vb.
Policy Based Management ile SQL Server üzerinde yapabileceğiniz bir çok kontrol vardır. Ve profesyonel bir veritabanı yöneticisi bence SQL Server’ın bize sunduğu bu özelliği bütün detaylarıyla kullanmalı. Policy Based Management ile yapabileceğiniz diğer kontrolleri sitemizdeki menüden MSSQL’in altındaki POLICY-BASED MANAGEMENT alt menüsünden erişebileceğiniz makalelerde bulabilirsiniz.
- TSQL sorgularımızı artık Visual Studio’daki gibi Debug edebiliyoruz. “TSQL Sorguları Debug Etmek” isimli makalede detayları bulabilirsiniz.
- IntelliSense özelliği ile TSQL kod yazmak artık daha pratik hale geldi. “TSQL Kod Yazarken İşinizi Kolaylaştıracak IntelliSense Özelliği” isimli makalede detayları bulabilirsiniz.
SQL Server 2008 R2 ile Gelen Yenilikler:
- SQL Server Sistemlerinizi Monitor Etmenize yarayacak Utility Control Point özelliği geldi. “Utility Control Point ile SQL Server’ı Monitor Edin” isimli makalede detayları bulabilirsiniz. Özellikle veri büyüme geçmişi ve cpu kullanım geçmişini kaydetmek ve raporlamak istiyorsanız tavsiye ederim.
- Data-Tier Application Version 1.1 (DAC) ile uygulamalarımıza ait veritabanlarını tüm gereksinimleriyle beraber production ortama aktarabiliyoruz. Aslında bu özelliği kullanarak veritabanlarını bir instance üzerinde başka bir instance’a da taşıyabiliriz. Detayları “Data-Tier Application Nedir ve Nasıl Kullanılır” isimli makalede bulabilirsiniz.
SQL Server 2012 ile Gelen Yenilikler:
- SQL Server 2012 Enterprise Edition, Enterprise Edition: Server/Client Access License (CAL) based ve Enterprise Edition: Core-based olarak ikiye ayrıldı. Default kurulumlarda Server/Client Access License (CAL) based sürümünü kuruyorsunuz bu sürümde de maksimum 40 core kullanabildiğiniz için bazı büyük sistemlerde sıkıntı oluşturabiliyor. “SQL Server’ın CPU’nun Tamamını Kullanamaması ve Edition Upgrade” isimli makaleyi okumanızı tavsiye ederim.
- Farklı subnet’lerdeki node’lar üzerinde SQL Server Failover Cluster oluşturabiliyoruz. “SQL Server Failover Cluster Kurulumu” ve “Multi-Subnet Clustering” isimli makaleleri okumak isteyebilirsiniz.
- SMB file share üzerinde artık veritabanlarını oluşturabiliyoruz. Bu file share üzerinde sql server servisinin, sql server agent servisinin ve kurulum yapılıyorsa kurulum yapan kullanıcının full control hakkının bulunması gerekiyor.
- Artık BUILTIN\administrators ve Local System (NT AUTHORITY\SYSTEM), otomatik olarak sysadmin olmuyor. Local Administator’lar hala instance single user ile başlatılırsa sysadmin oluyorlar. “SQL Server Startup Parametreleri” isimli makaleyi okumanızı tavsiye ederim.
- Tempdb artık lokal disk üzerinde oluşturulabiliyor.
- SQL Server’ın en sevdiğim özelliği olan Always ON hayatımıza girdi. Sitemizde menüden MSSQL sekmesinin altındaki HA(YÜKSEK ERİŞİLEBİLİRLİK) & DR(FELAKET KURTARMA) kısmında ilgili makaleleri bulabilirsiniz.
- varchar(max), nvarchar(max), varbinary(max), veya XML veri tipine sahip index’ler artık online rebuild edilebiliyor.
- SQL Server 2012 SP1 ile Always On Availability Group’ların farklı bir Windows Cluster’a minimum downtime ile aktarılmasını sağlayan Cross-Cluster Migration desteği geldi.
- Database Recovery Advisor ile artık backup’larımızı SSMS üzerinden istediğimiz bir ana kolaylıkla(tek seferde full+differential+logların tümünü) dönebiliyoruz. “Database Recovery Advisor” isimli makalede detayları bulabilirsiniz.
- SSMS üzerinden Page Restore yapılabiliyor. Detayları “Page Restore” isimli makalede bulabilirsiniz.
- Configuration Manager üzerindenden Startup Parametrelerini ayarlayabiliyorsunuz. “SQL Server Startup Parametreleri” isimli makalede detayları bulabilirsiniz.
- Loginleri ortadan kaldıracak bir çözüm olan Contained Database yeni bir özellik olarak karşımıza çıkıyor. “Contained Database Nedir” isimli makalede detayları bulabilirsiniz.
- Database Engine Tuning Advisor(DTA)’de query plan cache’i workload olarak kullanabiliyorsunuz. “Database Engine Tuning Advisor(DTA)” isimli makalede detayları bulabilirsiniz.
- Full Text Search üzerine geliştirilmiş Semantic Search özelliği geldi. Full Text Search’de bir doküman üzerinde bir kelimeyi arayabiliyorken Semantic Search ile dökümanın anlamını sorgulayabiliyorsunuz. Kelimeler arası anlam bütünlüğüne göre size istediğiniz kaydı getirebiliyor. File Table’lar üzerinde semantic search ile arama yapabilmemiz de avantajlarından biri.
- OFFSET ve FETCH komutlarıyla sorgu sonucunda gelen kayıtları limitleyebiliyoruz. “Sorgu Sonucunda Gelen Kayıtları Limitlemek(OFFSET ve FETCH)” isimli makalede örnekleri görebilirsiniz.
- IDENTITIY özelliğine benzeyen fakat tablo yapısından bağımsız bir nesne olan Sequence hayatımıza girdi. Detayları “Sequence nedir ve nasıl oluşturulur” isimli makalede bulabilirsiniz.
- SQL Server Express Edition yeni bir versiyonu olan LocalDB geldi. Developer’ları sql server’ın tam sürümünü kurmaktan kurtarmak için geliştirilen bir versiyon.
- ColumnStore Index’te SQL Server 2012 ile beraber hayatımıza girdi. Kolon bazlı indexleme diyebiliriz. Normalde index yapısı satır bazlı tutulur ve bu satırlar bir araya getirilerek index oluşturulur. ColumnStore Index’te ise kolonlar bir araya getirilerek index oluşturulur. “ColumnStore Index Nedir ve Nasıl Kullanılır?” isimli makalede detayları bulabilirsiniz.
- İçinde XML, varchar(max), nvarchar(max), ve varbinary(max) gibi veri tiplerini barındıran index’ler artık online bir şekilde create, rebuild ve drop edilebiliyor.
- SQL Server 2012’den önce partition sayısı maksimum 1000’di. SQL Server artık 15000’e kadar partition desteği veriyor. “Partition Oluşturmak” isimli makalede partition hakkında detaylı bilgi alabilirsiniz. Sitemizin arama kısmına partition yazarsanız daha detaylı bilgileri barındıran makalelere de ulaşabilirsiniz.
- File Stream File Group’lara artık birden fazla file ekleyebilirsiniz.
- User defined server level role karşımıza çıkıyor. “Server Level Role Oluşturmak” isimli makalede detayları bulabilirsiniz.
- Resource Governor’da maksimum resource pool sayısının 20’den 64’e çıkması, CAP_CPU_PERCENT’in gelmesi ve AFFINITY opsiyonu gibi bazı iyileştirmeler oldu. Detayları “Resource Governor ile Kaynak Kullanımını Kısıtlayın” isimli makalede bulabilirsiniz.
SQL Server 2014 ile Gelen Yenilikler:
- In Memory OLTP SQL Server 2014 ile birlikte gelen bir özelliktir. Bu özellik ile verilerimizi artık memory’de tutabiliyoruz. Verileri memory’de tutabiliyoruz dediğimizde, sql server’a ilgisi olan bir çok insan buffer pool olarak algılıyor. Önemli bir nokta olarak veriler buffer pool’da değil, direk memory’de tutuluyor. “In Memory OLTP Nedir? Ve Nasıl Kullanılır?” isimli makalede detayları bulabilirsiniz.
- Windows Azure Blob Storage üzerinde SQL Server’ın veritabanı dosyalarını barındırabiliyoruz.
- Veritabanalarını Azure üzerindeki bir sanal makinede barındırabiliyoruz. Veritabanına sağ tıklayarak Deploy a SQL Server Database to a Windows Azure VM diyerek bu işlemi gerçekleştirebilirsiniz.
- Backup’ı bir URL’ye SSMS üzerinden alabiliyoruz. Aslında SQL Server 2012 SP1 CU2 ile bu özellik gelmişti fakat SSMS üzerinden yapılamıyordu. Bu şekilde Azure’a backup alabiliyoruz. “Backup’ı SSMS Üzerinden Bir URL’ye Almak(Azure Backup)” ve “Azure Üzerindeki Backup’ı Lokal Instance’a Restore Etmek” isimli makaleler ilginizi çekebilir.
- SQL Server 2014 ile berabe şifreli backup alabiliyoruz. “Şifreli(Encrypted) Backup Almak” isimli makalede detayları bulabilirsiniz.
- SQL Server Backup to URL’nin altyapısını kullanan Managed Backup geldi. Managed Backup ile SQL Server veritabanlarının backup’ları full ve log backup olarak schedule edebiliyoruz. Bu işlemi hem veritabanı seviyesinde hem de instance seviyesinde gerçekleştirebiliyoruz.”Managed Backup ile Backup’ları Azure’a Otomatik Bir Şekilde Almak” isimli makalede detayları bulabilirsiniz.
- Query plan oluşturulurken sql server tarafından kullanılan cardinality estimator yeniden dizayn edildi. Bu, daha kaliteli query plan’ların oluşmasını ve sorguların daha hızlı çalışmasını sağladı. Query plan’ın ne olduğunu anlamak için “SQL Server Mimarisi” ve “Execution Plan Nedir” isimli makaleleri okumak isteyebilirsiniz.
- Delayed Durability isminde performansı artıran fakat veri kaybı riskini içeren bir özellik geldi. “Delayed Durability” isimli makalede detayları bulabilirsiniz.
- Azure’u Always On’da secondary replica olarak kullanabiliyoruz.
- Always ON’da maksimum secondary replica sayısı 4’ten 8’e çıktı.
- Always ON’da secondary replika üzerinden, cluster quorum kopsa ya da primary replika bağlantısını kaybetse bile read yapılabiliyor.
- Failover Cluster Instance, Cluster Shared Disk için Cluster shared volume’leri kullanabiliyor.
- Partition yapılmış tablolarda spesifik partition’lar rebuild edilebiliyor. Bütün tablo’yu(clustered index), index’i rebuild etmek yerine sadece bir partition’ı rebuild edebilirsiniz. Partition hakkında detaylı bilgi almak için “Partition Oluşturmak” isimli makaleyi okumak isteyebilirsiniz.
- Online Index Rebuild ve Partition Switch işlemlerini daha esnek bir şekilde kontrol edebileceğimiz WAIT_AT_LOW_PRIORITY özelliği geldi. Detayları “WAIT_AT_LOW_PRIORITY ile Online Index Rebuild ve Partition Switch İşlemlerini Kontrol Edin” isimli makalede bulabilirsiniz.
- Update edilebilir Clustered Column Store Index hayatımıza girdi. ColumnStore Index’in tüm versiyonlar için detaylarına “ColumnStore Index Nedir ve Nasıl Kullanılır?” isimli makaleden erişebilirsiniz.
- Columnstore index’lerini arşivlerken sıkıştırabilirsiniz. “ColumnStore Index’lerinizi COLUMNSTORE_ARCHIVE Opsiyonu ile Arşivlerken Sıkıştırın” isimli makaleyi okumak isteyebilirsiniz.
- Buffer Pool Extension ile SSD disklerinizi artık RAM olarak kullanabilirsiniz. “Buffer Pool Extension Nedir” isimli makalede detayları bulabilirsiniz.
- İstatistikleri partition yapıda güncellememize olan veren incremental statistics hayatımıza girdi. Detayları “Incremental Statistics Nedir” isimli makalede bulabilirsiniz.
- Resource Governor ile artık MIN_IOPS_PER_VOLUME ve MAX_IOPS_PER_VOLUME parametreleriyle IO kısıtlaması yapabiliyoruz. “Resource Governor ile Kaynak Kullanımını Kısıtlayın” isimli makalede Resource Governor’ı her SQL Server’ın her sürümündeki yetenekleriyle beraber inceleyebilirsiniz.
- Online Index Rebuild İşlemlerinin yüzdesini Extended Event ile görebiliyorduk. Bu sürümle beraber PartitionId ve PartitionNumber kolonlarıyla birlikte eğer partition yapı varsa rebuild işleminin o anda hangi partition’da olduğunu da görebiliyoruz. “Extended Events Kullanarak Online Index Rebuild İşlemlerinin Yüzde Kaçta Olduğunu Görmek” isimli makaleyi okumak isteyebilirsiniz. Makalede, Watch Live Data dedikten sonra karşımıza çıkan ekrandaki kolonların listesinde ilgili partition bilgisini görebilirsiniz.
- Veritabanları için artık 90 compatibility level desteklenmiyor. “Compatibility Level Nedir Ve Nasıl Değiştirilir” isimli makale ilginizi çekebilir.
- Instance seviyesinde CONNECT ANY DATABASE, IMPERSONATE ANY LOGIN ve SELECT ALL USER SECURABLES gibi bazı yeni roller geldi. Bu rollerle control server yetkisi verilmiş bir kullanıcı kısıtlanabiliyor. “Veritabanı Yöneticilerinin Veriye Erişimini Kısıtlamak(Control Server ve sysadmin Farkları)” isimli makaleyi okumanızı tavsiye ederim.
- Veritabanlarımızı Azure VM’e deploy edebiliyoruz.
- Veritabanlarının ReFS(Microsoft’un yeni dosya sistemi.)’e deploy’u artık destekleniyor.
SQL Server 2014 SP2 ile Gelen Yenilikler:
- Startup parametrelerine 8079 Trace Flag’ını eklerseniz, sistem otomatik olarak her numa node’una en az 8 core düşecek şeklide soft numa’yı konfigüre ediyor(Donanım destekliyorsa). Microsoft production ortamında bunu uygulamadan önce test etmemizi öneriyor. Numa node’lar ile ilgili “Numa Nodes, MAX/MIN Server Memory, Lock Pages In Memory, MAXDOP” isimli makaleyi okumak isteyebilirsiniz.
- Dynamic Memory Object Scaling ile SQL Server memory’yi numa node’lar ve core’lar üzerinde bölebiliyor.
- DBCC CHECKDB komutunu artık aşağıdaki şekilde MAXDOP Query Hint’ini kullanarak birden fazla cpu üzerine paralel olarak çalıştırabiliyoruz. DBCC CHECKDB([VeritabaniAdi]) WITH MAXDOP = 3; DBCC CHECKDB detayları için “DBCC CHECKDB Detayları” isimli makaleye göz atmak isteyebilirsiniz.
- Buffer Pool artık 128 TB’a kadar çıkabiliyor. Bu rakam öncesinde maksimum 8 TB olabiliyordu.
- Sorgu performans sıkıntılarını analiz etmek için veritabanının veri olmadan kopyasını oluşturan DBCC ClonDatabase hayatımıza girdi. Detayları “DBCC clondatabase Nedir” isimli makalede bulabilirsiniz.
SQL Server 2016 ile Gelen Yenilikler:
- Benim ilk gözüme çarpan yenilik kurulumda SQL Server Management Studio(SSMS)’nun gelmemesi ve SSMS’in yeni bir arayüze sahip olması. Birde Configuration Manager’ı açarken eğer işletim sistemi dili türkçe ise sorun yaşayabiliyorsunuz. “SQL Server 2017 Configuration Manager’ı Açarken Alınan Hata” isimli makalede sorunun çözümüne değindim.
- Columnstore index’te bir çok yenilik geldi. Version versiyon column store index gelişimini anlatan “ColumnStore Index Nedir ve Nasıl Kullanılır?” isimli makalede SQL Server 2016 ile gelen yenilikleri de bulabilirsiniz.
- In-Memory OLTP’de bazı yenilikler geldi. “In Memory OLTP Nedir? Ve Nasıl Kullanılır?” isimli makalede SQL Server 2016 ile gelen yenilikleri de bulabilirsiniz.
- MAXDOP gibi instance seviyesinde ayarlanan bazı kritik konfigürasyonları veritabanı seviyesinde konfigüre edebilmemize olanak veren ALTER DATABASE SCOPED CONFIGURATION ifadesi hayatımıza girdi. Özellikle konsolide edilmiş sistemlerde veritabanı bazında farklı konfigürasyon yapmanız gerekebiliyor. Bu anlamda bence bu çok güzel bir gelişme. Detayları “ALTER DATABASE SCOPED CONFIGURATION ile Veritabanı Seviyesinde Konfigürasyon” isimli makalede bulabilirsiniz.
- Memory Optimized tabloların depolama formatı değiştirildi. Veritabanlarını SQL Server 2014’ten SQL Server 2016’ya backup-restore ya da detach-attach yöntemleri ile aktarırken yeni depolama formatı uygulanır ve veritabanı recover olma aşamasında bir kere restart edilir.
- Memory Optimized tablolarda yapılan ALTER TABLE işlemi için loglara sadece metadata değişiklikleri yazılır. Bu IO’yu ciddi anlamda azalttığı gibi performansı arttırır. Ayrıca bir çok ALTER TABLE ifadesi artık paralel çalışır ve bu şekilde ALTER TABLE işlemlerinin performansı ciddi anlamda artar.
- Memory Optimized tablolarda istatistikler otomatik güncelleştirmeyi destekliyor. Eğer veritabanının önceki compatibility level’i 130’un altındaysa compatibility level 130’a çıkarıldıktan sonra bir sefer istatistiklerin manual olarak update edilmesi gerekir. “Memory Optimized Tablolarda Otomatik İstatik Güncellemesi Aktif mi?” isimli makalede detayları bulabilirsiniz.
- Memory optimized tablolarda parallel scan desteği geldi. Özellikle analitik sorguların performansının artmasına yardımcı olacaktır.
- Memory Optimized tablolarda istatistikleri sample opsiyonu ile güncelleyebiliyoruz. “UPDATE STATISTICS Nedir” isimli makalede sample opsiyonu hakkında bilgi bulabilirsiniz.
- Natively Compiled Scalar User-Defined function’lar hayatımıza girdi. “Natively Compiled Stored Procedure Nedir ve Nasıl Kullanılır?” ve “Natively Compiled Scalar User-Defined Function(Udf) Nedir ve Nasıl Kullanılır?” isimli makaleler göz atmanızı öneririm.
- Inline table valued function’lar natively compile edilebiliyor.
- Natively Compiled Stored Procedure’lerde LOB tipleri artık kullanılabiliyor.
- SQL Server Management Studio üzerinden tablolar üzerindeki darboğazı analiz edebilmemiz ve tabloları IN Memory OLTP’ye geçirmemiz için işimize yarayabilecek bir report’u direk çalıştırabiliyoruz. Bunun için veritabanı üzerinde sağ tıklayarak Reports-Standart Reports-Transaction Performance Analysis Overview’i seçmemiz gerekiyor.
- Veritabanındaki objelerin In Memory OLTP yapısına geçirilip geçirilemeyeceğine belirleyen bir özellik eklendi. “Veritabanındaki Nesneler(Tablo,SP) In-Memory OLTP’ye Uygun Mu?” isimli makalede detayları bulabilirsiniz.
- Temporal Table ile verinin versiyonlarını tutarak bir çok avantaj elde edebiliyoruz. “Temporal Table Nedir ve Nasıl Kullanılır?” isimli makalede detayları bulabilirsiniz.
- Query Store ile sorgular için en uygun query plan seçimini yapabiliyoruz. Ayrıca sorguların CPU tüketimini, yaptıkları Read ve Write’ları izleyebiliyoruz. Bence veritabanı performans analizi yaparken ciddi anlamda işimize yarayacak bir özellik. Detayları “Query Store Nedir ve Nasıl Aktif Edilir” isimli makalede bulabilirsiniz.
- Execution Plan’ı sorgu çalışırken online olarak analiz etmemize olanak veren Live Query Statistics hayatımıza girdi. SQL Server 2016 Management Studio ile beraber gelen bir özellik olmasına rağmen SQL Server 2014 veritabanları için de kullanılabiliyor. “Live Query Statitics ile Execution Plan’ı Sorgu Çalışırken Analiz Etmek” isimli makalede detayları bulabilirsiniz.
- İstatistiklerin otomatik bir şekilde güncellenmesi için kayıtların %20’sinin güncellenmesi gerekiyor. Küçük tablolarda bu makul bir oran olabilir. Fakat tablo büyüdükçe %20 yeterli bir oran olmayabiliyor. Örneğin tablodaki kayıt sayısı 1 milyar ise istatistiklerin güncellenmesi için 200 milyon satırın değişmesi gerek. SQL Server 2016 ile beraber tablodaki kayıt sayısı arttıkça otomatik istatistik güncelleme oranı düşüyor. Örneğin tablodaki kayıt sayısı 1 milyar ise 1 milyon kayıt değiştiğinde otomatik istatistik güncellemesi tetikleniyor. Bu özellik SQL Server 2008 R2 Service Pack 1’de trace flag 2371’in aktif edilmesiyle sağlanabiliyordu. SQL Server 2016 ile beraber artık bu trace flag’a ihtiyaç duyulmuyor.
- Veri aktarımı yaparken parallelism’i kullanarak daha hızlı insert edebiliyoruz. “Tablolarınızı Aktarırken Parallelism Kullanarak Daha Hızlı Aktarın(Parallel Insert Select)” isimli makalede detayları bulabilirsiniz.
- File’ları Azure üzerinde olan bir veritabanı için File-Snapshot Backup yöntemi geldi. Bu şekilde daha hızlı backup alıp daha hızlı restore yapabilirsiniz.
- Microsoft Azure Blob storage’e backup alırken Striped yöntemi ile backup’ları bölerek alabiliyoruz. Desteklenen maksimum backup boyutu 12.8 TB.
- Managed Backup’ta, sistem veritabanlarının backup’ının alınması, backup alırken otomatik ya da custom schedule edebilme ve simple recovery model’e sahip veritabanlarının backup’ını alabilme gibi yeni özellikler geldi. “Managed Backup ile Backup’ları Azure’a Otomatik Bir Şekilde Almak” isimli makalede Managed Backup ile ilgili diğer detayları bulabilirsiniz.
- Query Optimizer’da oluşabilen bir problem nedeniyle aktif ettiğimiz trace flag 4199’u artık kullanmamıza gerek kalmadı.
- SQL Server 2016 ‘ya upgrade yaptığımızda compatibility level’i değiştirmezsek tüm sorgularımızın eski query plan’ları ile çalışacağını garanti ediyor.
- SQL Server 2016’dan önce bir primary key’e 253 tane foreign key bağlayabiliyorduk. SQL Server 2016 ile beraber yeni geliştirilen Referential Integrity Operator ile bu sayı 10000’e çıktı. Ayrıca eskiden primary tablodan bir kayıt sildiğimizde execution plan’da her tablo için ayrı operatör görürdük. yeni referential integrity operator ile artık sadece execution plan’larımızda Foreing Key Reference Check Operatörünü göreceğiz. Böylelikle compilation süresi ciddi anlamda kısalmış olacak.
- İstatistikleri güncellerken FULLSCAN ile güncellediğimizde bu işlemi SQL Server 2005’ten bu yana paralel çalışabiliyordu. Artık SAMPLE ile yaparken de paralel çalışabilecek. “UPDATE STATISTICS Nedir” isimli makalede istatistikleri güncellemek hakkında detaylı bilgi bulabilirsiniz.
- SQL Server 2014’te yeniden dizayn edilen cardinality estimator’da bazı düzeltmeler yapılarak kötü query plan üretimine neden olabilecek bazı sorunlar düzeltildi.
- Trace Flag 1117 ve 1118’e artık gerek kalmadı. -T1117 Trace Flag’ı tempdb büyürken bütün file’ların aynı boyutta büyümesini ve bütün file’ların boyutlarının aynı kalmasını sağlıyordu. -T1118’de kullanıcı tablolarının bir alan allocate edecekleri zaman uniform extent allocate etmelerini ve mixed extent allocate etme isteği sırasında oluşan karmaşayı önlüyordu. “SQL Server Storage Kavramları(Page,Extents,GAM,SGAM,PFS,IAM,BCM,DCM)” isimli makalede extent’ler ile ilgili detayları bulabilirsiniz.
- SQL Server kurulumu esnasında tempdb oluşturulurken default olarak birden fazla tempdb dosyası olacak şekilde oluşturuluyor.(Sunucudaki CPU sayısı ya da 8 adet)
- SQL Server kurulumu esnasında tempdb ile ilgili konfigürasyonları ayarlayabiliyorsunuz. “Kurulum Esnasında Tempdb Ayarlarını Yapmak” isimli makalede detayları bulabilirsiniz.
- Veritabanı oluştururken default initial size 8 MB, default autogrowth’da 64 MB oldu.
- Query sonuçlarını, sorgunun sonuna FOR JSON AUTO ekleyerek json formatında alabiliyoruz. Aynı şekilde export işlemlerinide bu şekilde gerçekleştirebiliyoruz.
- PolyBase ile SQL Server ve Hadoop, PDW, Azure Blob Storage, veya Azure Data Lake Store arasında köprü oluşturabiliyoruz. Detayları “PolyBase Nedir” isimli makalede bulabilirsiniz.
- Stretch Database ile veritabanımızdaki eski verileri azure’a arşivleyerek disk maliyetini düşürebiliriz. “Stretch Database Nedir” isimli makaleye göz atmak isteyebilirsiniz.
- Row-Level Security ile kişilerin sadece kendi verilerini görebileceği tablolar tasarlayabiliyoruz. “Row-Level Security ile Satır Bazında Kısıtlama” isimli makalede detayları bulabilirsiniz.
- Dynamic Data Masking ile hassas verilerinizi şifreleyebiliyorsunuz. “Dynamic Data Masking(DDM) ile Hassas Verilerinize Erişimi Kısıtlayın” isimli makalede detaylı bilgi bulabilirsiniz.
- Always Encrypted ile verilerinizi veritabanına gelmeden şifreleyerek verinizin güvenliğini maksimum seviyeye çıkarabiliyorsunuz. Evet veritabanı yöneticileri bile verilerinizi göremez. “Always Encrypted Nedir ve Nasıl Kullanılır?” isimli makalede detayları bulabilirsiniz.
- Veritabanı seviyesinde credential oluşturabiliyoruz. https://docs.microsoft.com/en-us/sql/t-sql/statements/create-database-scoped-credential-transact-sql linkinde detaylı bilgiyi bulabilirsiniz.
- Standart Edition üzerinde bazı kısıtlamalarla basic availability group oluşturabiliyoruz. “SQL Server Standart Edition’da Basic Availability Group Oluşturun” isimli makalede detayları bulabilirsiniz.
- Always On’da Secondary sunucudan read yapılabiliyordu. Eğer birden fazla replika varsa, Select’ler uygun olan ilk read only replikaya gidiyordu. SQL Server 2016 ile beraber read işlemi secondary sunuculara load balancing mantığında dağıtılarak yapılır. “Always On Secondary Sunucudan Read Yapmak” isimli makalede detayları bulabilirsiniz.
- Always On’da otomatik failover yapılabilecek secondary sunucu sayısı 2’den 3’e çıktı.
- Availability Group’larda Group Managed Service’i kullanabiliyoruz. Böylelikle SQL Server Service’lerin şifreleri sistem tarafından yönetiliyor ve kerberos authentication yapmak için spn kaydı otomatik olarak yapılıyor.
- Always On Availability Group’lar için Distributed Transaction desteği geldi. Fakat aynı instance üzerinde transaction ile ilişkili birden fazla veritabanı varsa desteklenmiyor. Availability Group’u oluştururken WITH DTC_SUPPORT = PER_DB ifadesini ekleyerek oluşturmamız gerekiyor. Ayrıca işletim sisteminin minimum Windows Server 2012 R2 olması ve KB3090973 yamasının yüklü olması gerekiyor. MSDTC ayarlarını yapmak için “MS DTC ile SQL Server’a bağlanmak isteyen bir uygulama için gerekli ayarları yapmak.” isimli makaleyi, Availability Group oluşturmak için “SQL Server Always ON AG(Availability Group) Oluşturmak” isimli makaleyi okumanızı tavsiye ederim.
- Availability Group oluştururken TSQL ile DB_FAILOVER=ON seçeneğini ekleyerek ya da gui üzerinden availability group ismini belirlerken Database Level Health Detection kutucuğuna tıklayarak availaibility group’ların içindeki veritabanlarından biri online dışında bir status’e sahip ise otomatik failover trigger’ını tetikletebiliyorsunuz. Mevcut availability group’lar için alter avabilability group ifadesini DB_FAILOVER=ON seçeneği ile çalıştırarak ya da gui üzerinden availability group’un üzerine sağ tıklayarak properties dedikten sonra Database Level Health Detection kutucuğuna tıklayarak aynı işlemi gerçekleştirebilirsiniz.
- Always On artık TDE’yi destekliyor. “TDE(Transparent Data Encryption) Nedir ve Nasıl Oluşturulur” isimli makalede TDE hakkında detaylı bilgi bulabilirsiniz.
- Farklı windows cluster’lardaki farklı availability group’ları distributed availability group ile birleştirebiliyoruz. SQL Server Sunucularının aynı domainde olmalarına ya da aynı windows cluster’da olmalarına artık ihtiyaç yok. Distributed Availability Group özellikle farklı lokasyonlar’daki FKM işlemleri için çok faydalı olabilecek bir özellik olarak karşımıza çıkıyor.
- Availability Group oluştururken SEEDING_MODE = AUTOMATIC ifadesi ile oluşturduğumuzda, SQL Server availability group içersinde veritabanlarının hepsinin secondary veritabanlarını otomatik olarak oluşturuyor. “Always On’da Automatic Seeding ile Secondary Veritabanlarını Otomatik Oluşturun” isimli makalede detayları bulabilirsiniz.
- Always On’da primary veritabanında log’ların secondary veritabanına işlenmesine kadar geçen süre, yapılan değişiklerle ciddi oranda hızlandı.(Log bloklar için 10 kat’a kadar paralel çalışan daha hızlı compression, decompression ve redo işlemleri, optimize edilmiş senkronizasyon protokolü) Böylelikle yoğun kullanılan veritabanlarında primary’de yapılan değişimin secondary’ye yetişememesi sorunu ciddi anlamda çözüldü. Ayrıca yine yoğun çalışan veritabanları failover olduğunda veritabanının ayağa kalkma süresi ciddi anlamda kısaldı.
- Memory Optimized tablolar ve Azure SQL Database için replication desteği geldi.
- Truncate Table ifadesi ile tüm tablo yerine belirli partition’ları truncate edebilirsiniz. Aşağıdaki script ile 2,4,6,7 ve 8.partition’ları truncate ediyoruz.
TRUNCATE TABLE PartitionedTable1 WITH (PARTITIONS (2, 4, 6 TO 8)); GO
- Kolonların yapısını değiştirirken(ALTER COLUMN) sonuna WITH (ONLINE = ON) ifadesini ekleyerek Online Index Rebuild ile benzer yapıda çalışacak şekilde online olarak bu işlemi gerçekleştirebiliyoruz. SQL Server 2016’da bir çok kısıt olmasına rağmen bu kısıtların ilerleyen sürümlerde azaltılacağını düşünüyorum.
- Sorgunun sonuna OPTION(NO_PERFORMANCE_SPOOL) query hint’ini ekleyerek spool yapmasını engelleyebilirsiniz. Spool Kavramı ile ilgili “Execution Planda Spool Kavramı(Eager Spool, Lazy Spool)” isimli makaleyi okuyabilirsiniz.
- Index’in Key kısmında oluşturabileceğiniz kolonların toplam boyutu 1700 byte oldu. “SQL Server’da Index Kavramı ve Performansa Etkisi” isimli makaleyi okuyabilirsiniz.
- DBCC CHECKTABLE, DBCC CHECKDB, ve DBCC CHECKFILEGROUP işlemlerini MAXDOP query hint’i ile çalıştırarak bu işlemlerin paralel bir şekilde daha hızlı çalışmasını sağlayabiliyoruz. Sitemizin arama kısmına yukardaki ifadeleri yazarak her bir işlemle ilgili ayrı ayrı makalelere erişebilirsiniz.
- Memory Optimized Tablolar TDE’yi destekliyor. Veritabanı TDE ile şifrelenmişse memory optimized tablolar da şifreleniyor. “TDE(Transparent Data Encryption) Nedir ve Nasıl Oluşturulur” isimli makalede TDE hakkında detaylı bilgi bulabilirsiniz.
- Row-Level Security memory optimized tablolar içinde destekleniyor. “Row-Level Security ile Satır Bazında Kısıtlama” isimli makalede row-level security hakkında detaylı bilgi bulabilirsiniz.
- Memory Optimized tabloları temporal yapıda oluşturabiliyorsunuz. “Temporal Table Nedir ve Nasıl Kullanılır?” isimli makalede detayları bulabilirsiniz.
- Query Store’u In-Memory OLTP ile beraber kullanabiliyorsunuz. “Query Store Nedir ve Nasıl Aktif Edilir” isimli makalede Query Store hakkında detaylı bilgi bulabilirsiniz.
SQL Server 2017 ile Gelen Yenilikler:
- Sp_configure opsiyonu olarak clr strict security opsiyonu geldi. True olarak set edildiğinde, CLR kullanan assembly’ler safe olarak işaretlense bile unsafe gibi davranır. Güvenlik açısından microsoft bu özelliğin true olarak set edilmesini istiyor. Default olarak’ta true olarak geliyor ama geriye dönük uyumluluk için false olarak’ta set edilebiliyor. Sp_configure hakkında detaylı bilgi almak için “sp_configure(SQL Server’da Server Seviyesinde Konfigurasyonlar)” isimli makaleyi okumak isteyebilirsiniz.
- Log dosyası ile ilgili bilgileri bulabileceğiniz sys.dm_db_log_stats isminde bir dmw geldi. Detayları “Log Dosyası Bilgilerine Ulaşın(sys.dm_db_log_stats)” isimli makalede bulabilirsiniz.
- Index’leri online rebuild ederken failover, disk yetmezliği, manual durdurma(PAUSE) gibi nedenlerden dolayı index rebuild işlemi fail olabiliyordu. Bu tip durumlarda fail olduktan sonra rebuild işleminin kaldığı yerden devam etmesi için index’i RESUMABLE=ON şeklinde işaretlemeniz gerekiyor. Detayları “Fail Eden Index’leri Kaldığı Yerden Devam Ettirin(Resumable Index)” isimli makalede bulabilirsiniz.
- Eğer bir identity kolonunuz varsa ve bu kolonun olduğu tabloya bir insert yapılırken commit etmeden failover gerçekleşirse yada servis beklenmedik bir şekilde kapanırsa otomatik olarak artan identitiy değerlerinizde boşluklar oluşması engelleyen Identitiy Cache özelliğini ALTER DATABASE SCOPED ile set edebiliyorsunuz.”ALTER DATABASE SCOPED CONFIGURATION ile Veritabanı Seviyesinde Konfigürasyon” isimli makalede detaylı bilgi bulabilirsiniz.
- Tablolar arası ilişkilerin yoğun kullanıldığı veritabanlarını analiz etmek istediğinizde ya da hiyerarşik veri ile uğraştığınızda Graph Database’i kullanmanız işinizi kolaylaştıracaktır. “Graph Database Nedir” isimli makalede detayları bulabilirsiniz.
- Sorgular için execution plan üretilip çalışmasına kadar geçen süreçteki query processing işlemi için, uygulamanın çalışma şekline göre adapte edilmiş adaptive query processing özelliği geldi. Bazı durumlarda sorgunun çalışması için seçilen execution plan’ın bazı nedenlerle doğru execution plan olmadığını düşünün. adaptive query processing özelliği ile bu sorun ortadan kalkar.
- SQL Server’daki bazı perfomans işlemlerini otomatik olarak gerçekleştiren Automatic Tuning özelliği geldi.”Automatic Tuning Nedir” isimli makalemi okumanızı tavsiye ederim.
- Select Into cümleciği ile oluşturulan tablolar default olarak PRIMARY file group üzerinde oluşturulurlar. Bu sürüm ile beraber istediğiniz file group’u spesifik olarak belirtebiliyorsunuz. “SELECT INTO ile Oluşturduğunuz Tablolarınızı İstediğiniz FileGroup Üzerinde Oluşturun” isimli makalede örnekleri bulabilirsiniz.
- Kurulum sırasında Tempdb’ye ait her dosyanın initial size’ını 256 GB olarak set edebiliyoruz. Eğer 1GB’tan büyük set edilirse Instant File Initialization’ın aktif edilmesi ile ilgili bizi uyarıyor. Instant File Initialization ile ilgili “Instant File Initialization” isimli makaleyi okumanızı tavsiye ederim.
- Tempdb’de row versioning ile ilgili bilgi bulabileceğiniz yeni bir dmw geldi. “Tempdb’de Row Versioning Sebebiyle Hangi Veritabanının Ne Kadar Alan Kullandığını Bulmak (sys.dm_tran_version_store_space_usage)” isimli makalede detayları bulabilirsiniz.
- Query Store ile artık bekleme tiplerini’de izleyebiliyoruz. “Query Store Nedir ve Nasıl Aktif Edilir” isimli makalede detayları bulabilirsiniz.
- Temporal tablolarda CASCADE DELETE ve CASCADE UPDATE desteği geliyor. Temporal tablolar ile ilgili detaylı bilgiyi “Temporal Table Nedir ve Nasıl Kullanılır?” isimli makalede bulabilirsiniz.
- Always On Availability Group’lar artık Windows-Linux arasında yapılabiliyor. Bu şekilde Windows Linux geçişleri yapılabilir.
- Nonclustered columnstore index’ler online olarak rebuild edilebiliyor.
- Database Tuning Advisor(DTA)’da columnstore index tavsiyesi yapılabiliyor. Tuning Options kısmında Recommend columnstore indexes kutucuğunu tıklamanız gerekiyor. “Database Engine Tuning Advisor(DTA)” isimli makalede detayları bulabilirsiniz.
- Database Tuning Advisor(DTA), artık Query Store verisini analiz edebiliyor.
- sys.dm_db_file_space_usage dmw’sine modified_extent_page_count isminde yeni bir kolon geldi. Differential backup almadan önce bu kolon’a bakarak değişiklik oranı fazla ise full backup alabilirsiniz.
- In-Memory OLTP’de bazı yenilikler geldi. “In Memory OLTP Nedir? Ve Nasıl Kullanılır?” isimli makalede detayları bulabilirsiniz.
- Clustered Column Store Index artık lob kolonlar üzerinde oluşturulabiliyor. (nvarchar(max), varchar(max), varbinary(max)).