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 OLTP saniyede işlem sayısını artırır ve işlem işleme gecikme süresini azaltır. Bellek İç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, olaylar 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 OLTP sırasıyla 2012 ve 2014'te SQL Server'a tanıtıldı. 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 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 OLTP kullanarak DTU'ları %70 oranında geliştirirken iş yüklerini iki katına çıkarabildi. Daha fazla bilgi için bkz. Azure SQL Veritabanı'de Bellek İçi OLTP.

Not

Bellek İçi OLTP, Azure SQL Veritabanı Premium (DTU) ve İş Açısından Kritik (sanal çekirdek) hizmet katmanlarında kullanılabilir. Hiper Ölçek hizmet katmanı, Bellek İçi OLTP nesnelerinin bir alt kümesini destekler. Daha fazla bilgi için bkz . Hiper Ölçek sınırlamaları.

Columnstore dizinleri Temel katman dışındaki tüm hizmet katmanlarında ve hizmet hedefi S3'ün altında olduğunda Standart katmanda kullanılabilir. Daha fazla bilgi için bkz . Columnstore dizinlerini içeren veritabanlarının hizmet katmanlarını değiştirme.

Bu makalede, bellek içi OLTP ve columnstore dizinlerinin Azure SQL Veritabanı özgü yönleri açıklanır ve şunları görmenize olanak sağlayan örnekler de bulunur:

  • Bu teknolojilerin depolama ve veri boyutu sınırları üzerindeki etkisi.
  • Bu teknolojileri kullanan veritabanlarının farklı fiyatlandırma katmanları arasındaki hareketini yönetme.
  • Bellek İçi OLTP'nin yanı sıra columnstore dizinlerinin gösterimi.

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

Bellek İçi OLTP

Bellek İç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 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 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 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 OLTP için veri boyutu ve depolama üst sınırı.

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

Bellek İç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. Her hizmet hedefi, bellek içi OLTP depolama olarak bilinen, bellek için iyileştirilmiş tablolar için bir bellek kotasına veya üst sınırına sahiptir.

Desteklenen her tek veritabanı hizmet hedefi ve her elastik havuz hizmeti hedefi belirli miktarda Bellek İçi OLTP depolama alanı içerir:

Aşağıdaki öğeler Bellek İç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 elastik havuzun hizmet hedefini artırın.

Bellek İç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 OLTP depolama alanını izleme.

Elastik havuzlar hakkında

Elastik havuzlarla, Bellek İç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 Max vCore yapılandırın. Bu üst sınır, havuzdaki herhangi bir veritabanındaki Bellek İçi OLTP depolama kullanımını da orantılı olarak sınırlar.
  • 0'dan büyük bir Min eDTU veya Min vCore yapılandırın. Bu minimum, havuzdaki her veritabanının yapılandırılan Min eDTU veya Min vCoreöğesine karşılık gelen kullanılabilir Bellek İçi OLTP depolama alanına sahip olmasını garanti eder.

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

Bellek İçi OLTP, Azure SQL Veritabanı Genel Amaçlı, Standart ve Temel hizmet katmanlarında desteklenmez. Bu nedenle, Bellek İçi OLTP nesneleri olan bir veritabanını bu katmanlardan birine ölçeklendirmek mümkün değildir. Veritabanını bu hizmet katmanlarından birine ölçeklendirmek istiyorsanız, 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ı disk tabanlı nesnelere ve normal T-SQL modüllerine dönüştürün.

bir İş Açısından Kritik veya Premium veritabanının ölçeğini azalttığınızda, bellek için iyileştirilmiş tablolardaki verilerin veritabanının veya elastik havuzun hedef hizmet hedefinde bulunan Bellek İçi OLTP depolama alanına sığması gerekir. Veritabanının veya elastik havuzun ölçeğini azaltmaya veya veritabanını elastik havuza taşımaya çalışırsanız ve hedef hizmet hedefinde yeterli bellek içi OLTP depolama alanı yoksa işlem başarısız olur.

Bellek İçi OLTP nesnelerinin mevcut olup olmadığını belirleme

Belirli bir veritabanının Bellek İçi OLTP'yi destekleyip desteklemediğini bulmanı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 OLTP desteklenir.

Aşağıdaki sorgular, veritabanının Hiper Ölçek, Genel Amaçlı, Standart veya Temel hizmet katmanına ölçeklendirilebilmesi 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 dizini vardır:

  • Tablodaki tüm verilerin sütun biçiminde düzenlendiği kümelenmiş sütun deposu . Bu dizin türünde, tablodaki tüm satırlar verileri yüksek oranda sıkıştıran ve tabloda hızlı analiz 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 dizinleri, 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 dizin türü, klasik veri ambarı senaryoları için iyi bir seçimdir.
  • Verilerin geleneksel rowstore tablosunda depolandığı ve columnstore biçiminde analitik sorgular için kullanılan ek bir dizin bulunduğu kümelenmemiş columnstore . Bu dizin türü Karma İşlem Analizi İşlemeyi (HTAP) etkinleştirir: İşlemsel iş yükünde hızlı gerçek zamanlı analiz çalıştırma ö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 olan büyüklük sıraları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, columnstore yapılarındaki veri miktarı kullanılabilir bellek miktarını aşabilir.

Columnstore dizinleri için veri boyutu ve depolama

Columnstore dizinlerinin belleğe tam olarak sığdırmak 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. Sütunlu arşiv sıkıştırma ile sıkıştırma oranı 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. Temel tablo için satır deposu veri sıkıştırmasını da kullanabilirsiniz.

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

DTU satın alma modelini kullanıyorsanız ve veritabanınız columnstore dizinleri içeriyorsa, veritabanınızı S3 hizmet hedefinin altına ölçeklendirirseniz uygulamanız çalışmayı durdurabilir. Columnstore dizinleri yalnızca Hiper Ölçek, İş Açısından Kritik ve Premium hizmet katmanlarında ve S3 ve üzeri kullanılıyorsa Standart hizmet katmanında desteklenir. Columnstore dizinleri Temel hizmet katmanında desteklenmez. Veritabanınızı desteklenmeyen bir hizmet katmanına veya hizmet hedefine ölçeklendirdiğinizde columnstore dizininiz kullanılamaz duruma gelir. DML deyimlerini yürütürken sistem dizini korur, ancak dizini hiçbir zaman kullanmaz. Daha sonra desteklenen bir hizmet katmanına veya hizmet hedefine geri ölçeklendirirseniz columnstore dizininiz hemen yeniden kullanılmaya hazırdır.

Kümelenmiş columnstore dizininiz varsa, veritabanı desteklenmeyen bir hizmet katmanına veya hizmet hedefine ölçeklendirilirse tablonun tamamı kullanılamaz duruma gelir. Ölçeklendirme işleminden önce tüm kümelenmiş columnstore dizinlerini bırakın ve yerine rowstore kümelenmiş dizinleri veya yığınlarını yazın.