Beberapa Pertanyaan tentang SGAM & GAM & IAM & PFS di SQL Server

8

Ada beberapa pertanyaan tentang struktur internal SQL Server.

Mari kita asumsikan bahwa kita memiliki tabel dalam database.

  1. Halaman SGAM & GAM melacak luasan yang dibagikan & seragam dalam satu interval GAM (~ 4GB), dan membantu kami menemukan jenis tingkat yang sesuai saat mengalokasikan halaman / luasan (awalnya 8 halaman pertama dialokasikan dari luasan campuran & posisi halaman tersebut adalah perekam ke halaman IAM, dan setelah itu dari GAM luasan (luasan seragam) dan informasi ini disimpan di halaman IAM dirantai berikutnya).

    Katakanlah, halaman untuk tabel dialokasikan, dan ukuran tabel lebih dari 8 halaman, dan beberapa saat kemudian, baris dihapus, meninggalkan beberapa ruang yang dapat digunakan kembali. Bagaimana SQL Server tahu bahwa luasan memiliki ruang bebas?

    Halaman memiliki informasi tentang ukuran ruang kosong, tetapi terlalu memakan waktu untuk memeriksa setiap halaman. Bit di halaman SGAM & GAM tidak memberi tahu kami selain ekstensi yang dialokasikan atau memiliki beberapa halaman gratis (seluruh halaman gratis, tidak sebagian).

  2. Halaman header file & SGAM & GAM & IAM adalah di antara halaman pertama dalam sebuah file. Struktur data apa yang sebenarnya menunjuk pada mereka?

cetakan baru
sumber

Jawaban:

11

Bagaimana SQL Server tahu bahwa luasan memiliki ruang bebas?

SQL Server melacak ruang kosong di halaman, di heap tables juga di halaman LOB menggunakan halaman PSF secara internal.

Anda juga dapat menggunakan sys.dm_db_file_space_usageDMV untuk mengetahuinya total_page_count, allocated_extent_page_countjuga unallocated_extent_page_countdalam database.

Halaman Halaman Ruang Kosong (PFS) mencatat status alokasi setiap halaman, apakah halaman individual telah dialokasikan, dan jumlah ruang kosong pada setiap halaman. PFS memiliki satu byte untuk setiap halaman, mencatat apakah halaman tersebut 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.

Halaman PFS adalah halaman pertama setelah halaman header file dalam file data (nomor halaman 1). Ini diikuti oleh halaman GAM (nomor halaman 2), dan kemudian halaman SGAM (halaman 3). Ada halaman PFS berukuran sekitar 8.000 halaman setelah halaman PFS pertama. Ada lagi halaman GAM 64.000 setelah halaman GAM pertama di halaman 2, dan halaman SGAM 64.000 lagi setelah halaman SGAM pertama di halaman 3. Ilustrasi berikut menunjukkan urutan halaman yang digunakan oleh Mesin Database untuk mengalokasikan dan mengelola luasan.

Klik di sini untuk memperbesar - output menggunakan DBCC PAGE

masukkan deskripsi gambar di sini

Lihat: Di Dalam Mesin Penyimpanan: GAM, SGAM, PFS dan peta alokasi lainnya

Halaman header file & SGAM & GAM & IAM adalah di antara halaman pertama dalam sebuah file. Struktur data apa yang sebenarnya menunjuk pada mereka?

Saya tidak mendapatkan pertanyaan ini. Unit penyimpanan terkecil adalah halaman. Delapan 8K Halaman membentuk batas. Di bawah ini adalah apa yang terdiri dari halaman data :

masukkan deskripsi gambar di sini

Saya akan sangat menyarankan untuk membaca blog SQLSkills.com di mana Paul dan timnya banyak menulis blog tentang SQL Server internal .

Kin Shah
sumber