Aracılığıyla paylaş


Sayfalar ve kapsamlar mimarisi kılavuzu

Şunlar için geçerlidir:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalitik Platform Sistemi (PDW)Microsoft Fabric'te SQL veritabanı

Sayfa, SQL Server'daki temel veri depolama birimidir. Kapsam, fiziksel olarak bitişik sekiz sayfadan oluşan bir koleksiyondur. Kapsamlar sayfaların verimli bir şekilde yönetilmesine yardımcı olur. Bu kılavuz, SQL Server'ın tüm sürümlerinde sayfaları ve kapsamları yönetmek için kullanılan veri yapılarını açıklar. Sayfaların ve kapsamların mimarisini anlamak, verimli performans gösteren veritabanları tasarlamak ve geliştirmek için önemlidir.

Sayfalar ve kapsamlar

SQL Server'daki temel veri depolama birimi sayfadır. Veritabanındaki bir veri dosyasına (.mdf veya .ndf) ayrılan disk alanı mantıksal olarak 0 ile n arasında bitişik olarak numaralandırılmış sayfalara ayrılır. Disk G/Ç işlemleri sayfa düzeyinde gerçekleştirilir. Diğer bir ifadeyle, SQL Server veri sayfalarının tamamını okur veya yazar.

Kapsamlar, fiziksel olarak bitişik sekiz sayfadan oluşan bir koleksiyondur ve sayfaları verimli bir şekilde yönetmek için kullanılır. Tüm sayfalar kapsamlar halinde düzenlenir.

Sayfalar

Normal bir kitapta, tüm içerik sayfalara yazılır. Kitaplara benzer şekilde, SQL Server tüm veri satırlarını sayfalara yazar ve tüm veri sayfaları aynı boyuttadır: 8 KB. Bir kitapta çoğu sayfa, kitabın ana içeriği olan verileri içerir ve bazı sayfalar içerikle ilgili meta verileri (örneğin, içindekiler tablosu ve dizin) içerir. Sql Server da farklı değildir: çoğu sayfada kullanıcılar tarafından depolanan gerçek veri satırları bulunur; bunlar veri sayfaları ve metin/görüntü sayfaları (özel durumlar için) olarak adlandırılır. Dizin sayfaları, verilerin nerede olduğuna ilişkin dizin başvuruları içerir. Son olarak, verilerin organizasyonuyla ilgili çeşitli meta verileri depolayan sistem sayfaları vardır.

Her sayfa, sayfa hakkındaki sistem bilgilerini depolamak için kullanılan 96 baytlık üst bilgiyle başlar. Bu bilgiler sayfa numarasını, sayfa türünü, sayfadaki boş alan miktarını ve sayfanın sahibi olan nesnenin ayırma birimi kimliğini içerir.

Aşağıdaki tabloda, SQL Server veritabanının veri dosyalarında kullanılan sayfa türleri gösterilmektedir.

Sayfa türü İçeriği
Data Satırdaki metin olarak ayarlandığında metin, ntext, görüntü, nvarchar(max), varchar(max), varbinary(max)ve ON verileri dışında tüm verileri içeren veri satırları.
Index Dizin girdileri.
Metin/resim Büyük nesne veri türleri: text, ntext, image, nvarchar(max), varchar(max), varbinary(max)ve xml verileri.

Veri satırı 8 KB'yi aştığında değişken uzunluk sütunları: varchar, nvarchar, varbinary ve sql_variant.
Genel Ayırma Eşlemesi (GAM)

Paylaşılan Genel Ayırma Haritası (SGAM)
Kapsamların ayrılıp ayrılmadığı hakkında bilgi.
Sayfa Boş Alanı (PFS) Sayfa ayırma ve sayfalarda kullanılabilir boş alan hakkında bilgi.
Dizin Ayırma Eşlemesi (IAM) Ayırma birimi başına bir tablo veya dizin tarafından kullanılan kapsamlar hakkında bilgi.
Toplu Değiştirilen Harita (BCM) Ayırma birimi başına son BACKUP LOG deyimden sonra toplu işlemler tarafından değiştirilen kapsamlar hakkında bilgi.
Değişiklik Değiştirilmiş Harita (DCM) Ayırma birimi başına son BACKUP DATABASE deyimden sonra değişen kapsamlar hakkında bilgi.

