Aracılığıyla paylaş


Bellek iyileştirmeli tabloların dayanıklılığı

Şunlar için geçerlidir: SQL Server

In-Memory OLTP, bellek için iyileştirilmiş tablolar için tam dayanıklılık sağlar. Bellek için iyileştirilmiş bir tabloda değişiklik yaptığında, SQL Server (disk tabanlı tablolar için olduğu gibi), temel depolamanın mevcut olması koşuluyla, bu değişikliklerin kalıcı olduğunu ve veritabanı yeniden başlatıldığında da geçerliliğini koruduğunu garanti eder. Dayanıklılığın iki temel bileşeni vardır: işlem günlüğü ve disk içi depolamada kalıcı veri değişiklikleri.

Dayanıklı tabloların boyut sınırlamalarıyla ilgili ayrıntılar için bkz. Memory-Optimized Tabloları için Bellek Gereksinimlerini Tahmin Edin.

İşlem günlüğü

Disk tabanlı tablolarda veya dayanıklı bellek için iyileştirilmiş tablolarda yapılan tüm değişiklikler bir veya daha fazla işlem günlüğü kaydında yakalanır. bir işlem işlendiğinde, SQL Server işlemin işlediği uygulama veya kullanıcı oturumuyla iletişim kurmadan önce işlemle ilişkili günlük kayıtlarını diske yazar. Bu, işlem tarafından yapılan değişikliklerin dayanıklı olduğunu garanti eder. Bellek optimizasyonlu tablolar için transaction günlüğü, disk tabanlı tablolar tarafından kullanılan günlük akışıyla tamamen tümleştirilmiştir. Bu tümleştirme, mevcut işlem günlüğü yedekleme, kurtarma ve geri yükleme işlemlerinin ek adım gerektirmeden çalışmaya devam etmesini sağlar. Ancak In-Memory OLTP iş yükünüzün işlem aktarım hızını önemli ölçüde artırabileceğinden günlük GÇ performans sorununa neden olabilir. Bu artan aktarım hızını sürdürmek için günlük IO alt sisteminin artan yükü karşılayabilecek durumda olduğundan emin olun.

Veri ve delta dosyaları

Bellek için iyileştirilmiş tablolardaki veriler, bellek içi yığın veri yapısında serbest biçimli veri satırları olarak depolanır ve bellekteki bir veya daha fazla dizin aracılığıyla bağlanır. Veri satırları için disk tabanlı tablolar için kullanılanlar gibi sayfa yapısı yoktur. Uzun süreli saklama ve işlem günlüğünün kesilmesine izin vermek amacıyla, bellek için optimize edilmiş tablolardaki işlemler, veri ve delta dosyaları kümesinde saklanır. Bu dosyalar, zaman uyumsuz bir arka plan işlemi kullanılarak işlem günlüğüne göre oluşturulur. Veriler ve delta dosyaları bir veya daha fazla kapsayıcıda bulunur (FILESTREAM verileri için kullanılan mekanizma kullanılarak). Bu kapsayıcılar bellek için iyileştirilmiş bir dosya grubunun parçasıdır.

Veriler bu dosyalara kesinlikle sıralı bir şekilde yazılır ve bu da dönen medya için disk gecikme süresini en aza indirir. G/Ç etkinliğini dağıtmak için farklı disklerde birden çok kapsayıcı kullanabilirsiniz. Farklı disklerdeki birden çok kapsayıcıdaki veriler ve delta dosyaları, diskteki verilerden ve delta dosyalarından belleğe okunduğunda veritabanı geri yükleme/kurtarma performansını artırır.

Kullanıcı işlemleri verilere ve delta dosyalarına doğrudan erişmez. Tüm veri okuma ve yazma işlemleri bellek içi veri yapılarını kullanır.

Veri dosyası

