Azure SQL Veritabanı'de bellek içi teknolojileri kullanarak performansı iyileştirme

Şunlar için geçerlidir:Azure SQL Veritabanı

Bellek içi teknolojiler uygulamanızın performansını artırmanıza ve veritabanınızın maliyetini azaltmanıza olanak tanır.

Bellek içi teknolojiler ne zaman kullanılır?

Bellek içi teknolojileri kullanarak çeşitli iş yükleriyle performans geliştirmeleri elde edebilirsiniz:

  • İsteklerin çoğunun daha küçük veri kümesini okuduğu veya güncelleştirdiği işlemsel (çevrimiçi işlem işleme (OLTP)), örneğin oluşturma/okuma/güncelleştirme/silme (CRUD) işlemleri.
  • Sorguların çoğunun raporlama amacıyla karmaşık hesaplamalara ve ayrıca yük (veya toplu yükleme) işlemleri gerçekleştiren ve/veya mevcut tablolara veri değişiklikleri yazan düzenli olarak zamanlanmış işlemlere sahip olduğu analitik (çevrimiçi analitik işleme (OLAP)). OLAP iş yükleri genellikle OLTP iş yüklerinden düzenli aralıklarla güncelleştirilir.
  • Hem OLTP hem de OLAP sorgularının aynı veri kümesinde yürütüldüğü karma (karma işlem/analitik işleme (HTAP)).

Bellek içi teknolojiler, sorguların yerel derlemesini kullanarak veya temel alınan donanımda bulunan toplu işleme ve SIMD yönergeleri gibi gelişmiş işlemleri kullanarak işlenecek verileri bellekte tutarak bu iş yüklerinin performansını artırabilir.

Genel bakış

Azure SQL Veritabanı aşağıdaki bellek içi teknolojileri destekler:

  • Bellek içi OLTP saniye başına işlem sayısını artırır ve işlem işleme için gecikme süresini azaltır. Bellek içi OLTP'den yararlanan senaryolar şunlardır: alım satım ve oyun gibi yüksek aktarım hızına sahip işlem işlemleri, olaylardan veya IoT cihazlarından veri alımı, önbelleğe alma, veri yükü ve geçici tablo ve tablo değişkeni senaryoları.
  • Kümelenmiş columnstore dizinleri depolama ayak izinizi azaltır (10 kata kadar) ve raporlama ve analiz sorgularının performansını artırır. Bunu, veritabanınıza daha fazla veri sığdırmak ve performansı geliştirmek için veri reyonlarınızdaki olgu tablolarıyla kullanabilirsiniz. Ayrıca, verileri arşivleyip 10 kata kadar daha fazla veri sorgulamak için işlemsel veritabanınızdaki geçmiş verilerle de kullanabilirsiniz.
  • HTAP için kümelenmemiş columnstore dizinleri , pahalı bir ayıklama, dönüştürme ve yükleme (ETL) işlemi çalıştırmanıza ve veri ambarı doldurulmasını beklemenize gerek kalmadan işlemsel veritabanını doğrudan sorgulayarak işletmeniz hakkında gerçek zamanlı içgörüler elde etmenize yardımcı olur. Kümelenmemiş columnstore dizinleri OLTP veritabanında analiz sorgularının hızlı yürütülmesine olanak tanırken işletimsel iş yükü üzerindeki etkiyi azaltır.
  • HTAP için bellek için iyileştirilmiş kümelenmiş columnstore dizinleri , hızlı işlem gerçekleştirmenize ve analiz sorgularını aynı verilerde çok hızlı bir şekilde eşzamanlı olarak çalıştırmanıza olanak tanır.

Columnstore dizinleri ve bellek içi OLTP sırasıyla 2012 ve 2014'te SQL Server'a sunulmuştur. Azure SQL Veritabanı, Azure SQL Yönetilen Örneği ve SQL Server, bellek içi teknolojilerin aynı uygulamasını paylaşır.

Not

Örnek veritabanını ve ostress.exe kullanarak AdventureWorksLT bellek içi OLTP teknolojisinin performans avantajlarını gösteren ayrıntılı bir adım adım öğretici için bkz. Azure SQL Veritabanı'de bellek içi örnek.

Bellek içi teknolojinin avantajları

Daha verimli sorgu ve işlem işlemleri nedeniyle bellek içi teknolojiler maliyeti azaltmanıza da yardımcı olur. Performans kazancı elde etmek için genellikle veritabanının fiyatlandırma katmanını yükseltmeniz gerekmez. Bazı durumlarda, bellek içi teknolojilerde performans iyileştirmeleri görmeye devam ederken fiyatlandırma katmanını da düşürebilirsiniz.

Çekirdek İş Çözümleri, bellek içi OLTP kullanarak iş yüklerini iki katına çıkararak DTU'ları %70 oranında geliştirebildi. Daha fazla bilgi için bkz. Azure SQL Veritabanı bellek içi OLTP.