Uyarı

Günlük dosyaları sayfa içermez. Sabit boyutu olmayan bir dizi günlük kaydı içerir.

Veri satırları, üst bilgiden hemen sonra başlayarak sayfada seri olarak depolanır. Satır uzaklığı tablosu sayfanın sonunda başlar ve her satır kaydırma tablosu sayfadaki her satır için bir giriş içerir. Her satır uzaklığı girdisi, satırın ilk baytının sayfanın başından ne kadar uzakta olduğunu depolar. Bu nedenle, satır uzaklığı tablosunun işlevi SQL Server'ın sayfadaki satırları hızla bulmasına yardımcı olmaktır. Satır uzaklığı tablosundaki girdiler, sayfadaki satırların dizisinden ters sıradadır.

SQL Server veri sayfasının diyagramı.

Büyük satır desteği

Satırlar sayfalara yayılamaz; ancak, satırın bölümleri satırın sayfasından taşınabileceğinden, satır çok büyük olabilir. Sayfadaki tek bir satırda yer alan en fazla veri ve ek yük miktarı 8.060 bayttır. Bu, metin/resim sayfa türünde depolanan verileri içermez.

Bu kısıtlama , varchar, nvarchar, varbinary veya sql_variant sütunları içeren tablolar için gevşetilir. Bir tablodaki tüm sabit ve değişken sütunların toplam satır boyutu 8.060 bayt sınırlamasını aştığında, SQL Server en büyük genişliğe sahip sütundan başlayarak bir veya daha fazla değişken uzunluğundaki sütunu dinamik olarak ROW_OVERFLOW_DATA ayırma birimindeki sayfalara taşır.

Bu, bir ekleme veya güncelleştirme işlemi satırın toplam boyutunu 8.060 bayt sınırının ötesine her yükseltildiğinde yapılır. Bir sütun ROW_OVERFLOW_DATA ayırma birimindeki bir sayfaya taşındığında, IN_ROW_DATA ayırma birimindeki özgün sayfada 24 baytlık bir işaretçi korunur. Sonraki bir işlem satır boyutunu küçültürse, SQL Server sütunları dinamik olarak özgün veri sayfasına geri taşır.

Satır taşmasıyla ilgili dikkat edilmesi gerekenler

