What is data page? How it works? Relation with index

Faig Nasirli
2 min readJun 11, 2024

--

Hesab edirəm ki, indeks haqqında danışmazdan əvvəl indeksin nəyə əsasən lazım olması məntiqini başa düşmək lazımdır. Yəni, məlumatların hansı formada saxlanılması məntiqi haqda. İndeks məntiqi, cədvəlin background-unda yerləşən data page -lərə uyğun olaraq işləyir. Data page məntiqi fərqli database platformalarda eyni formatda işləyir. Database platformasından asılı olaraq 1 data page susmaya görə fərqli həcmə malik ola bilir. Nümunə üçün, Oracle, SQL Server, PostgreSQL database platformalarında 8Kb, MySQL platformasında 16Kb yaddaş həcminə malik olur.

Data Page nədir? Məlumatlar cədvəl daxilində yerləşir kimi görünsə də, axra fonda, məlumat bazası fayllarının içindəki müvafiq strukturlarla duzulmüş data file-larda yerləşir. Hər bir data faylı da, özünəməxsus formatda data page bölgüsü edir. Data page-lər, data faylında müvafiq ardıcıllıqla və nizamla düzülərək öz növbəsində collection-lara bölünür. Bu da, hər bir cədvəlin özünə aid yüzlərlə data faylı, minlərlə data page yaratması deməkdir.

Cədvəl səviyyəsində istənilən DML əməliyyatı (İnsert, Update, Delete) cədvəl səviyyəsində görünsə də, əslində data faylındakı data page-lərdə dəyişiklik edir.

Şəkil 1. Data Page

DML komandaları icra olunduqda data page-lər necə reaksiya verir?

Məlumat cədvələ yazılan zaman, cari data page üzrə boş yer var isə, məlumatı həmin data page-yə, yer yoxdursa yeni data page yaradaraq məlumatı nömrələyərək (indeksləyərək) oraya yazır.

Bəs mövcud cədvəldən hansısa sətiri sildikdə yaxud dəyişdikdə necə reaksiya verilir?

Cədvəl üzrə silinmə əməliyyatı mövcud sətirin məlumatlarının data page-dən silinməsi ilə nəticələnir. Nəticədə data page üzrə müəyyən boşluqlar yaranır ki, buna da `dead tuple` (ölü zona, boş sahə) deyilir.

Cədvəl üzrə icra olunan Update komandası da, heç də göründüyü kimi dəyişiklik edərək, dəyişikliyi cədvəldə saxlamır. Əslində icra olunan proses Delete və İnsert əməliyyatlarının icrasından ibarətdir. Yəni, dəyişən məlumatlar əvvəlcə data page-dən silinir, sonra isə yenidən data page-yə əlavə olunur.

Şəkil 2. DML reaction on data page

Bəs bu ortada yığılan dead tuple -i necə təmizləmək olar? Bu gələcəkdə nə kimi problem yarada bilər?

Dead tuple nə qədər çox olarsa, cədvəlin təmizlənəbilən free space-i o qədər çox olacaq. Bu da disk səviyyəsində məlumat bazasının həcminin külli miqdarda şişməsinə gətirib çıxarır. Bu problemi isə, bütün platformalarda maintenance prosesi kimi tanınan shrink (vacuum) kimi funksionallıq ilə təmizləmək olar.

Şəkil 3. Shrinking Database

Məlumat bazasının daxilində nə qədər free space olmasını, bazanın metadata-sını saxlayan cədvəllərdən oxuyaraq bilmək olar.

Cədvəl üzərində yaradılan indekslər isə data pagelərin düzülmə formasını və düzgün paylanması tənzimləmək üçün istifadə olunur.

--

--

Faig Nasirli

Head of Database Administration and Engineering Division , SQL Server Trainer, Lecturer