Bagikan melalui


Panduan arsitektur halaman dan luas

Berlaku untuk: SQL Server Azure SQL Database Azure SQL Managed Instance Azure Synapse Analytics Analytics Platform System (PDW)

Halaman ini adalah unit dasar penyimpanan data di SQL Server. Luasnya adalah kumpulan delapan halaman yang berdekatan secara fisik. Jangkauan membantu mengelola halaman secara efisien. Panduan ini menjelaskan struktur data yang digunakan untuk mengelola halaman dan jangkauan di semua versi SQL Server. Memahami arsitektur halaman dan tingkat penting untuk merancang dan mengembangkan database yang berkinerja efisien.

Halaman dan jangkauan

Unit dasar penyimpanan data di SQL Server adalah halaman . Ruang disk yang dialokasikan ke file data (.mdf atau .ndf) dalam database dibagi secara logis menjadi halaman bernomor berdekatan dari 0 hingga n. Operasi I/O disk dilakukan pada tingkat halaman. Artinya, SQL Server membaca atau menulis seluruh halaman data.

Ekstensi adalah kumpulan delapan halaman yang berdekatan secara fisik dan digunakan untuk mengelola halaman secara efisien. Semua halaman diatur ke dalam jangkauan.

Halaman

Dalam buku biasa, semua konten ditulis di halaman. Mirip dengan buku, SQL Server menulis semua baris data di halaman, dan semua halaman data berukuran sama: 8 KB. Dalam buku, sebagian besar halaman berisi data - konten utama buku - dan beberapa halaman berisi metadata tentang konten (misalnya, daftar isi dan indeks). Sekali lagi, SQL Server tidak berbeda: sebagian besar halaman berisi baris data aktual yang disimpan oleh pengguna; ini disebut halaman data dan halaman teks/gambar (untuk kasus khusus). Halaman indeks berisi referensi indeks tentang di mana data berada. Terakhir, ada halaman sistem yang menyimpan berbagai metadata tentang organisasi data.

Setiap halaman dimulai dengan header 96-byte yang digunakan untuk menyimpan informasi sistem tentang halaman. Informasi ini mencakup nomor halaman, jenis halaman, jumlah ruang kosong di halaman, dan ID unit alokasi objek yang memiliki halaman.

Tabel berikut ini memperlihatkan tipe halaman yang digunakan dalam file data database SQL Server.

Jenis halaman Konten
Data Baris data dengan semua data, kecuali teks, ntext, gambar, nvarchar(max), varchar(max), varbinary(max), dan data xml , saat teks dalam baris diatur ke AKTIF.
Indeks Entri indeks.
Teks/gambar Jenis data objek besar: teks, ntext, gambar, nvarchar(max), varchar(max), varbinary(max), dan data xml .

Kolom panjang variabel saat baris data melebihi 8 KB: varchar, nvarchar, varbinary, dan sql_variant.
Peta Alokasi Global (GAM)

Peta Alokasi Global Bersama (SGAM)
Informasi tentang apakah tingkatan dialokasikan.
Ruang Kosong Halaman (PFS) Informasi tentang alokasi halaman dan ruang kosong yang tersedia di halaman.
Peta Alokasi Indeks (IAM) Informasi tentang tingkat yang digunakan oleh tabel atau indeks per unit alokasi.
Peta yang Diubah Secara Massal (BCM) Informasi tentang tingkat yang dimodifikasi oleh operasi massal sejak pernyataan LOG BACKUP terakhir per unit alokasi.
Peta yang Diubah Diferensial (DCM) Informasi tentang tingkat yang telah berubah sejak pernyataan DATABASE CADANGAN terakhir per unit alokasi.

Catatan

File log tidak berisi halaman. Mereka berisi serangkaian rekaman log yang tidak memiliki ukuran tetap.

Baris data disimpan di halaman secara serial, dimulai segera setelah header. Tabel offset baris dimulai di akhir halaman, dan setiap tabel offset baris berisi satu entri untuk setiap baris di halaman. Setiap entri offset baris menyimpan seberapa jauh byte pertama baris dari awal halaman. Dengan demikian, fungsi tabel offset baris adalah untuk membantu SQL Server menemukan baris di halaman dengan cepat. Entri dalam tabel offset baris berada dalam urutan terbalik dari urutan baris di halaman.

Diagram halaman data SQL Server.

Dukungan baris besar