Satır birden çok sayfada bulunamaz ve değişken uzunluktaki veri türü alanlarının birleşik boyutu 8060 bayt sınırını aşarsa taşabilir. Göstermek için, bir tablo iki sütunla oluşturulabilir: biri varchar(7000) ve diğeri varchar (2000). Her iki sütun da ayrı ayrı 8060 baytı aşmaz, ancak birleştirilmiş her sütunun genişliğinin tamamı doldurulduğunda bunu yapabilir. SQL Server , varchar(7000) değişken uzunluğu sütununu ROW_OVERFLOW_DATA ayırma birimindeki sayfalara dinamik olarak taşıyabilir. Satır başına 8.060 bayt'ı aşan varchar, nvarchar, varbinary veya sql_variant ya da CLR kullanıcı tanımlı tür sütunlarını birleştirdiğinizde aşağıdakileri göz önünde bulundurun:

  • Büyük kayıtların başka bir sayfaya taşınması, güncelleştirme işlemlerine göre kayıtlar uzatıldığında dinamik olarak gerçekleşir. Kayıtları kısaltan güncelleştirme işlemleri, kayıtların IN_ROW_DATA ayırma birimindeki özgün sayfaya geri taşınmasına neden olabilir.

    Satır taşması verileri içeren büyük kayıtlarda sıralamalar veya birleştirmeler gibi diğer seçme işlemlerini sorgulamak ve gerçekleştirmek, bu kayıtlar zaman uyumsuz olarak değil zaman uyumsuz olarak işlendiği için işlem süresini yavaşlatıyor.

    Bu nedenle, birden çok varchar, nvarchar, varbinary veya sql_variant ya da CLR kullanıcı tanımlı tür sütunları içeren bir tablo tasarlarken, akma olasılığı olan satırların yüzdesini ve bu taşma verilerinin sorgulanma sıklığını göz önünde bulundurun. Satır taşması verilerinin birçok satırında sık sık sorgular olması olasılığı varsa, bazı sütunların başka bir tabloya taşınması için tabloyu normalleştirmeyi göz önünde bulundurun. Bu daha sonra zaman uyumsuz JOIN bir işlemde sorgulanabilir.

  • Tek tek sütunların uzunluğu yine de varchar, nvarchar, varbinary veya sql_variant ve CLR kullanıcı tanımlı tür sütunları için 8.000 bayt sınırı içinde olmalıdır. Yalnızca birleşik uzunlukları tablonun 8.060 baytlık satır sınırını aşabilir.

  • Char ve nchar verileri de dahil olmak üzere diğer veri türü sütunlarının toplamı 8.060 baytlık satır sınırına girmelidir. Büyük nesne verileri de 8.060 baytlık satır sınırından muaftır.

  • Kümelenmiş dizinin dizin anahtarı, ROW_OVERFLOW_DATA ayırma biriminde var olan verileri içeren varchar sütunları içeremez. Bir varchar sütununda kümelenmiş dizin oluşturulursa ve mevcut veriler IN_ROW_DATA ayırma birimindeyse, sütunda verileri satır dışına gönderebilecek sonraki ekleme veya güncelleştirme eylemleri başarısız olur. Ayırma birimleri hakkında daha fazla bilgi için bkz. SQL Server ve Azure SQL dizin mimarisi ve tasarım kılavuzu.

  • Satır taşması verilerini içeren sütunları, kümelenmemiş bir dizinin anahtar veya anahtar olmayan sütunları olarak ekleyebilirsiniz.

  • Seyrek sütun kullanan tablolar için kayıt boyutu sınırı 8.018 bayttır. Dönüştürülen veriler ve mevcut kayıt verileri 8.018 baytı aştığında MSSQLSERVER ERROR 576 döndürülür. Sütunlar seyrek ve seyrek olmayan türler arasında dönüştürüldüğünde, Veritabanı Altyapısı geçerli kayıt verilerinin bir kopyasını tutar. Bu, kayıt için gereken depolama alanını geçici olarak ikiye katlar.

  • Satır taşması verileri içerebilecek tablolar veya dizinler hakkında bilgi edinmek için sys.dm_db_index_physical_stats dinamik yönetim işlevini kullanın.

Kapsam

Kapsamlar, alanın yönetildiği temel birimdir. Kapsam, fiziksel olarak bitişik sekiz sayfa veya 64 KB'tır. Bu, SQL Server veritabanlarının megabayt başına 16 uzantıya sahip olduğu anlamına gelir.

SQL Server'ın iki tür kapsamı vardır:

  • Tekdüzen uzantılar tek bir nesneye aittir; bu ölçüdeki sekiz sayfanın tümü yalnızca sahibi olan nesne tarafından kullanılabilir.
  • Karma kapsamlar en fazla sekiz nesne tarafından paylaşılır. Ölçüdeki sekiz sayfanın her biri farklı bir nesneye sahip olabilir.

Tekdüzen ve karma kapsamları gösteren diyagram.

SQL Server 2014 (12.x) dahil olmak üzere veritabanı altyapısı, az miktarda veri içeren tablolara tüm kapsamları ayırmaz. Yeni bir tablo veya dizin genellikle sayfaları karma kapsamlardan ayırır. Tablo veya dizin sekiz sayfa olacak şekilde büyüdüğünde, sonraki ayırmalar için tekdüzen kapsamlar kullanmaya geçer. Dizinde sekiz sayfa oluşturmak için yeterli satırı olan mevcut bir tabloda dizin oluşturursanız, dizine yapılan tüm ayırmalar tekdüzen kapsamlarda olur.

SQL Server 2016'dan (13.x) başlayarak, kullanıcı veritabanındaki çoğu ayırma için varsayılan değerdir ve tempdbIAM zincirinin ilk sekiz sayfasında yer alan ayırmalar dışında tekdüzen kapsamlar kullanmaktır. , masterve msdb veritabanları için modelayırmalar önceki davranışı korur.

