Aracılığıyla paylaş


Sistem sürümlü zaman bazlı tablolarla bellek açısından iyileştirilmiş tablolar

Şunlar için geçerlidir: SQL Server 2016 (13.x) ve sonraki sürümleri Azure SQL Yönetilen Örnek

bellek için iyileştirilmiş tablolar için sistem sürümü oluşturulmuş zamana bağlı tablolar In-Memory OLTP iş yükleriyle toplanan verilerin üzerine veri denetimi ve zaman noktası analizi gerekli olduğu senaryolar için uygun maliyetli bir çözüm sağlar.

Not

Bellek optimize edilmiş zamana duyarlı tablolar yalnızca SQL Server ve Azure SQL Yönetilen Örnek'te kullanılabilir. Bellek için iyileştirilmiş tablolar ve zamana bağlı tablolar Azure SQL Veritabanı'nda bağımsız olarak kullanılabilir.

Genel bakış

Sistem sürümüyle zaman damgalı tablolar, veri değişikliklerinin tam geçmişini otomatik olarak tutar ve belirli bir zaman diliminde analiz için pratik Transact-SQL uzantılarını kullanıma sunar. Tipik bir senaryoda, düzenli olarak sorgulanmasa bile veri geçmişi uzun bir süre (birden çok ay, hatta yıllar) boyunca tutulur.

Veri denetimi ve zamana dayalı analiz, özellikle çok fazla sayıda isteği işleyen ve In-Memory OLTP teknolojisinin kullanıldığı OLTP sistemlerinde farklı ortamlarda talep edilebilir. Ancak, zamansal senaryolarda bellek için iyileştirilmiş tabloların kullanılması zordur çünkü oluşturulan çok fazla geçmiş verisi genellikle kullanılabilir RAM sınırını aşıyor. Aynı zamanda, eskidikçe daha az sıklıkta erişilen salt okunur geçmiş verileri depolamak için RAM kullanmak en uygun çözüm değildir.

Bellek için iyileştirilmiş tablolar için sistem sürümüne sahip sürekli tablolar, yüksek işlem aktarım hızı ve kilit içermeyen eşzamanlılık sağlar. Bunlar, geçerli verileri depolamak için bellek içi tabloları (geçici tablo) ve geçmiş verileri için disk tabanlı tabloları kullanarak büyük miktarda geçmiş verilerini depolamanıza olanak verir. DML işlemleri üzerindeki etkisi, yakın geçmişi depolayan ve yerel olarak derlenmiş koddan DML'lerin yürütülmesine olanak tanıyan dahili, otomatik olarak oluşturulan bellek için optimize edilmiş bir hazırlama tablosu kullanılarak azaltılır.

Aşağıdaki diyagramda bu mimari gösterilmektedir.

Zamansal bellek içi mimari diyagramı.

Uygulama ayrıntıları