Veri dosyası, birden fazla işlem tarafından INSERT veya UPDATE işlemlerinin bir parçası olarak eklenen, bellek için optimize edilmiş bir veya daha fazla tablodan satırlar içerir. Örneğin, bir satır bellek için iyileştirilmiş T1 tablosundan, bir sonraki satır ise bellek için iyileştirilmiş T2 tablosundan olabilir. Satırlar, veri dosyasına işlem günlüğündeki işlemlerin sırasına göre eklenir ve bu da veri erişiminin sıralı olmasını sağlar. Bu durum, rastgele G/Ç ile karşılaştırıldığında, büyüklük mertebesinde daha iyi G/Ç aktarım hızı sağlar.

Veri dosyası dolduktan sonra, yeni işlemler tarafından eklenen satırlar başka bir veri dosyasında depolanır. Zaman içinde, dayanıklı bellek için iyileştirilmiş tablolardaki satırlar daha fazla veri dosyasından birinde depolanır ve satırlar içeren her veri dosyası kopuk ancak bitişik bir işlem aralığı oluşturur. Örneğin işlem işleme zaman damgası (100, 200) aralığında olan bir veri dosyasında, işleme zaman damgası 100'den büyük ve 200'den küçük veya buna eşit olan işlemler tarafından eklenen tüm satırlar bulunur. İşleme zaman damgası, işlemeye hazır olduğunda işlemeye atanan monoton olarak artan bir sayıdır. Her işlemin benzersiz bir işleme zaman damgası vardır.

Bir satır silindiğinde veya güncelleştirildiğinde, veri dosyasında satır kaldırılmaz veya yerinde değiştirilmez, ancak silinen satırlar başka bir dosya türünde izlenir: delta dosyası. Güncelleştirme işlemleri, her satır için silme ve ekleme işlemlerinin ikili işlem olarak işlenir. Bu, veri dosyasındaki rastgele Giriş/Çıkış işlemlerini ortadan kaldırır.

Boyut: Her veri dosyası, belleği 16 GB'tan büyük bilgisayarlar için yaklaşık 128 MB ve 16 GB'tan küçük veya buna eşit bilgisayarlar için 16 MB olarak boyutlandırılır. SQL Server 2016'da (13.x) depolama alt sisteminin yeterince hızlı olduğunu kabul ederse SQL Server büyük denetim noktası modunu kullanabilir. Büyük denetim noktası modunda, veri dosyaları 1 GB olarak boyutlandırılır. Bu, yüksek aktarım hızına sahip iş yükleri için depolama alt sisteminde daha fazla verimlilik sağlar.

Delta dosyası

Her veri dosyası aynı işlem aralığına sahip bir delta dosyasıyla eşleştirilir ve işlem aralığındaki işlemler tarafından eklenen silinen satırları izler. Bu veriler ve delta dosyası, Denetim Noktası Dosya Çifti (CFP) olarak adlandırılır ve birleştirme işlemlerinin yanı sıra ayırma ve serbest bırakma birimidir. Örneğin, işlem aralığına (100, 200) karşılık gelen bir delta dosyası, aralıktaki işlemler (100, 200) tarafından eklenen silinmiş satırları depolar. Veri dosyaları gibi delta dosyasına da sırayla erişilir.

Bir satır silindiğinde, satır veri dosyasından kaldırılmaz, ancak satıra yapılan referans, bu veri satırının eklendiği işlem aralığıyla ilişkili delta dosyasına eklenmiş olur. Silinecek satır veri dosyasında zaten bulunduğundan, delta dosyası yalnızca başvuru bilgilerini {inserting_tx_id, row_id, deleting_tx_id} depolar ve kaynak silme veya güncelleştirme işlemlerinin işlem günlüğü sırasını izler.

Boyut: Her delta dosyası, belleği 16 GB'tan büyük bilgisayarlar için yaklaşık 16 MB ve 16 GB'tan küçük veya buna eşit bilgisayarlar için 1 MB olarak boyutlandırılır. SQL Server 2016 (13.x) ile başlayarak, SQL Server, depolama alt sisteminin yeterince hızlı olduğunu varsayarsa geniş denetim noktası modunu kullanabilir. Büyük denetim noktası modunda, delta dosyaları 128 MB olarak boyutlandırılır.