Uyarı

SQL Server'da, SQL Server 2014 (12.x) ile birlikte varsayılan ayırmayı her zaman tekdüzen kapsamları kullanacak şekilde değiştirmek için izleme bayrağı (TF) 1118'i kullanabilirsiniz. Bu izleme bayrağı hakkında daha fazla bilgi için bkz. izleme bayrağı 1118.

SQL Server 2016'dan (13.x) başlayarak, TF 1118 tarafından sağlanan işlevsellik ve tüm kullanıcı veritabanları için tempdb otomatik olarak etkinleştirilir. Kullanıcı veritabanları için bu davranış, varsayılan değeri olarak ayarlanmış SET MIXED_PAGE_ALLOCATIONolan seçeneği ALTER DATABASEtarafından OFF denetlenir ve TF 1118'in hiçbir etkisi yoktur. Daha fazla bilgi için bkz. ALTER DATABASE SET seçenekleri.

SQL Server 2012'den (11.x) sys.dm_db_database_page_allocations başlayarak sistem işlevi bir veritabanı, tablo, dizin ve bölüm için sayfa ayırma bilgilerini raporlayabilir.

Önemli

sys.dm_db_database_page_allocations Sistem işlevi belgelenmez ve değiştirilebilir. Uyumluluk garanti değildir.

SQL Server 2019 (15.x) ile başlayarak sys.dm_db_page_info sistem işlevi kullanılabilir ve veritabanındaki bir sayfa hakkında bilgi döndürür. İşlev, , ve object_iddahil olmak üzere index_idpartition_idsayfadaki üst bilgi bilgilerini içeren bir satır döndürür. Bu işlev çoğu durumda kullanım DBCC PAGE gereksiniminin yerini alır.

Kapsam ayırmalarını ve boş alanı yönetme

Kapsam ayırmalarını yöneten ve boş alanı izleyen SQL Server veri yapıları görece basit bir yapıya sahiptir. Bunun aşağıdaki avantajları vardır:

  • Boş alan bilgileri yoğun bir şekilde paketlendiğinden, nispeten az sayfa bu bilgileri içerir.

    Bu, ayırma bilgilerini almak için gereken disk okuma sayısını azaltarak hızı artırır. Bu, ayırma sayfalarının bellekte kalma olasılığını da artırır ve daha fazla okuma gerektirmez.

  • Ayırma bilgilerinin çoğu birbirine zincirlenmez. Bu, ayırma bilgilerinin bakımını basitleştirir.

    Her sayfa ayırma veya serbest bırakma işlemi hızlı bir şekilde gerçekleştirilebilir. Bu, sayfaları ayırmak veya serbest bırakmak zorunda olan eşzamanlı görevler arasındaki çekişmeyi azaltır.

Kapsam ayırmalarını yönetme

SQL Server, kapsam ayırmayı kaydetmek için iki tür ayırma eşlemesi kullanır:

  • Genel Ayırma Eşlemesi (GAM)

    GAM sayfaları hangi kapsamların ayrıldığını kaydeder. Her GAM 64.000 uzantıyı veya neredeyse 4 gigabayt (GB) veriyi kapsar. GAM' ın kapsadığı aralıktaki her kapsam için 1 bit vardır. Bit ise 1, uzantı ücretsizdir; bit ise 0, kapsam ayrılır.

  • Paylaşılan Genel Ayırma Haritası (SGAM)

    SGAM sayfaları, hangi uzantıların şu anda karma kapsamlar olarak kullanıldığını ve en az bir kullanılmayan sayfa olduğunu kaydeder. Her SGAM 64.000 uzantıyı veya neredeyse 4 GB'lık verileri kapsar. SGAM' nin kapsadığı aralıktaki her kapsam için 1 bit vardır. Bit ise 1, uzantı karma bir kapsam olarak kullanılır ve ücretsiz bir sayfaya sahiptir. Bit ise 0, kapsam karma kapsam olarak kullanılmaz veya karma bir kapsamdır ve tüm sayfaları kullanılır.

Her uzantının GAM ve SGAM'de geçerli kullanımına göre ayarlanmış aşağıdaki bit desenleri vardır.

