Aracılığıyla paylaş


Memory-Optimized Tablolarına Giriş

Şunlar için geçerlidir:SQL ServerAzure SQL VeritabanıAzure SQL Yönetilen Örneği

Bellek için iyileştirilmiş tablolar CREATE TABLE (Transact-SQL) kullanılarak oluşturulur.

Bellek için iyileştirilmiş tablolar varsayılan olarak tamamen dayanıklıdır ve (geleneksel) disk tabanlı tablolardaki işlemler gibi bellek için iyileştirilmiş tablolardaki işlemler tamamen atomik, tutarlı, yalıtılmış ve dayanıklıdır (ACID). Bellek için iyileştirilmiş tablolar ve yerel olarak derlenmiş saklı yordamlar, Transact-SQL özelliklerinin yalnızca bir alt kümesini destekler.

SQL Server 2016'dan başlayarak ve Azure SQL Veritabanı'nda In-Memory OLTP'ye özgü harmanlamalar veya kod sayfaları için sınırlama yoktur.

Bellek için iyileştirilmiş tablolar için birincil depolama alanı ana bellektir. Tablodaki satırlar, bellekten okunur ve belleğe yazılır. Tablo verilerinin ikinci bir kopyası diskte tutulur, ancak yalnızca dayanıklılık amacıyla tutulur. Dayanıklı tablolar hakkında daha fazla bilgi için bkz. Memory-Optimized Nesneleri için Depolama Oluşturma ve Yönetme . Bellek için iyileştirilmiş tablolardaki veriler yalnızca veritabanı kurtarma sırasında (örneğin, sunucu yeniden başlatıldıktan sonra) diskten okunur.

In-Memory OLTP, daha da yüksek performans kazançları için işlem dayanıklılığı gecikmiş dayanıklı tabloları destekler. Gecikmeli dayanıklı işlemler, işlem onaylandıktan ve kontrol istemciye geri verildikten hemen sonra diske kaydedilir. Artan performans karşılığında, diske kaydedilmeyen tamamlanmış işlemler, sunucu çöktüğünde veya yük devretme durumunda kaybolur.

Varsayılan dayanıklı bellek için iyileştirilmiş tabloların yanı sıra SQL Server, günlüğe kaydedilmeyen ve verileri diskte kalıcı olmayan dayanıklı olmayan bellek için iyileştirilmiş tabloları da destekler. Bu, bu tablolardaki işlemlerin disk Girdi/Çıktı (I/O) gerektirmediği, ancak sunucu çökmesi veya yük devri olması durumunda verilerin kaybolduğu anlamına gelir.

In-Memory OLTP, geliştirme, dağıtım, yönetilebilirlik ve desteklenebilirlik gibi tüm alanlarda sorunsuz bir deneyim sağlamak için SQL Server ile tümleşiktir. Veritabanı hem bellek içi hem de disk tabanlı nesneler içerebilir.

Bellek açısından iyileştirilmiş tablolardaki satırlar versiyonlanır. Bu, tablodaki her satırın birden çok sürümü olduğu anlamına gelir. Tüm satır sürümleri aynı tablo veri yapısında tutulur. Satır sürümü oluşturma, aynı satırda eşzamanlı okuma ve yazma işlemlerine izin vermek için kullanılır. Aynı satırdaki eşzamanlı okuma ve yazma işlemleri hakkında daha fazla bilgi için Memory-Optimized Tabloları ile İşlemler bölümüne göz atın.

Aşağıdaki şekilde çoklu sürüm oluşturma gösterilmektedir. Şekilde üç satır içeren bir tablo gösterilir ve her satır farklı sürümlere sahiptir.

Çoklu sürüm oluşturma.

Tabloda üç satır vardır: r1, r2 ve r3. r1'in üç sürümü, r2'nin iki sürümü ve r3'ün dört sürümü vardır. Aynı satırın farklı sürümleri ardışık bellek konumlarını kaplamaz. Farklı satır sürümleri tablo veri yapısı boyunca dağıtılabilir.