Verileri ve delta dosyalarını doldurma

Veriler ve delta dosyası, bellek için iyileştirilmiş tablolarda işlenen işlemler tarafından oluşturulan işlem günlüğü kayıtlarına göre doldurulur ve eklenen ve silinen satırlarla ilgili bilgileri uygun veri ve delta dosyalarına ekler. Denetim noktası tamamlandığında veri/dizin sayfalarının rastgele G/Ç ile boşaltıldığı disk tabanlı tablolardan farklı olarak, bellek için optimize edilmiş tablonun kalıcılığı sürekli bir arka plan işlemi olarak gerçekleşir. Bir işlem önceki herhangi bir işlem tarafından eklenen herhangi bir satırı silebildiği veya güncelleştirebildiği için birden çok delta dosyaya erişilir. Silme bilgileri her zaman delta dosyasının sonuna eklenir. Örneğin, 600 işleme zaman damgasına sahip bir işlem yeni bir satır ekler ve aşağıdaki görüntüde gösterildiği gibi işleme zaman damgası 150, 250 ve 450 olan işlemler tarafından eklenen satırları siler. Dört dosya G/Ç işlemi de (silinen satırlar için üç ve yeni eklenen satırlar için 1) ilgili delta ve veri dosyalarına yalnızca ekleme işlemleridir.

Bellek özellikleri iyileştirilen tabloların okuma günlüğü kayıtlarının ekran görüntüsü.

Verilere ve delta dosyalarına erişme

Aşağıdaki olaylar gerçekleştiğinde veri ve delta dosya çiftlerine erişilir.

Çevrimdışı denetim noktası çalışanları

Bu iş parçacığı, ekleme ve silme işlemlerini bellek ile iyileştirilmiş veri satırlarına ve karşılık gelen veri ve delta dosya çiftlerine ekler. SQL Server 2014 (12.x) bir çevrimdışı denetim noktası çalışanına sahiptir. SQL Server 2016 (13.x) ve sonraki sürümlerin birden çok denetim noktası çalışanı vardır.

Birleştirme işlemi

İşlem bir veya daha fazla veri ve delta dosya çiftini birleştirir ve yeni bir veri ve delta dosya çifti oluşturur.

Çökme sonrası kurtarma sırasında

SQL Server yeniden başlatıldığında veya veritabanı yeniden çevrimiçi olduğunda, bellek için iyileştirilmiş veriler veri ve delta dosya çiftleri kullanılarak doldurulur. Delta dosyası, ilgili veri dosyasındaki satırları okurken silinen satırlar için filtre işlevi görür. Her veri ve delta dosya çifti bağımsız olduğundan, verileri belleğe doldurmak için geçen süreyi azaltmak için bu dosyalar paralel olarak yüklenir. Veriler belleğe yüklendikten sonra, In-Memory OLTP altyapısı henüz denetim noktası dosyalarının kapsamına girmeyen etkin işlem günlüğü kayıtlarını uygular, böylece bellek için iyileştirilmiş veriler tamamlanır.

Geri yükleme işlemi sırasında

In-Memory OLTP denetim noktası dosyaları veritabanı yedeklemesinden oluşturulur ve ardından bir veya daha fazla işlem günlüğü yedeği uygulanır. Çökme kurtarmasında olduğu gibi, In-Memory OLTP motoru da kurtarma süresi üzerindeki etkisini en aza indirmek için verileri paralel olarak belleğe yükler.

Verileri ve delta dosyalarını birleştirme