Baris tidak dapat menjangkau halaman; namun, bagian baris dapat dipindahkan dari halaman baris, sehingga baris bisa sangat besar. Jumlah maksimum data dan overhead yang terkandung dalam satu baris pada halaman adalah 8.060 byte. Ini tidak menyertakan data yang disimpan dalam jenis halaman teks/gambar.

Pembatasan ini dilonggarkan untuk tabel yang berisi kolom varchar, nvarchar, varbinary, atau sql_variant . Ketika ukuran baris total semua kolom tetap dan variabel dalam tabel melebihi batasan 8.060 byte, SQL Server secara dinamis memindahkan satu atau beberapa kolom panjang variabel ke halaman di unit alokasi ROW_OVERFLOW_DATA, dimulai dengan kolom dengan lebar terbesar.

Ini dilakukan setiap kali operasi penyisipan atau pembaruan meningkatkan ukuran total baris di luar batas 8.060 byte. Saat kolom dipindahkan ke halaman di unit alokasi ROW_OVERFLOW_DATA, penunjuk 24 byte pada halaman asli di unit alokasi IN_ROW_DATA dipertahankan. Jika operasi berikutnya mengurangi ukuran baris, SQL Server secara dinamis memindahkan kolom kembali ke halaman data asli.

Pertimbangan luapan baris

Baris tidak dapat berada di beberapa halaman, dan dapat meluap jika ukuran gabungan bidang tipe data dengan panjang variabel melebihi batas 8060 byte. Untuk mengilustrasikan, tabel dapat dibuat dengan dua kolom: satu varchar(7000) dan varchar lain (2000). Satu per satu tidak ada kolom yang melebihi 8060 byte, tetapi gabungan mereka dapat melakukannya jika seluruh lebar setiap kolom diisi. SQL Server mungkin secara dinamis memindahkan kolom panjang variabel varchar(7000) ke halaman di unit alokasi ROW_OVERFLOW_DATA. Saat Anda menggabungkan kolom jenis varchar, nvarchar, varbinary, atau sql_variant, atau CLR yang ditentukan pengguna yang melebihi 8.060 byte per baris, pertimbangkan hal berikut:

  • Memindahkan rekaman besar ke halaman lain terjadi secara dinamis karena rekaman diperpanjang berdasarkan operasi pembaruan. Operasi pembaruan yang mempersingkat rekaman dapat menyebabkan rekaman dipindahkan kembali ke halaman asli di unit alokasi IN_ROW_DATA.

    Mengkueri dan melakukan operasi pemilihan lainnya, seperti pengurutan atau gabungan pada rekaman besar yang berisi data luapan baris memperlambat waktu pemrosesan, karena rekaman ini diproses secara sinkron alih-alih secara asinkron.

    Oleh karena itu, ketika Anda merancang tabel dengan beberapa kolom jenis varchar, nvarchar, varbinary, atau sql_variant, atau CLR yang ditentukan pengguna, pertimbangkan persentase baris yang cenderung mengalir dan frekuensi data luapan ini kemungkinan akan dikueri. Jika kemungkinan ada kueri yang sering pada banyak baris data luapan baris, pertimbangkan untuk menormalkan tabel sehingga beberapa kolom dipindahkan ke tabel lain. Ini kemudian dapat dikueri dalam operasi JOIN asinkron.

  • Panjang kolom individual masih harus berada dalam batas 8.000 byte untuk kolom jenis varchar, nvarchar, varbinary, atau sql_variant, dan CLR yang ditentukan pengguna. Hanya panjang gabungannya yang dapat melebihi batas baris 8.060 byte tabel.

  • Jumlah kolom jenis data lainnya, termasuk data karakter dan nchar , harus berada dalam batas baris 8.060 byte. Data objek besar juga dikecualikan dari batas baris 8.060 byte.

  • Kunci indeks indeks berkluster tidak boleh berisi kolom varchar yang memiliki data yang ada di unit alokasi ROW_OVERFLOW_DATA. Jika indeks berkluster dibuat pada kolom varchar dan data yang ada berada di unit alokasi IN_ROW_DATA, tindakan sisipkan atau perbarui berikutnya pada kolom yang akan mendorong data di luar baris akan gagal. Untuk informasi selengkapnya tentang unit alokasi, lihat panduan arsitektur dan desain indeks SQL Server dan Azure SQL.

  • Anda dapat menyertakan kolom yang berisi data luapan baris sebagai kolom kunci atau nonkuntal dari indeks nonkluster.

  • Batas ukuran rekaman untuk tabel yang menggunakan kolom jarang adalah 8.018 byte. Ketika data yang dikonversi ditambah data rekaman yang ada melebihi 8.018 byte, MSSQLSERVER ERROR 576 dikembalikan. Saat kolom dikonversi antara jenis jarang dan tidak jarang, Mesin Database menyimpan salinan data rekaman saat ini. Ini untuk sementara menggandakan penyimpanan yang diperlukan untuk rekaman.

  • Untuk mendapatkan informasi tentang tabel atau indeks yang mungkin berisi data luapan baris, gunakan fungsi manajemen dinamis sys.dm_db_index_physical_stats .