Geçerli kapsam kullanımı GAM bit ayarı SGAM bit ayarı
Ücretsiz, kullanılmıyor 1 0
Tekdüzen kapsam veya tam karma kapsam 0 0
Ücretsiz sayfalarla karma kapsam 0 1

Bu, basit kapsam yönetimi algoritmalarına neden olur.

  • Tekdüzen bir kapsam ayırmak için, Veritabanı Altyapısı GAM'da bir 1 bit arar ve olarak 0ayarlar.
  • Veritabanı Altyapısı, ücretsiz sayfalarla karışık bir kapsam bulmak için SGAM'de biraz 1 arar.
  • Karma bir kapsam ayırmak için Veritabanı Altyapısı GAM'da bir 1 bit arar, bunu olarak 0ayarlar ve ardından SGAM'deki ilgili biti olarak 1ayarlar.
  • Bir kapsamı serbest bırakmak için Veritabanı Altyapısı, GAM bitinin olarak, 1SGAM bitinin ise olarak 0ayarlandığından emin olur.

Veritabanı Altyapısı verileri veritabanında eşit olarak dağıttığı için, Veritabanı Altyapısı tarafından dahili olarak kullanılan algoritmalar bu makalede açıklanandan daha karmaşıktır. Ancak, gerçek algoritmalar bile kapsam ayırma bilgileri zincirlerini yönetmek zorunda kalmadan basitleştirilir.

Boş alanı izleme

Sayfa Boş Alanı (PFS) sayfaları her sayfanın ayırma durumunu, ayrı bir sayfanın ayrılıp ayrılmadığını ve her sayfada boş alan miktarını kaydeder. PFS'de her sayfa için 1 bayt vardır; sayfanın ayrılıp ayrılmadığını kaydeder ve boşsa, yüzde 1 ile 50 arasında dolu, yüzde 51 ile 80 arasında dolu, yüzde 81 ile 95 arasında dolu veya yüzde 96 ile 100 arasında doludur.

Bir nesneye bir kapsam ayrıldıktan sonra, Veritabanı Altyapısı, ne ölçüde hangi sayfaların ayrıldığını veya ücretsiz olduğunu kaydetmek için PFS sayfalarını kullanır. Bu bilgiler, Veritabanı Altyapısı'nın yeni bir sayfa ayırması gerektiğinde kullanılır. Bir sayfadaki boş alan miktarı yalnızca yığın ve metin/resim sayfaları için korunur. Veritabanı Altyapısı'nın yeni eklenen bir satırı tutmak için kullanılabilir boş alanı olan bir sayfa bulması gerektiğinde kullanılır. Dizinler sayfa boş alanının izlenmesini gerektirmez, çünkü yeni satırın eklendiği nokta dizin anahtarı değerleri tarafından ayarlanır.

İzlediği her ek aralık için veri dosyasına yeni bir PFS, GAM veya SGAM sayfası eklenir. Bu nedenle, ilk PFS sayfasından sonra yeni bir PFS sayfası 8.088 sayfa ve sonraki 8.088 sayfa aralıklarında ek PFS sayfaları vardır. Göstermek için, sayfa kimliği 1 bir PFS sayfası, sayfa kimliği 8088 bir PFS sayfası, sayfa kimliği 16176 bir PFS sayfası vb.

İlk GAM sayfasından 64.000 uzantı sonra yeni bir GAM sayfası vardır ve bunu izleyen 64.000 uzantıyı izler; dizisi 64.000 uzantılı aralıklarla devam eder. Benzer şekilde, ilk SGAM sayfasından sonra 64.000 uzantılı yeni bir SGAM sayfası ve sonraki 64.000 kapsam aralığında ek SGAM sayfaları vardır.

Aşağıdaki çizimde, Veritabanı Altyapısı tarafından kapsamları ayırmak ve yönetmek için kullanılan sayfaların sırası gösterilmektedir.

Kapsamları yönetmek için sayfaların sırasını gösteren diyagram.

Nesneler tarafından kullanılan alanı yönetme