Not

Bellek içi teknolojiler, Azure SQL Veritabanı Premium ve İş Açısından Kritik katmanlarında kullanılabilir.

Bu makalede, bellek içi OLTP ve columnstore dizinlerinin Azure SQL Veritabanı özgü yönleri açıklanır ve örnekler de yer alır:

  • Bu teknolojilerin depolama ve veri boyutu sınırları üzerindeki etkisini göreceksiniz.
  • Bu teknolojileri kullanan veritabanlarının farklı fiyatlandırma katmanları arasındaki hareketinin nasıl yönetileceğini göreceksiniz.
  • Bellek içi OLTP kullanımının yanı sıra columnstore dizinlerini gösteren iki örnek göreceksiniz.

SQL Server'da bellek içi hakkında daha fazla bilgi için bkz:

Bellek İçi OLTP

Bellek içi OLTP teknolojisi, tüm verileri bellekte tutarak son derece hızlı veri erişimi işlemleri sağlar. Ayrıca OLTP iş yükünün performansını artırmak için özel dizinler, sorguların yerel derlemesi ve mandalsız veri erişimi kullanır. Bellek içi OLTP verilerinizi düzenlemenin iki yolu vardır:

  • Her satırın ayrı bir bellek nesnesi olduğu bellek için iyileştirilmiş satır deposu biçimi. Bu, yüksek performanslı OLTP iş yükleri için iyileştirilmiş klasik bir bellek içi OLTP biçimidir. Bellek için iyileştirilmiş satır deposu biçiminde kullanılabilecek iki tür bellek için iyileştirilmiş tablo vardır:

    • Sunucu yeniden başlatıldıktan sonra belleğe yerleştirilen satırların korunduğu dayanıklı tablolar (SCHEMA_AND_DATA). Bu tür tablolar, bellek içi iyileştirmelerin ek avantajlarıyla geleneksel bir rowstore tablosu gibi davranır.
    • Satırların yeniden başlatıldıktan sonra korunmadığı, kalıcı olmayan tablolar (SCHEMA_ONLY). Bu tablo türü geçici veriler (örneğin, geçici tabloların değiştirilmesi) veya kalıcı bir tabloya (hazırlama tabloları olarak adlandırılır) taşımadan önce verileri hızla yüklemeniz gereken tablolar için tasarlanmıştır.
  • Verilerin sütunlu biçimde düzenlendiği bellek için iyileştirilmiş columnstore biçimi. Bu yapı, OLTP iş yükünüzün çalıştığı aynı veri yapısı üzerinde analiz sorguları çalıştırmanız gereken HTAP senaryoları için tasarlanmıştır.

Not

Bellek içi OLTP teknolojisi, bellekte tam olarak bulunabilen veri yapıları için tasarlanmıştır. Bellek içi veriler diske yüklenemediğinden, yeterli belleğe sahip bir veritabanı kullandığınızdan emin olun. Daha fazla bilgi için bkz . Bellek içi OLTP için veri boyutu ve depolama üst sınırı.

Bellek içi OLTP için veri boyutu ve depolama sınırı

Bellek içi OLTP, kullanıcı verilerini depolamak için kullanılan bellek için iyileştirilmiş tablolar içerir. Bu tablolar belleğe sığmak için gereklidir. Belleği doğrudan SQL Veritabanı yönettiğiniz için kullanıcı verileri için kota kavramına sahibiz. Bu fikir, bellek içi OLTP depolama alanı olarak adlandırılır.

Desteklenen her bir tek veritabanı fiyatlandırma katmanı ve her elastik havuz fiyatlandırma katmanı belirli miktarda bellek içi OLTP depolama alanı içerir.

Aşağıdaki öğeler bellek içi OLTP depolama sınırınıza doğru sayılır:

  • Bellek için iyileştirilmiş tablolarda ve tablo değişkenlerinde etkin kullanıcı veri satırları. Eski satır sürümleri büyük harfe doğru sayılmaz.
  • Bellek için iyileştirilmiş tablolardaki dizinler.
  • ALTER TABLE işlemlerinin operasyonel yükü.

Büyük harfe bastığınızda kota aşımı hatası alırsınız ve artık veri ekleyemez veya güncelleştiremezsiniz. Bu hatayı azaltmak için verileri silin veya veritabanının veya havuzun fiyatlandırma katmanını artırın.

Bellek içi OLTP depolama kullanımını izleme ve neredeyse sınırı aştığınızda uyarıları yapılandırma hakkında ayrıntılı bilgi için bkz . Bellek içi depolamayı izleme.

Elastik havuzlar hakkında