Sistem tarafından sürümlenmiş bellek için iyileştirilmiş bir tablo oluşturduğunuzda, aşağıdaki önemli noktalara dikkat edin. Söz dizimi seçenekleri ve bir örnek için bkz. CREATE TABLE.

  • Yalnızca dayanıklı bellek için iyileştirilmiş tablolar sistem sürümüne dönüştürülebilir (DURABILITY = SCHEMA_AND_DATA).

  • Bellek için optimize edilmiş sistem sürümlü bir tabloya ait geçmiş veritabanı tablosu, ister son kullanıcı ister sistem tarafından oluşturulmuş olsun, disk tabanlı olmalıdır.

  • Yalnızca geçerli bellek içi tabloyu etkileyen sorgular, yerel olarak derlenmişT-SQL modüllerinde kullanılabilir. FOR SYSTEM TIME yan tümcesini kullanan zamana bağlı sorgular yerel olarak derlenmiş modüllerde desteklenmez. FOR SYSTEM TIME yan tümcesi geçici sorgularda ve yerel olmayan modüllerde bellek için iyileştirilmiş tablolarla desteklenir.

  • SYSTEM_VERSIONING = ONile, geçerli bellek için optimize edilmiş bir tablodaki güncelleme ve silme işlemlerinin sonuçları olan en son sistem sürümü değişikliklerini kabul etmek için dahili bellek için optimize edilmiş bir hazırlık tablosu otomatik olarak oluşturulur.

  • İç bellek için optimize edilmiş hazırlık tablosundaki veriler, asenkron veri temizleme görevi tarafından düzenli olarak disk tabanlı geçmiş tablosuna taşınır. Bu veri temizleme mekanizması, iç bellek arabelleklerini üst nesnelerinin bellek tüketiminin yüzde 10'undan azında tutar. sys.dm_db_xtp_memory_consumerssorgulayarak, bellek için iyileştirilmiş sistem sürümlü zamansal tablonun toplam bellek tüketimini ve iç bellek için iyileştirilmiş hazırlık tablosu ile geçerli zamansal tablo için verileri özetleyerek izleyebilirsiniz.

  • sp_xtp_flush_temporal_historyçalıştırarak el ile veri temizleme işlemi yürütebilirsiniz.

  • SYSTEM_VERSIONING = OFFile veya sistem versiyona sahip bir tablonun şeması sütun ekleme, silme veya değiştirme yoluyla değiştirildiğinde, iç hazırlık arabellek içeriğinin tamamı disk tabanlı geçmiş tablosuna taşınır.

  • Geçmiş verilerin sorgulanması etkin bir şekilde anlık görüntü yalıtım düzeyi altındadır ve her zaman bellek içi hazırlama arabelleği ile yinelenenleri olmayan disk tabanlı tablo arasında bir birleşim döndürür.

  • tablo şemasını dahili olarak değiştiren ALTER TABLE işlemleri, işlemin süresini uzatabilecek bir veri temizleme işlemi gerçekleştirmelidir.

İç bellekle optimize edilmiş hazırlama tablosu

Sistem, DML işlemlerini optimize etmek için bellek optimize edilmiş bir iç hazırlama tablosu oluşturur.

  • Tablo adı şu biçimde oluşturulur: Memory_Optimized_History_Table_<object_id>, burada <object_id> geçerli zamansal tablonun tanımlayıcısıdır.

  • Tablo, geçerli zamansal tablonun şemasını ve bir bigint sütununu çoğaltır. Bu ek sütun, iç geçmiş arabelleğine taşınan satırların benzersizliğini garanti eder.

  • Ek sütun şu ad biçimine sahiptir: Change_ID[<suffix>], tablonun zaten bir <suffix> sütunu olması durumunda isteğe bağlı olarak Change_ID eklenir.

  • Hazırlama tablosundaki fazla bigint sütunu nedeniyle sistem sürümlü bellek iyileştirilmiş bir tablonun en büyük satır boyutu 8 bayt azaltılır. Yeni maksimum değer artık 8.052 bayttır.

  • İç bellek için iyileştirilmiş hazırlama tablosu, SQL Server Management Studio Nesne Gezgini'nde temsil edilmemektedir.

  • Bu tablo ve geçerli zamana bağlı tabloyla bağlantısı hakkındaki meta veriler sys.internal_tablesbulunabilir.

Veri temizleme görevi

Veri temizleme, bellek için iyileştirilmiş herhangi bir tablonun veri taşıma için bellek boyutu tabanlı bir koşulu karşılayıp karşılamadığını denetleen düzenli olarak etkinleştirilmiş bir görevdir. Veri taşıma, dahili hazırlık tablosunun bellek tüketimi, mevcut geçici tablonun bellek tüketiminin yüzde sekizine ulaştığında başlar.

Veri temizleme görevi, mevcut iş yüküne bağlı olarak değişen bir zamanlamayla düzenli olarak etkinleştirilir. Yoğun bir iş yüküyle görev 5 saniyede bir kadar sık çalışır. Hafif bir iş yüküyle sıklık dakikada bir artar. İç bellekle optimize edilmiş, temizleme gerektiren her hazırlama tablosu için bir iş parçacığı oluşturulur.

Veri silme, bu kayıtları disk tabanlı geçmiş tablosuna taşımak için, bellek içi arabellekten halihazırda çalışan en eski işlemden daha eski olan tüm kayıtları siler.

sp_xtp_flush_temporal_history çalıştırıp şema ve tablo adını belirterek veri temizleme işlemi yürütebilirsiniz:

EXEC sys.sp_xtp_flush_temporal_history <schema_name>, <object_name>;

Sistem iç zamanlamaya göre veri temizleme görevini yürüttüğünde olduğu gibi aynı veri taşıma işlemi çağrılır.