Bellek için iyileştirilmiş tablo veri yapısı, satır sürümlerinden oluşan bir koleksiyon olarak görülebilir. Disk tabanlı tablolardaki satırlar sayfalar ve kapsamlar halinde düzenlenir ve sayfa numarası ve sayfa uzaklığı kullanılarak adreslenen tek tek satırlar, bellek için iyileştirilmiş tablolardaki satır sürümleri 8 bayt bellek işaretçileri kullanılarak ele alınmaktadır.

Bellek için iyileştirilmiş tablolardaki verilere iki şekilde erişilir:

  • Yerel olarak derlenmiş saklı yordamlar aracılığıyla.

  • Yorumlanan Transact-SQL aracılığıyla, yerel olarak derlenmiş bir saklı yordamın dışında. Bu Transact-SQL ifadeler, yorumlanmış saklı yordamların içinde ya da geçici Transact-SQL ifadeler olabilir.

Memory-Optimized Tablolarındaki Verilere Erişme

Bellek için iyileştirilmiş tablolara yerel olarak derlenmiş saklı yordamlardan (Yerel Olarak Derlenmiş Saklı Yordamlar) en verimli şekilde erişilebilir. Bellek için iyileştirilmiş tablolara (geleneksel) yorumlanmış Transact-SQL ile de erişilebilir. Interpreted Transact-SQL, yerel olarak derlenmiş bir saklı yordam kullanılmadan bellek açısından optimize edilmiş tablolara erişmeyi ifade eder. Yorumlanmış Transact-SQL erişimine bazı örnekler arasında DML tetikleyicisinden, geçici Transact-SQL toplu işlemden, görünümden ve tablo değerli işlevden bellek için optimize edilmiş bir tabloya erişim yer alır.

Aşağıdaki tabloda çeşitli nesneler için yerel ve yorumlanmış Transact-SQL erişimi özetlenmiştir.

Özellik Yerel Olarak Derlenmiş Saklı Yordamı Kullanarak Erişim Yorumlanan Transact-SQL Erişim CLR Erişimi
Bellek için iyileştirilmiş tablo Evet Evet Hayır 1
Bellek için iyileştirilmiş tablo türü Evet Evet Hayı
Yerel olarak derlenmiş saklı yordam Yerel olarak derlenmiş saklı yordamların iç içe yerleştirilmiş olması artık desteklenmektedir. Başvurulan yordamın da yerel olarak derlenmiş olması şartıyla, saklı yordamlar içinde EXECUTE söz dizimini kullanabilirsiniz. Evet Hayır*

1Bağlam bağlantısından (CLR modülü yürütürken SQL Server bağlantısı) bellek için iyileştirilmiş bir tabloya veya yerel olarak derlenmiş saklı yordama erişemezsiniz. Ancak, bellek için iyileştirilmiş tablolara ve yerel olarak derlenmiş saklı yordamlara erişebileceğiniz başka bir bağlantı oluşturabilir ve açabilirsiniz.

Bellek için iyileştirilmiş tablolardaki hassas veriler Always Encrypted kullanılarak korunabilir. Aşağıdaki sınırlamalar geçerlidir:

  • Always Encrypted güvenli kuşatmalarla kullanıldığında, bellek için iyileştirilmiş tablolardaki sütunlar için kapanım özellikli anahtarların kullanılması desteklenmez. Bu, yerinde şifrelemenin kullanılamayacağı ve istemcide ilk şifrelemenin yapıldığı anlamına gelir.
  • Always Encrypted, bir bellek için iyileştirilmiş tablodaki herhangi bir sütun için, tablonun yerel olarak derlenmiş bir modülde referans alındığı durumlarda desteklenmez.

Performans ve Ölçeklenebilirlik   

Aşağıdaki faktörler, In-Memory OLTP ile elde edilebilecek performans artışlarını etkiler:

İletişim: Birçok kısa saklı yordam çağrısı kullanan bir uygulama, her saklı yordamda daha az çağrı ve daha fazla işlev uygulanan bir uygulamaya kıyasla daha küçük bir performans kazancı görebilir.