Elastik havuzlarda bellek içi OLTP depolama alanı havuzdaki tüm veritabanları arasında paylaşılır. Bu nedenle, bir veritabanındaki kullanım diğer veritabanlarını etkileyebilir. Bunun için iki azaltma:

  • Max-eDTU Havuzun tamamı için eDTU veya sanal çekirdek sayısının altında olan veritabanları için veya MaxvCore yapılandırın. Bu üst sınır, havuzdaki herhangi bir veritabanındaki bellek içi OLTP depolama kullanımını eDTU sayısına karşılık gelen boyuta çıkarır.
  • 0'dan büyük bir Min-eDTU veya MinvCore yapılandırın. Bu minimum, havuzdaki her veritabanının yapılandırılan Min-eDTU veya vCoreöğesine karşılık gelen bellek içi OLTP depolama alanı miktarına sahip olmasını garanti eder.

Bellek içi OLTP teknolojileri kullanan veritabanlarının hizmet katmanlarını değiştirme

Veritabanınızı genel amaçlı (sanal çekirdek) İş Açısından Kritik veya Standart (DTU) gibi daha yüksek bir katmana istediğiniz zaman Premium'a yükseltebilirsiniz. Kullanılabilir işlevsellik ve kaynaklar yalnızca artar.

Ancak katmanı düşürmek veritabanınızı olumsuz etkileyebilir. Veritabanınız bellek içi OLTP nesneleri içerdiğinde, etki özellikle İş Açısından Kritik'den Genel Amaçlı'ya (veya Premium'dan Standart veya Temel'e) indirgendiğinde ortaya çıkar. Veritabanınızda bellek içi nesneleri kolayca bulabilirsiniz.

Bellek için iyileştirilmiş tablolar, eski sürüme düşürmeden sonra kullanılamaz (görünür durumda olsalar bile). Elastik havuzun fiyatlandırma katmanını düşürürken veya bellek içi teknolojileri olan bir veritabanını Genel Amaçlı, Standart veya Temel elastik havuza taşırken de aynı noktalar geçerlidir.

Önemli

Bellek içi OLTP, Genel Amaçlı veya Azure SQL Veritabanı Standart veya Temel DTU katmanlarında desteklenmez. Bu nedenle, bellek içi OLTP nesneleri olan bir veritabanını bu katmanlardan birine taşımak mümkün değildir. Veritabanını eski sürüme düşürmeden önce, bellek için iyileştirilmiş tüm tabloları ve tablo türlerinin yanı sıra yerel olarak derlenmiş tüm T-SQL modüllerini kaldırın veya bunları satır tabanlı nesnelere dönüştürün.

İş Açısından Kritik katmanındaki kaynakların ölçeğini azaltma: Bellek için iyileştirilmiş tablolardaki veriler, veritabanının katmanıyla ilişkili bellek içi OLTP depolama alanına sığmalıdır veya elastik havuzda kullanılabilir. Katmanın ölçeğini azaltmaya veya veritabanını yeterli kullanılabilir bellek içi OLTP depolama alanı olmayan bir havuza taşımaya çalışırsanız işlem başarısız olur.

Bellek içi nesnelerin mevcut olup olmadığını belirleme

Belirli bir veritabanının bellek içi OLTP'yi destekleyip desteklemediğini anlamanın programlı bir yolu vardır. Aşağıdaki Transact-SQL sorgusunu yürütebilirsiniz:

SELECT DatabasePropertyEx(DB_NAME(), 'IsXTPSupported');

Sorgu döndürürse 1, bu veritabanında bellek içi OLTP desteklenir.

Aşağıdaki sorgular, veritabanının Genel Amaçlı, Standart veya Temel sürüme düşürülebilmesi için önce kaldırılması gereken tüm nesneleri tanımlar:

SELECT * FROM sys.tables WHERE is_memory_optimized=1
SELECT * FROM sys.table_types WHERE is_memory_optimized=1
SELECT * FROM sys.sql_modules WHERE uses_native_compilation=1

Bellek içi columnstore

Bellek içi columnstore teknolojisi, tablolarda büyük miktarda veri depolamanıza ve sorgulamanıza olanak tanır. Columnstore teknolojisi, geleneksel satır odaklı depolamaya göre OLAP iş yüklerinde 10 kata kadar sorgu performansı elde etmek için sütun tabanlı veri depolama biçimini ve toplu sorgu işlemeyi kullanır. Ayrıca sıkıştırılmamış veri boyutuna göre 10 kata kadar veri sıkıştırma kazancı elde edebilirsiniz.