Tingkat

Jangkauan adalah unit dasar tempat ruang dikelola. Luasnya adalah delapan halaman yang berdekatan secara fisik, atau 64 KB. Ini berarti bahwa database SQL Server memiliki 16 tingkat per megabyte.

SQL Server memiliki dua jenis ekstensi:

  • Tingkat seragam dimiliki oleh satu objek; semua delapan halaman sejauh hanya dapat digunakan oleh objek pemilik.
  • Tingkat campuran dibagikan hingga delapan objek. Masing-masing dari delapan halaman sejauh ini dapat dimiliki oleh objek yang berbeda.

Diagram memperlihatkan tingkat seragam dan campuran.

Hingga, dan termasuk, SQL Server 2014 (12.x), Mesin Database tidak mengalokasikan seluruh jangkauan ke tabel dengan sejumlah kecil data. Tabel atau indeks baru umumnya mengalokasikan halaman dari tingkat campuran. Ketika tabel atau indeks tumbuh ke titik delapan halaman, tabel atau indeks kemudian beralih untuk menggunakan tingkat seragam untuk alokasi berikutnya. Jika Anda membuat indeks pada tabel yang sudah ada yang memiliki cukup baris untuk menghasilkan delapan halaman dalam indeks, semua alokasi ke indeks berada dalam tingkat yang seragam.

Dimulai dengan SQL Server 2016 (13.x), default untuk sebagian besar alokasi dalam database pengguna dan tempdb menggunakan tingkat seragam, kecuali untuk alokasi milik delapan halaman pertama rantai IAM. Alokasi untuk masterdatabase , msdb, dan model masih mempertahankan perilaku sebelumnya.

Catatan

Di SQL Server, hingga dan termasuk SQL Server 2014 (12.x), Anda dapat menggunakan bendera pelacakan (TF) 1118 untuk mengubah alokasi default agar selalu menggunakan tingkat seragam. Untuk informasi selengkapnya tentang bendera pelacakan ini, lihat DBCC TRACEON - Lacak Bendera.

Dimulai dengan SQL Server 2016 (13.x), fungsionalitas yang disediakan oleh TF 1118 secara otomatis diaktifkan untuk tempdb dan semua database pengguna. Untuk database pengguna, perilaku ini dikontrol oleh SET MIXED_PAGE_ALLOCATION opsi ALTER DATABASE, dengan nilai default diatur ke NONAKTIF, dan TF 1118 tidak berpengaruh. Untuk mengetahui informasi selengkapnya, lihat Opsi MENGUBAH HIMPUNAN DATA.

Dimulai dengan SQL Server 2012 (11.x), sys.dm_db_database_page_allocations fungsi sistem dapat melaporkan informasi alokasi halaman untuk database, tabel, indeks, dan partisi.

Penting

Fungsi sys.dm_db_database_page_allocations sistem tidak didokumenkan dan dapat berubah. Kompatibilitas tidak dijamin.

Dimulai dengan SQL Server 2019 (15.x), fungsi sistem sys.dm_db_page_info tersedia dan mengembalikan informasi tentang halaman dalam database. Fungsi mengembalikan satu baris yang berisi informasi header dari halaman, termasuk object_id, , index_iddan partition_id. Fungsi ini menggantikan kebutuhan untuk digunakan DBCC PAGE dalam banyak kasus.

Mengelola alokasi dan ruang kosong yang luas