Bellek için iyileştirilmiş tabloların verileri bir veya daha fazla veri ve delta dosya çiftinde (denetim noktası dosya çifti veya CFP olarak da adlandırılır) depolanır. Veri dosyaları eklenen satırları depolar ve delta dosyaları silinen satırlara başvurur. OLTP iş yükü yürütülürken, DML işlemleri satırları güncelleyip, ekleyip ve sildikçe, yeni satırları kalıcı hale getirmek için yeni CFP'ler oluşturulur ve silinen satırlara referanslar delta dosyalarına eklenir.

Zaman içinde, DML işlemleriyle veri ve delta dosyalarının sayısı artarak disk alanı kullanımının artmasına ve kurtarma süresinin artmasına neden olur.

Bu verimsizlikleri önlemeye yardımcı olmak için, bu makalenin devamında açıklanan birleştirme ilkesine bağlı olarak eski kapalı veriler ve delta dosyaları birleştirilir, bu nedenle depolama dizisi aynı veri kümesini temsil etmek üzere sıkıştırılır ve dosya sayısı azalır.

Birleştirme işlemi, dahili olarak tanımlanmış bir birleştirme ilkesini temel alan veri ve delta dosyası çiftleri (birleştirme kaynağı olarak adlandırılır) olan bir veya daha fazla bitişik kapalı denetim noktası dosya çifti (CFP) girişi olarak alır ve birleştirme hedefi olarak adlandırılan bir sonuç CFP'sini üretir. Kaynak CFP'lerin her delta dosyasındaki girdiler, gerekli olmayan veri satırlarını kaldırmak üzere ilgili veri dosyasındaki satırları filtrelemek için kullanılır. Kaynak CFP'lerdeki kalan satırlar tek bir hedef CFP'de birleştirilir. Birleştirme tamamlandıktan sonra, ortaya çıkan birleştirme hedefi CFP, kaynak CFP'lerin (birleştirme kaynakları) yerini alır. Birleştirme kaynağı CFP'leri, depolama alanından kaldırılmadan önce bir geçiş aşamasından geçer.

Aşağıdaki örnekte, bellek için iyileştirilmiş tablo dosya grubu, önceki işlemlere ait verileri içeren 500 zaman damgasında dört veri ve delta dosya çifti içerir. Örneğin, ilk veri dosyasındaki satırlar zaman damgası 100'den büyük ve 200'den küçük veya 200'e eşit olan işlemlere karşılık gelir; alternatif olarak (100, 200] olarak gösterilir. İkinci ve üçüncü veri dosyalarının, silinmiş olarak işaretlenen satırlar hesaplandıktan sonra yüzde 50'den az dolu olduğu gösterilir. Birleştirme işlemi bu iki CFP'yi birleştirir ve bu iki CFP'nin birleşik aralığı olan 200'den büyük ve 400'den küçük veya buna eşit zaman damgasına sahip işlemleri içeren yeni bir CFP oluşturur. İşlem aralığı (200, 400] için aralığı (500, 600] ve boş olmayan delta dosyası olan başka bir CFP görürseniz, birleştirme işleminin kaynak CFP'lerden daha fazla satır silme dahil olmak üzere işlem etkinliğiyle eşzamanlı olarak gerçekleştirilebileceğini gösterir.

Diyagramda bellek için iyileştirilmiş tablo dosya grubu gösterilir.

Arka plan iş parçacığı, bir birleştirme ilkesi kullanarak tüm kapalı CFP'leri değerlendirir ve ardından uygun CFP'ler için bir veya daha fazla birleştirme isteği başlatır. Bu birleştirme istekleri çevrimdışı kontrol noktası iş parçacığı tarafından işlenir. Birleştirme ilkesinin değerlendirilmesi düzenli aralıklarla ve denetim noktası kapatıldığında yapılır.

SQL Server birleştirme ilkesi