Dizin Ayırma Eşlemesi (IAM) sayfası, ayırma birimi tarafından kullanılan veritabanı dosyasının 4 GB'lık bir bölümündeki kapsamları eşler. Ayırma birimi üç türden biridir:

  • IN_ROW_DATA

    Bir yığının veya dizinin bir bölümünü tutar.

  • LOB_DATA

    Xml, varbinary(max) ve varchar(max) gibi büyük nesne (LOB) veri türlerini tutar.

  • ROW_OVERFLOW_DATA

    8.060 bayt satır boyutu sınırını aşan varchar, nvarchar, varbinary veya sql_variant sütunlarında depolanan değişken uzunluğu verilerini tutar.

Bir yığın veya dizinin her bölümü en az bir IN_ROW_DATA ayırma birimi içerir. Yığına veya dizin şemasına bağlı olarak bir LOB_DATA veya ROW_OVERFLOW_DATA ayırma birimi de içerebilir.

IAM sayfası, bir dosyadaki 4 GB aralığı kapsar ve GAM veya SGAM sayfasıyla aynı kapsama sahiptir. Ayırma birimi birden fazla dosyadan veya bir dosyanın birden fazla 4 GB aralığından kapsamlar içeriyorsa, bir IAM zincirinde bağlantılı birden çok IAM sayfası olacaktır. Bu nedenle, her ayırma biriminin, uzantılara sahip olduğu her dosya için en az bir IAM sayfası vardır. Ayırma birimine ayrılan dosyadaki kapsamların aralığı tek bir IAM sayfasının kaydedebileceği aralığı aşarsa, dosyada birden fazla IAM sayfası da olabilir.

IAM sayfalarının dağılımını gösteren diyagram.

IAM sayfaları her ayırma birimi için gerektiği gibi ayrılır ve dosyada rastgele bulunur. Sistem sys.system_internals_allocation_units görünümü, ayırma biriminin ilk IAM sayfasını gösterir. Bu ayırma biriminin tüm IAM sayfaları bir IAM zincirine bağlanır.

Önemli

Sistem sys.system_internals_allocation_units görünümü yalnızca dahili kullanım içindir ve değiştirilebilir. Uyumluluk garanti değildir. Bu görünüm Azure SQL Veritabanı'nda kullanılamaz.

Ayırma birimi başına zincire bağlı IAM sayfalarını gösteren diyagram.

IAM sayfasında, IAM sayfasıyla eşlenen kapsam aralığının başlangıç kapsamını gösteren bir üst bilgi bulunur. IAM sayfasında ayrıca her bitin bir kapsamı temsil ettiği büyük bir bit eşlem bulunur. Haritadaki ilk bit aralıktaki ilk kapsamı, ikinci bit ikinci kapsamı temsil eder ve bu şekilde devam eder. Bit ise 0, temsil ettiği kapsam IAM'ye sahip ayırma birimine ayrılmaz. Bit ise 1, temsil ettiği kapsam IAM sayfasına sahip ayırma birimine ayrılır.

Veritabanı Altyapısı'nın yeni bir satır eklemesi gerektiğinde ve geçerli sayfada kullanılabilir alan olmadığında, IAM ve PFS sayfalarını kullanarak ayrılacak bir sayfayı veya yığın veya metin/resim sayfası için satırı tutmak için yeterli alana sahip bir sayfa bulur. Veritabanı Altyapısı, ayırma birimine ayrılan kapsamları bulmak için IAM sayfalarını kullanır. Veritabanı Altyapısı her kapsam için PFS sayfalarında arama yapabilir ve kullanılabilecek bir sayfa olup olmadığını görür. Her IAM ve PFS sayfası birçok veri sayfasını kapsar, bu nedenle veritabanında birkaç IAM ve PFS sayfası vardır. Bu, IAM ve PFS sayfalarının genellikle SQL Server arabellek havuzunda bellekte olduğu ve bu nedenle hızlı bir şekilde aranabileceği anlamına gelir. Dizinler için, yeni satırın ekleme noktası dizin anahtarı tarafından ayarlanır, ancak yeni bir sayfa gerektiğinde, daha önce açıklanan işlem gerçekleşir.