Transact-SQL Yürütme: In-Memory OLTP, yorumlanmış saklı yordamlar veya sorgu yürütme yerine yerel olarak derlenmiş saklı yordamları kullanırken en iyi performansı elde eder. Bu tür saklı yordamlardan bellek ile optimize edilmiş tablolara erişmenin bir avantajı olabilir.

Aralık Taraması ve Nokta Arama: Bellek için iyileştirilmiş kümelenmemiş dizinler, aralık taramalarını ve sıralı taramaları destekler. Nokta aramalarında bellek için iyileştirilmiş karma dizinler, bellek için iyileştirilmiş, kümelenmemiş dizinlerden daha iyi performansa sahiptir. Bellek için iyileştirilmiş kümelenmemiş dizinler, disk tabanlı dizinlerden daha iyi performansa sahiptir.

  • SQL Server 2016'dan başlayarak, bellek için iyileştirilmiş bir tablonun sorgu planı tabloyu paralel olarak tarayabilir. Bu, analitik sorguların performansını artırır.
    • Karma dizinler de SQL Server 2016'da paralel olarak taranabilir hale geldi.
    • Sql Server 2016'da kümelenmemiş dizinler de paralel olarak taranabilir hale geldi.

Dizin işlemleri: Dizin işlemleri günlüğe kaydedilmez ve yalnızca bellekte bulunur.

Eşzamanlılık: Performansı, mandal çekişmesi veya engelleme gibi altyapı düzeyinde eşzamanlılıktan etkilenen uygulamalar, uygulama In-Memory OLTP'ye geçtiğinde önemli ölçüde iyileştirir.

Aşağıdaki tabloda ilişkisel veritabanlarında yaygın olarak bulunan performans ve ölçeklenebilirlik sorunları ve OLTP'In-Memory performansı nasıl geliştirebileceği listelenir.

Sorun In-Memory OLTP Etkisi
Gösteri

Yüksek kaynak (CPU, G/Ç, ağ veya bellek) kullanımı.
İşlemci (CPU)
Yerel olarak derlenmiş saklı yordamlar, yorumlanan saklı yordamlara kıyasla Transact-SQL deyimini yürütmek için daha az yönerge gerektirdiği için CPU kullanımını önemli ölçüde düşürebilir.

In-Memory OLTP, ölçeklendirilen iş yüklerine yönelik donanım yatırımını azaltmaya yardımcı olabilir çünkü bir sunucu birden çok sunucunun aktarım hızını sağlayabilir.

Giriş/Çıkış
İşlemeden veri veya dizin sayfalarına bir G/Ç darboğazıyla karşılaşırsanız, In-Memory OLTP bu darboğazı azaltabilir. Ayrıca, In-Memory OLTP nesnelerinin denetim noktası süreklidir ve G/Ç işlemlerinde ani artışlara yol açmaz. Ancak, performans açısından kritik tabloların çalışma kümesi belleğe sığmıyorsa, verilerin bellekte yerleşik olmasını gerektirdiğinden In-Memory OLTP uygulanmaz. Günlük kaydında G/Ç darboğazıyla karşılaşırsanız, In-Memory OLTP daha az günlük kaydı yaptığı için darboğazı azaltabilir. Bellek için optimize edilmiş bir veya daha fazla tablo dayanıklı olmayan tablolar olarak yapılandırıldıysa, verilerin kaydedilmesi için günlüğü devre dışı bırakabilirsiniz.

Hafıza
In-Memory OLTP herhangi bir performans avantajı sunmaz. In-Memory NESNELERIN bellekte yerleşik olması gerektiğinden OLTP belleğe fazladan baskı yapabilir.


In-Memory OLTP herhangi bir performans avantajı sunmaz. Verilerin veri katmanından uygulama katmanına iletilmesi gerekir.
Ölçeklenebilirlik

SQL Server uygulamalarındaki ölçeklendirme sorunlarının çoğu kilitler, mandallar ve spinlock'lardaki çekişme gibi eşzamanlılık sorunlarından kaynaklanmaktadır.
Kilitleme Çekişmesi
Tipik bir senaryo, bir dizinin son sayfasında satırlar eş zamanlı olarak anahtar sırasına eklenirken çekişmedir. In-Memory OLTP verilere erişirken mandal almadığından, mandal çekişmeleri ile ilgili ölçeklenebilirlik sorunları tamamen kaldırılır.