SQL Server aşağıdaki birleştirme ilkesini uygular:

  • Silinen satırlar hesaplandıktan sonra, sonuçta elde edilen satırların hedef boyutta bir CFP'ye sığabilmesi için ardışık iki veya daha fazla CFP birleştirilebiliyorsa birleştirme zamanlanır. Verilerin ve delta dosyalarının hedef boyutu, daha önce açıklandığı gibi özgün boyutlandırmaya karşılık gelir.

  • Veri dosyası hedef boyutun iki katını aşarsa ve satırların yarısından fazlası silinirse tek bir CFP kendi kendine birleştirilebilir. Bir veri dosyası, örneğin tek bir işlem veya birden çok eşzamanlı işlem büyük miktarda veri eklerse veya güncelleştirirse hedef boyuttan daha büyük büyüyebilir ve bir işlem birden çok CFP'ye yayılamadığından veri dosyasını hedef boyutunun ötesine büyümeye zorlayabilir.

Birleştirme ilkesi altında birleştirilecek CFP'leri gösteren bazı örnekler aşağıda verilmiştir:

Bitişik CFP'ler kaynak dosyaları (% dolu) Seçimi birleştir
CFP0 (30%), CFP1 (50%), CFP2 (50%), CFP3 (90%) (CFP0, CFP1)

CFP2, sonuçta elde edilen veri dosyasını ideal boyuttan 100% büyük hale getirdiğinden seçilmez.
CFP0 (30%), CFP1 (20%), CFP2 (50%), CFP3 (10%) (CFP0, CFP1, CFP2). Dosyalar soldan başlayarak seçilir.

CFP3, sonuçta elde edilen veri dosyasını ideal boyuttan 100% büyük hale getirdiğinden seçilmez.
CFP0 (80%), CFP1 (30%), CFP2 (10%), CFP3 (40%) (CFP1, CFP2, CFP3). Dosyalar soldan başlayarak seçilir.

CFP1 ile birlikte kullanıldığında sonuç veri dosyası ideal boyuttan 100% büyük olduğundan CFP0 atlanır.

Kullanılabilir alana sahip tüm CFP'ler birleştirme için uygun değildir. Örneğin, bitişik iki CFP 60% doluysa, bunlar birleştirmeye uygun değildir ve bu CFP'lerin her biri kullanılmayan 40% depolama alanına sahiptir. En kötü senaryoda, tüm CFP'ler %50 doludur, depolama kullanımı yalnızca %50'dir. CFP'ler birleştirme için uygun olmadığından silinen satırlar depolama alanında mevcut olsa da, silinen satırlar bellek içi çöp toplama işlemiyle bellekten zaten kaldırılmış olabilir. Depolama ve bellek yönetimi çöp toplamadan bağımsızdır. Aktif CFP'lerin kullandığı depolama alanı (çünkü tüm CFP'ler güncellenmiyor) bellekteki kalıcı tabloların boyutunun en fazla iki katı olabilir.

CFP'nin yaşam döngüsü

CFP'ler serbest bırakılmadan önce birkaç durumdan geçer. Dosyaları aşamalar arasında geçiş yapmak ve sonuçta artık gerekli olmayan dosyaları temizlemek için veritabanı denetim noktalarının ve günlük yedeklemelerinin gerçekleşmesi gerekir. Bu aşamaların açıklaması için bkz. sys.dm_db_xtp_checkpoint_files.

Çöp toplamayı hızlandırmak için denetim noktasını elle gerçekleştirip ardından kayıt yedeklemesini alabilirsiniz. Üretim senaryolarında, yedekleme stratejisi kapsamında alınan otomatik denetim noktaları ve günlük yedeklemeleri, manuel müdahaleye gerek kalmadan CFP'leri bu aşamalar boyunca sorunsuzca geçirmektedir. Çöp toplama işleminin etkisi, bellek için iyileştirilmiş tablolara sahip veritabanlarının bellekteki boyutuyla karşılaştırıldığında daha büyük bir depolama boyutuna sahip olmasıdır. Denetim noktası ve günlük yedeklemeleri gerçekleşmezse, denetim noktası dosyalarının disk üzerindeki ayak izi büyümeye devam eder.