Bosh sahifa Wiki Leaf page

Leaf page

Leaf page — tree asosidagi database indexning eng quyi darajasidagi disk/xotira sahifasi bo‘lib, qidiruv kalitlari va ularga tegishli record yoki row manzillarini saqlaydi. B+tree’da barcha real key entrylar leaf darajasida joylashadi, internal page’lar esa faqat yo‘naltiruvchi separatorlarni ushlab turadi.

B+tree tuzilishi

Qidiruv rootdan boshlanadi. Internal node kalit intervaliga qarab child page tanlaydi. Oxirida leaf page topilib, key unda binary search yoki slot directory orqali qidiriladi. Tree balansi barcha leaflarni taxminan bir xil depthda saqlaydi.

Leaf entry secondary indexda indexed key va primary key/row locatorni, clustered indexda esa butun rowni saqlashi mumkin. Database mahsulotining storage modeli qaysi ma’lumot leafda ekanini belgilaydi.

Sibling bog‘lanishi

B+tree leaf page’lari ko‘pincha key orderida next/previous sibling pointer bilan bog‘langan. Range scan birinchi kalit uchun rootdan leafga tushadi, keyin qo‘shni leaflarni ketma-ket o‘qiydi. Bu har record uchun rootdan qayta qidirish zaruratini yo‘qotadi.

ORDER BY key mos index orqali alohida sort qilmasdan shu tartibda yurishi mumkin. Direction va composite key prefixi scan imkoniyatiga ta’sir qiladi.

Page ichki tuzilishi

Fixed-size page header, LSN/checksum, slot array, key/value area va bo‘sh joyni o‘z ichiga oladi. Variable-length recordlar compaction talab qilishi mumkin. Prefix compression o‘xshash keylarning umumiy qismini bir marta saqlab fan-outni oshiradi.

Page size katta bo‘lsa sequential throughput va fan-out oshishi, random small lookup uchun ortiqcha byte o‘qilishi mumkin. Size ko‘pincha database yaratishda yoki engine darajasida belgilanadi.

Split va merge

Yangi entry sig‘masa leaf page split bo‘ladi. Entrylar ikki pagega taqsimlanadi va parentga yangi separator kiritiladi. Parent ham to‘lsa split rootgacha tarqalishi mumkin. Random insert page’larni o‘rtadan, monoton key esa ko‘pincha o‘ng chekkadan split qiladi.

Delete’dan keyin page juda bo‘shasa engine sibling bilan merge yoki redistribution qilishi mumkin; ba’zi tizimlar space’ni keyingi insert uchun saqlab, darhol merge qilmaydi. Index rebuild logical bloatni kamaytirishi mumkin, ammo log va lock xarajatiga ega.

Concurrency

Reader va writer page latch orqali qisqa fizik himoya oladi; transaction row/key lock esa boshqa qatlam. Latch page structure update paytida consistency’ni saqlaydi. Split bir nechta page va parent pointerini xavfsiz yangilashni talab qiladi.

WAL page change’dan oldin log recordni saqlaydi. Crash paytida half-completed split recovery algoritmi bilan yakunlanadi yoki qayta tiklanadi. Page LSN redo’ning kerakligini ko‘rsatadi.

Performance diagnostikasi

Leaf page density, page split rate, logical/physical read va cache hit index xulqini ko‘rsatadi. Juda past density index hajmini va cache footprintni oshiradi. Juda yuqori fill factor random insertda split ko‘paytiradi.

Range scan sekin bo‘lsa key correlation, page count, visibility lookup va storage latency ham tekshiriladi. Index-only scan leafda barcha kerakli ustunlar bo‘lsa ham MVCC visibility uchun heapga murojaat qilishi mumkin; exact xulq enginega bog‘liq.

Leaf page statistikasi indeks sog‘lig‘ini ko‘rsatadi. O‘rtacha to‘ldirilish, ketma-ket sahifalarning jismoniy yaqinligi, split chastotasi va o‘chirilgan yozuvlar ulushi birga ko‘rilsa, qayta qurish yoki sozlash zarurati aniqroq baholanadi.

Bog‘liq tushunchalar

B+tree, Internal node, Page split, Range scan, Fill factor, Index page, Sibling pointer, Index-only scan