Struktur data SQL Server yang mengelola alokasi luas dan melacak ruang kosong memiliki struktur yang relatif sederhana. Ini memiliki manfaat berikut:

  • Informasi ruang kosong padat, jadi relatif beberapa halaman berisi informasi ini.

    Ini meningkatkan kecepatan dengan mengurangi jumlah pembacaan disk yang diperlukan untuk mengambil informasi alokasi. Ini juga meningkatkan kemungkinan halaman alokasi akan tetap berada dalam memori dan tidak memerlukan lebih banyak bacaan.

  • Sebagian besar informasi alokasi tidak ditautkan bersama-sama. Ini menyederhanakan pemeliharaan informasi alokasi.

    Setiap alokasi atau alokasi halaman dapat dilakukan dengan cepat. Ini mengurangi ketidakcocokan antara tugas bersamaan yang harus mengalokasikan atau membatalkan alokasi halaman.

Mengelola alokasi jangkauan

SQL Server menggunakan dua jenis peta alokasi untuk merekam alokasi sejauh mana:

  • Peta Alokasi Global (GAM)

    Halaman GAM mencatat sejauh mana yang telah dialokasikan. Setiap GAM mencakup 64.000 tingkat, atau hampir 4 gigabyte (GB) data. GAM memiliki 1 bit untuk setiap tingkat dalam interval yang dicakupnya. Jika bit adalah 1, sejauh ini gratis; jika bit adalah 0, tingkat dialokasikan.

  • Peta Alokasi Global Bersama (SGAM)

    Halaman SGAM mencatat tingkat mana yang saat ini digunakan sebagai tingkat campuran dan juga memiliki setidaknya satu halaman yang tidak digunakan. Setiap SGAM mencakup 64.000 tingkat, atau hampir 4 GB data. SGAM memiliki 1 bit untuk setiap tingkat dalam interval yang dicakupnya. Jika bit adalah 1, sejauh ini digunakan sebagai tingkat campuran dan memiliki halaman gratis. Jika bit adalah 0, sejauh ini tidak digunakan sebagai tingkat campuran, atau merupakan tingkat campuran dan semua halamannya digunakan.

Setiap tingkat memiliki pola bit berikut yang diatur dalam GAM dan SGAM, berdasarkan penggunaannya saat ini.

Penggunaan jangkauan saat ini Pengaturan bit GAM Pengaturan bit SGAM
Gratis, tidak digunakan 1 0
Tingkat seragam, atau tingkat campuran penuh 0 0
Tingkat campuran dengan halaman gratis 0 1

Ini menyebabkan algoritma manajemen tingkat sederhana.

  • Untuk mengalokasikan tingkat seragam, Mesin Database mencari GAM sedikit 1 dan mengaturnya ke 0.
  • Untuk menemukan tingkat campuran dengan halaman gratis, Mesin Database mencari SGAM sedikit 1 .
  • Untuk mengalokasikan tingkat campuran, Mesin Database mencari GAM sedikit 1 , mengaturnya ke 0, dan kemudian juga mengatur bit yang sesuai di SGAM ke 1.
  • Untuk membatalkan alokasi sejauh mana, Mesin Database memastikan bahwa bit GAM diatur ke 1, dan bit SGAM diatur ke 0.

Algoritma yang digunakan secara internal oleh Mesin Database lebih canggih daripada apa yang dijelaskan dalam artikel ini, karena Mesin Database mendistribusikan data secara merata dalam database. Namun, bahkan algoritma nyata disederhanakan dengan tidak harus mengelola rantai informasi alokasi yang luas.

Lacak ruang kosong

Halaman Ruang Kosong Halaman (PFS) merekam status alokasi setiap halaman, apakah halaman individual telah dialokasikan, dan jumlah ruang kosong di setiap halaman. PFS memiliki 1 byte untuk setiap halaman, merekam apakah halaman dialokasikan, dan jika demikian, apakah itu kosong, 1 hingga 50 persen penuh, 51 hingga 80 persen penuh, 81 hingga 95 persen penuh, atau 96 hingga 100 persen penuh.

Setelah jangkauan dialokasikan ke objek, Mesin Database menggunakan halaman PFS untuk merekam halaman mana sejauh dialokasikan atau gratis. Informasi ini digunakan ketika Mesin Database harus mengalokasikan halaman baru. Jumlah ruang kosong dalam halaman hanya dipertahankan untuk halaman tumpukan dan teks/gambar. Ini digunakan ketika Mesin Database harus menemukan halaman dengan ruang kosong yang tersedia untuk menahan baris yang baru disisipkan. Indeks tidak mengharuskan ruang kosong halaman dilacak, karena titik untuk menyisipkan baris baru diatur oleh nilai kunci indeks.