Verilerinizi düzenlemek için kullanabileceğiniz iki tür columnstore modeli vardır:

  • Tablodaki tüm verilerin sütun biçiminde düzenlendiği kümelenmiş sütun deposu . Bu modelde, tablodaki tüm satırlar verileri yüksek oranda sıkıştıran ve tabloda hızlı analitik sorgular ve raporlar yürütmenizi sağlayan sütun biçiminde yerleştirilir. Verilerinizin doğasına bağlı olarak, verilerinizin boyutu 10x-100x azaltılabilir. Kümelenmiş columnstore modeli, diskte depolanmadan önce 100.000 satırdan büyük veri toplu işlemleri sıkıştırıldığından büyük miktarda verinin (toplu yükleme) hızlı alımını da sağlar. Bu model, klasik veri ambarı senaryoları için iyi bir seçimdir.
  • Verilerin geleneksel rowstore tablosunda depolandığı ve columnstore biçiminde analiz sorguları için kullanılan bir dizin bulunduğu kümelenmemiş columnstore. Bu model, Hibrit İşlem Analizi İşleme'yi (HTAP) etkinleştirir: İşlemsel bir iş yükünde yüksek performanslı gerçek zamanlı analiz çalıştırabilme özelliği. OLTP sorguları küçük bir satır kümesine erişmek için iyileştirilmiş rowstore tablosunda yürütülürken, OLAP sorguları taramalar ve analizler için daha iyi bir seçim olan columnstore dizininde yürütülür. Sorgu iyileştiricisi, sorguyu temel alan satır deposu veya sütun deposu biçimini dinamik olarak seçer. Özgün veri kümesi herhangi bir değişiklik yapılmadan özgün satır deposu tablosunda tutulduğundan, kümelenmemiş columnstore dizinleri verilerin boyutunu küçültmez. Ancak, ek columnstore dizininin boyutu eşdeğer B ağacı dizininden daha küçük büyüklük sırasına göre olmalıdır.

Not

Bellek içi columnstore teknolojisi yalnızca bellekte işleme için gereken verileri tutarken, belleğe sığamayan veriler diskte depolanır. Bu nedenle, bellek içi columnstore yapılarındaki veri miktarı kullanılabilir bellek miktarını aşabilir.

Columnstore dizinleri için veri boyutu ve depolama

Columnstore dizinleri belleğe sığmak için gerekli değildir. Bu nedenle, dizinlerin boyutuyla ilgili tek büyük boyut, DTU tabanlı satın alma modeli ve sanal çekirdek tabanlı satın alma modeli makalelerinde belgelenen maksimum genel veritabanı boyutudur.

Kümelenmiş columnstore dizinlerini kullandığınızda, temel tablo depolaması için sütunlu sıkıştırma kullanılır. Bu sıkıştırma, kullanıcı verilerinizin depolama ayak izini önemli ölçüde azaltabilir ve bu da veritabanına daha fazla veri sığdırabileceğiniz anlamına gelir. Ayrıca sütunlu arşiv sıkıştırma ile sıkıştırma daha da artırılabilir. Elde edebilirsiniz sıkıştırma miktarı verilerin doğasına bağlıdır, ancak sıkıştırmanın 10 katı nadir değildir.

Örneğin, boyutu en fazla 1 terabayt (TB) olan bir veritabanınız varsa ve columnstore dizinlerini kullanarak sıkıştırmanın 10 katını elde ediyorsanız, veritabanına toplam 10 TB kullanıcı verisi sığdırabilirsiniz.

Kümelenmemiş columnstore dizinlerini kullandığınızda, temel tablo hala geleneksel satır deposu biçiminde depolanır. Bu nedenle, depolama tasarrufları kümelenmiş columnstore dizinleri kadar önemli değildir. Ancak, birçok geleneksel kümelenmemiş dizini tek bir columnstore diziniyle değiştiriyorsanız, tablonun depolama ayak izinde genel bir tasarruf görmeye devam edebilirsiniz.

columnstore dizinlerini içeren veritabanlarının hizmet katmanlarını değiştirme

Hedef katmanınız S3'ün altındaysa tek veritabanını Temel veya Standart olarak düşürmek mümkün olmayabilir. Columnstore dizinleri yalnızca İş Açısından Kritik/Premium fiyatlandırma katmanında ve Standart katman, S3 ve üzeri sürümlerde desteklenir ve Temel katmanda desteklenmez. Veritabanınızı desteklenmeyen bir katmana veya düzeye indirdiğinizde columnstore dizininiz kullanılamaz duruma gelir. Sistem columnstore dizininizi korur, ancak hiçbir zaman dizini kullanmaz. Daha sonra desteklenen bir katmana veya düzeye yükseltirseniz columnstore dizininiz hemen yeniden kullanılmaya hazırdır.

Kümelenmiş bir columnstore dizininiz varsa, düşürme sonrasında tablonun tamamı kullanılamaz duruma gelir. Veritabanınızı desteklenmeyen bir katmana veya düzeye düşürmeden önce tüm kümelenmiş columnstore dizinlerini bırakın (ve değerini rowstore kümelenmiş dizinleriyle değiştirin).