Spinlock Çekişmesi
In-Memory OLTP verilere erişirken mandal almadığından, spinlock çekişmeleri ile ilgili ölçeklenebilirlik sorunları tamamen kaldırılır.

Kilitleme İlişkili Çekişme
Veritabanı uygulamanız okuma ve yazma işlemleri arasında engelleme sorunlarıyla karşılaşırsa, In-Memory OLTP tüm işlem yalıtım düzeylerini uygulamak için yeni bir iyimser eşzamanlılık denetimi biçimi kullandığından engelleme sorunlarını kaldırır. In-Memory OLTP satır sürümlerini depolamak için TempDB kullanmaz.

Ölçeklendirme sorunu, aynı satırı güncelleştirmeye çalışan iki eşzamanlı işlem gibi iki yazma işlemi arasındaki çakışmadan kaynaklanıyorsa In-Memory OLTP bir işlemin başarılı olmasını ve diğer işlemi başarısız olmasını sağlar. Başarısız olan işlemin açıkça veya örtük olarak yeniden iletilmesi ve işlemi yeniden denemesi gerekir. Her iki durumda da uygulamada değişiklik yapmanız gerekir.

Uygulamanız iki yazma işlemi arasında sık sık çakışmalarla karşılaşıyorsa iyimser kilitleme değeri azalır. Uygulama In-Memory OLTP için uygun değildir. Çoğu OLTP uygulamasında, çakışma kilit yükseltmesinin sonucu olmadığı sürece yazma çakışmaları yoktur.

Row-Level Güvenliği Memory-Optimized Tablolarında

Row-Level Güvenliği, bellek iyileştirilmiş tablolarda sağlanmaktadır. Row-Level Güvenlik ilkelerinin bellek için iyileştirilmiş tablolara uygulanması temelde disk tabanlı tablolarla aynıdır, ancak güvenlik önkoşulları olarak kullanılan satır içi tablo değerli işlevlerin yerel olarak derlenmesi gerekir (WITH NATIVE_COMPILATION seçeneği kullanılarak oluşturulur). Ayrıntılar için Row-Level Güvenlik konusunun Özellikler Arası Uyumluluk bölümüne bakın.

Bellek ile optimize edilmiş tablolar için, satır düzeyi güvenlik açısından temel olan çeşitli yerleşik güvenlik işlevleri mevcuttur. Ayrıntılar için bkz. Yerel Olarak Derlenmiş Modüllerde Yerleşik İşlevler.

ÇAĞıRAN OLARAK YÜRÜT - İpucu belirtilmemiş olsa bile artık tüm yerel modüller varsayılan olarak ÇAĞıRAN OLARAK YÜRÜT özelliğini destekler ve kullanır. Bunun nedeni, işlevin ve içinde kullanılan yerleşik işlevlerin çağıran kullanıcı bağlamında değerlendirilmesi için tüm satır düzeyi güvenlik koşulu işlevlerinin EXECUTE AS CALLER kullanması beklenir.
EXECUTE AS CALLER, çağıran üzerindeki izin denetimlerinin neden olduğu küçük (yaklaşık 10%) performans isabeti içeriyor. Modül açıkça SAHİP OLARAK YÜRÜT veya KENDİ OLARAK YÜRÜT'ü belirtirse, bu izin denetimleri ve ilişkili performans maliyetinden kaçınılır. Ancak, bu seçeneklerden birinin belirtilen yerleşik işlevlerle birlikte kullanılması, gerekli bağlam değiştirme nedeniyle daha yüksek bir performans isabetine neden olur.

Senaryo

In-Memory OLTP'nin performansı geliştirebileceği tipik senaryolar hakkında kısa bir açıklama için bkz. OLTPIn-Memory.

Ayrıca Bkz.

In-Memory OLTP (In-Memory İyileştirme)