Halaman PFS, GAM, atau SGAM baru ditambahkan dalam file data untuk setiap rentang tambahan yang terus dilacak. Dengan demikian, ada halaman PFS baru 8.088 halaman setelah halaman PFS pertama, dan halaman PFS tambahan dalam interval halaman 8.088 berikutnya. Untuk menggambarkan, ID halaman 1 adalah halaman PFS, ID halaman 8088 adalah halaman PFS, ID halaman 16176 adalah halaman PFS, dan sebagainya.

Ada halaman GAM baru sejauh 64.000 setelah halaman GAM pertama dan melacak 64.000 tingkat mengikutinya; urutan berlanjut pada interval sejauh 64.000. Demikian pula, ada halaman SGAM baru sejauh 64.000 setelah halaman SGAM pertama dan halaman SGAM tambahan dalam interval ekstensi 64.000 berikutnya.

Ilustrasi berikut menunjukkan urutan halaman yang digunakan oleh Mesin Database untuk mengalokasikan dan mengelola jangkauan.

Diagram memperlihatkan urutan halaman untuk mengelola tingkat.

Mengelola ruang yang digunakan oleh objek

Halaman Peta Alokasi Indeks (IAM) memetakan tingkat dalam bagian 4 GB dari file database yang digunakan oleh unit alokasi. Unit alokasi adalah salah satu dari tiga jenis:

  • IN_ROW_DATA

    Memegang partisi tumpukan atau indeks.

  • LOB_DATA

    Menyimpan jenis data objek besar (LOB), seperti xml, varbinary(max), dan varchar(max).

  • ROW_OVERFLOW_DATA

    Menyimpan data panjang variabel yang disimpan dalam kolom varchar, nvarchar, varbinary, atau sql_variant yang melebihi batas ukuran baris 8.060 byte.

Setiap partisi timbunan atau indeks berisi setidaknya unit alokasi IN_ROW_DATA. Ini juga dapat berisi unit alokasi LOB_DATA atau ROW_OVERFLOW_DATA, tergantung pada timbunan atau skema indeks.

Halaman IAM mencakup rentang 4 GB dalam file dan merupakan cakupan yang sama dengan halaman GAM atau SGAM. Jika unit alokasi berisi batasan dari lebih dari satu file, atau lebih dari satu rentang 4 GB file, akan ada beberapa halaman IAM yang ditautkan dalam rantai IAM. Oleh karena itu, setiap unit alokasi memiliki setidaknya satu halaman IAM untuk setiap file yang memiliki luasnya. Mungkin juga ada lebih dari satu halaman IAM pada file, jika rentang jangkauan pada file yang dialokasikan ke unit alokasi melebihi rentang yang dapat direkam oleh satu halaman IAM.

Diagram memperlihatkan distribusi halaman IAM.

Halaman IAM dialokasikan sesuai kebutuhan untuk setiap unit alokasi dan terletak secara acak dalam file. Tampilan sys.system_internals_allocation_units sistem menunjuk ke halaman IAM pertama untuk unit alokasi. Semua halaman IAM untuk unit alokasi tersebut ditautkan dalam rantai IAM.

Penting

Tampilan sys.system_internals_allocation_units sistem hanya untuk penggunaan internal dan dapat berubah. Kompatibilitas tidak dijamin. Tampilan ini tidak tersedia di Azure SQL Database.

Diagram memperlihatkan halaman IAM yang ditautkan dalam rantai per unit alokasi.

Halaman IAM memiliki header yang menunjukkan tingkat awal rentang jangkauan yang dipetakan oleh halaman IAM. Halaman IAM juga memiliki bitmap besar di mana setiap bit mewakili satu tingkat. Bit pertama dalam peta mewakili tingkat pertama dalam rentang, bit kedua mewakili tingkat kedua, dan sebagainya. Jika sedikit adalah 0, sejauh yang diwakilinya tidak dialokasikan ke unit alokasi yang memiliki IAM. Jika bit adalah 1, sejauh yang diwakilinya dialokasikan ke unit alokasi yang memiliki halaman IAM.

