Implementasi pemadatan halaman

Berlaku untuk:SQL ServerAzure SQL DatabaseAzure SQL Managed Instance

Artikel ini merangkum cara Mesin Database menerapkan pemadatan halaman. Ringkasan ini menyediakan informasi dasar untuk membantu Anda merencanakan ruang penyimpanan yang Anda butuhkan untuk data Anda.

Pemadatan halaman mirip untuk tabel, partisi tabel, indeks, dan partisi indeks. Deskripsi kompresi halaman berikut untuk tabel berlaku sama untuk pemadatan halaman untuk semua jenis objek. Contoh berikut mengompresi string karakter, tetapi kompresi awalan dan kamus menerapkan prinsip yang sama untuk jenis data lainnya.

Mengompresi tingkat daun tabel dan indeks dengan pemadatan halaman terdiri dari tiga operasi dalam urutan berikut:

  1. Pemadatan baris
  2. Kompresi awalan
  3. Kompresi kamus

Saat Anda menggunakan pemadatan halaman, halaman indeks tingkat non-daun dikompresi dengan hanya menggunakan pemadatan baris. Untuk informasi selengkapnya tentang kompresi baris, lihat Implementasi kompresi baris.

Kompresi awalan

Untuk setiap halaman yang sedang dikompresi, kompresi awalan menggunakan langkah-langkah berikut:

  1. Untuk setiap kolom, nilai diidentifikasi yang dapat digunakan untuk mengurangi ruang penyimpanan untuk nilai di setiap kolom.

  2. Baris yang mewakili nilai awalan untuk setiap kolom dibuat dan disimpan dalam struktur informasi pemadatan (CI) yang segera mengikuti header halaman.

  3. Nilai awalan berulang dalam kolom digantikan oleh referensi ke awalan yang sesuai. Jika nilai dalam baris tidak sama persis dengan nilai awalan yang dipilih, kecocokan parsial masih dapat ditunjukkan.

Ilustrasi berikut ini memperlihatkan halaman sampel tabel sebelum pemadatan awalan.

Diagram of page before prefix compression.

Ilustrasi berikut menunjukkan halaman yang sama setelah pemadatan awalan. Awalan dipindahkan ke header, dan nilai kolom diubah menjadi referensi ke awalan.

Diagram of page after prefix compression.

Di kolom pertama baris pertama, nilai 4b menunjukkan bahwa empat karakter awalan pertama (aaab) ada untuk baris tersebut, dan juga karakter b. Ini membuat nilai aaabbyang dihasilkan , yang merupakan nilai asli.

Kompresi kamus

Setelah kompresi awalan selesai, kompresi kamus diterapkan. Kompresi kamus mencari nilai berulang di mana saja di halaman, dan menyimpannya di area CI. Tidak seperti kompresi awalan, kompresi kamus tidak dibatasi untuk satu kolom. Pemadatan kamus dapat menggantikan nilai berulang yang terjadi di mana saja di halaman. Ilustrasi berikut menunjukkan halaman yang sama setelah pemadatan kamus.

Diagram of page after dictionary compression.

Nilai 4b telah dirujuk dari kolom halaman yang berbeda.

Ketika pemadatan halaman terjadi

Saat tabel baru dibuat yang memiliki pemadatan halaman, tidak ada pemadatan yang terjadi. Namun, metadata untuk tabel menunjukkan bahwa pemadatan halaman harus digunakan. Saat data ditambahkan ke halaman data pertama, data dikompresi baris. Karena halaman tidak penuh, tidak ada manfaat yang diperoleh dari pemadatan halaman. Ketika halaman penuh, baris berikutnya yang akan ditambahkan memulai operasi pemadatan halaman. Seluruh halaman ditinjau; setiap kolom dievaluasi untuk kompresi awalan, lalu semua kolom dievaluasi untuk kompresi kamus. Jika pemadatan halaman telah membuat ruang yang cukup di halaman untuk baris tambahan, baris ditambahkan, dan data dikompresi baris dan dikompresi halaman. Jika ruang yang diperoleh oleh pemadatan halaman dikurangi ruang yang diperlukan untuk struktur CI tidak signifikan, pemadatan halaman tidak digunakan untuk halaman tersebut. Baris mendatang pas ke halaman baru atau, jika tidak cocok, halaman baru ditambahkan ke tabel. Mirip dengan halaman pertama, halaman baru tidak pada halaman pertama dikompresi.

Saat tabel yang sudah ada yang berisi data dikonversi ke pemadatan halaman, setiap halaman dibangun kembali dan dievaluasi. Membangun kembali semua halaman menyebabkan pembangunan ulang tabel, indeks, atau partisi.

Langkah berikutnya