Veritabanı Altyapısı, bir ayırma birimine yeni bir kapsam ayırır, ancak eklenen satırı tutmak için yeterli alanı olan mevcut bir ölçüdeki bir sayfayı hızlı bir şekilde bulamaz.

Orantılı dolgu ayırma

Veritabanı Altyapısı, orantılı bir dolgu ayırma algoritması kullanarak dosya grubunda bulunanlardan kapsamlar ayırır. İki dosya içeren aynı dosya grubunda, bir dosyada diğer dosyayla iki kat boş alan varsa, dosyadan diğer dosyadan ayrılan her sayfa için kullanılabilir alan içeren iki sayfa ayrılır. Bu, bir dosya grubundaki her dosyanın kullanılan alanın benzer bir yüzdesine sahip olması gerektiği anlamına gelir.

Değiştirilen kapsamları izleme

SQL Server, toplu kopyalama işlemleri tarafından değiştirilen uzantıları ve son tam yedeklemeden sonra değiştirilen uzantıları izlemek için iki iç veri yapısı kullanır. Bu veri yapıları fark yedeklemelerini büyük ölçüde hızlandırıyor. Ayrıca bir veritabanı toplu günlüğe kaydedilen kurtarma modelini kullanırken toplu kopyalama işlemlerinin günlüğe kaydedilmesini hızlandırırlar. GAM ve SGAM sayfaları gibi bu yapılar da her bitin tek bir kapsamı temsil ettiği bit eşlemlerdir.

  • Değişiklik Değiştirilmiş Harita (DCM)

    Bu, son BACKUP DATABASE deyimden sonra değişen kapsamları izler. Bir uzantının biti ise 1, uzantı son BACKUP DATABASE deyiminden sonra değiştirilmiştir. Bit ise 0, kapsam değiştirilmemiştir.

    Değişiklik yedekleri, hangi uzantıların değiştirildiğini belirlemek için yalnızca DCM sayfalarını okur. Bu, değişiklik yedeğinin taraması gereken sayfa sayısını büyük ölçüde azaltır. Değişiklik yedeklemesinin çalıştırılma süresi, veritabanının genel boyutuyla değil, son BACKUP DATABASE deyimden bu yana değiştirilen kapsam sayısıyla orantılıdır.

  • Toplu Değiştirilen Harita (BCM)

    Bu, son BACKUP LOG deyimden bu yana toplu günlüğe kaydedilen işlemler tarafından değiştirilen uzantıları izler. Bir uzantının biti ise 1, uzantı, son BACKUP LOG deyimden sonra toplu günlüğe kaydedilen bir işlem tarafından değiştirilmiştir. Bit ise 0, kapsam toplu günlüğe kaydedilen işlemler tarafından değiştirilmemiştir.

    BCM sayfaları tüm veritabanlarında görünse de, bunlar yalnızca veritabanı toplu günlüğe kaydedilen kurtarma modelini kullandığında geçerlidir. Bu kurtarma modelinde, bir BACKUP LOG gerçekleştirildiğinde yedekleme işlemi değiştirilmiş olan uzantılar için BCM'leri tarar. Ardından bu kapsamları günlük yedeklemesine ekler. Bu, veritabanı bir veritabanı yedeklemesinden ve işlem günlüğü yedekleme dizisinden geri yüklenirse toplu günlüğe kaydedilen işlemleri kurtarır. Toplu günlüğe kaydedilen hiçbir işlem günlüğe kaydedilmediğinden, BCM sayfaları basit kurtarma modelini kullanan bir veritabanında ilgili değildir. Bu kurtarma modeli toplu günlüğe kaydedilen işlemleri tam olarak günlüğe kaydedilen işlemler olarak değerlendirdiğinden, bunlar tam kurtarma modelini kullanan bir veritabanında ilgili değildir.

DCM sayfaları ile BCM sayfaları arasındaki aralık, 64.000 uzantılı GAM ve SGAM sayfası arasındaki aralıkla aynıdır. DCM ve BCM sayfaları, fiziksel bir dosyada GAM ve SGAM sayfalarının arkasında aşağıdaki gibi bulunur:

Özel sayfaların aralık dağılımını gösteren diyagram.