Ketika Mesin Database harus menyisipkan baris baru dan tidak ada ruang yang tersedia di halaman saat ini, mesin database menggunakan halaman IAM dan PFS untuk menemukan halaman yang akan dialokasikan, atau, untuk tumpukan atau halaman teks/gambar, halaman dengan ruang yang cukup untuk menahan baris. Mesin Database menggunakan halaman IAM untuk menemukan tingkat yang dialokasikan ke unit alokasi. Untuk setiap tingkat, Mesin Database mencari halaman PFS untuk melihat apakah ada halaman yang dapat digunakan. Setiap halaman IAM dan PFS mencakup banyak halaman data, jadi ada beberapa halaman IAM dan PFS dalam database. Ini berarti bahwa halaman IAM dan PFS umumnya berada dalam memori di kumpulan buffer SQL Server, sehingga dapat dicari dengan cepat. Untuk indeks, titik penyisipan baris baru diatur oleh kunci indeks, tetapi ketika halaman baru diperlukan, proses yang dijelaskan sebelumnya terjadi.

Mesin Database mengalokasikan tingkat baru ke unit alokasi hanya ketika tidak dapat dengan cepat menemukan halaman dalam tingkat yang ada dengan ruang yang cukup untuk menahan baris yang dimasukkan.

Alokasi pengisian proporsional

Mesin Database mengalokasikan sejauh mana yang tersedia dalam grup file menggunakan algoritma alokasi pengisian proporsional. Dalam grup file yang sama dengan dua file, jika satu file memiliki ruang kosong ganda seperti yang lain, dua halaman akan dialokasikan dari file dengan ruang yang tersedia untuk setiap satu halaman yang dialokasikan dari file lain. Ini berarti bahwa setiap file dalam grup file harus memiliki persentase ruang serupa yang digunakan.

Lacak tingkatan yang dimodifikasi

SQL Server menggunakan dua struktur data internal untuk melacak tingkat yang dimodifikasi oleh operasi penyalinan massal, dan sejauh yang dimodifikasi sejak pencadangan penuh terakhir. Struktur data ini sangat mempercepat pencadangan diferensial. Mereka juga mempercepat pengelogan operasi penyalinan massal saat database menggunakan model pemulihan yang dicatat secara massal. Seperti halaman GAM dan SGAM, struktur ini adalah bitmap di mana setiap bit mewakili satu tingkat.

  • Peta yang Diubah Diferensial (DCM)

    Ini melacak sejauh mana yang telah berubah sejak pernyataan terakhir BACKUP DATABASE . Jika bit untuk jangkauannya adalah 1, sejauh ini telah dimodifikasi sejak pernyataan terakhir BACKUP DATABASE . Jika bit adalah 0, sejauh ini belum dimodifikasi.

    Cadangan diferensial hanya membaca halaman DCM untuk menentukan tingkat mana yang telah dimodifikasi. Ini sangat mengurangi jumlah halaman yang harus dipindai oleh cadangan diferensial. Lamanya waktu pencadangan diferensial berjalan sebanding dengan jumlah tingkat yang dimodifikasi sejak pernyataan terakhir BACKUP DATABASE dan bukan ukuran keseluruhan database.

  • Peta yang Diubah Secara Massal (BCM)

    Ini melacak sejauh mana yang telah dimodifikasi oleh operasi yang dicatat secara massal sejak pernyataan terakhir BACKUP LOG . Jika bit untuk jangkauannya adalah 1, sejauh ini telah dimodifikasi oleh operasi yang dicatat secara massal setelah pernyataan terakhir BACKUP LOG . Jika bit adalah 0, sejauh ini belum dimodifikasi oleh operasi yang dicatat secara massal.

    Meskipun halaman BCM muncul di semua database, halaman tersebut hanya relevan ketika database menggunakan model pemulihan yang dicatat secara massal. Dalam model pemulihan ini, ketika BACKUP LOG dilakukan, proses pencadangan memindai BCM sejauh yang telah dimodifikasi. Kemudian mencakup tingkat tersebut dalam cadangan log. Ini memulihkan operasi yang dicatat secara massal jika database dipulihkan dari cadangan database dan urutan pencadangan log transaksi. Halaman BCM tidak relevan dalam database yang menggunakan model pemulihan sederhana, karena tidak ada operasi yang dicatat secara massal. Mereka tidak relevan dalam database yang menggunakan model pemulihan penuh, karena model pemulihan tersebut memperlakukan operasi yang dicatat secara massal sebagai operasi yang dicatat sepenuhnya.

Interval antara halaman DCM dan halaman BCM sama dengan interval antara halaman GAM dan SGAM, 64.000 tingkat. Halaman DCM dan BCM terletak di belakang halaman GAM dan SGAM dalam file fisik sebagai berikut:

Diagram memperlihatkan distribusi interval halaman khusus.