Bosh sahifa Wiki Page split

Page split

Page split — B-tree/B+tree index sahifasiga yangi entry sig‘maganda uning mazmunini ikki page’ga ajratib, parent node’ga yangi child pointer va separator key qo‘shish jarayoni. Split indexning tartiblangan va balanced tuzilishini saqlaydi, ammo qo‘shimcha IO, WAL va fragmentation keltiradi.

Split jarayoni

Leaf page to‘lganda engine yangi page ajratadi, entrylarni kalit tartibida taqsimlaydi va sibling bog‘lanishlarini yangilaydi. Parent internal page’ga yangi separator yoziladi. Parent ham to‘la bo‘lsa split yuqoriga tarqaladi. Root splitida yangi root yaralib tree height bittaga oshadi.

Operation concurrent readerlar qidiruvni yo‘qotmasligi va crash recovery yarim holatni tiklashi uchun latch hamda WAL bilan boshqariladi. Implementatsiya bir necha bosqichli bo‘lishi mumkin, ammo logical index doim searchable qolishi kerak.

Random va sequential insert

Monoton oshuvchi keylar odatda B-tree’ning o‘ng chekkasiga yozadi. Rightmost page split yangi bo‘sh page yaratib, append patternni davom ettirishi mumkin. Bu cache locality yaxshi, ammo bitta hot page’da concurrency contention tug‘diradi.

Random UUID yoki tasodifiy key insertlarni tree bo‘ylab tarqatadi. Ko‘plab o‘rtadagi page’lar bo‘linib, har ikkisi qisman to‘la qoladi. Index hajmi va cache footprint ortishi mumkin. Random key parallel writerlarni tarqatishi mumkin, demak trade-off mavjud.

Fill factor

Fill factor index build yoki page yaratishda qancha joyni to‘ldirishni belgilaydi. 80% fill keyingi insertlar uchun taxminan 20% bo‘sh joy qoldiradi. Random insertli mutable indexda splitni kamaytiradi. Read-mostly indexda yuqori fill factor page sonini kamaytiradi.

Fill factor mavjud barcha page’ni doim avtomatik 80%da ushlab turmaydi. Vaqt o‘tib insert va delete occupancy’ni o‘zgartiradi. Rebuild yangi fill factor bilan layoutni qayta yaratishi mumkin.

Ta’siri

Split kamida yangi page allocation, data ko‘chirish, parent update va log yozuvini talab qiladi. Replica WALni replay qiladi, backup/archive hajmi ortadi. Tez splitlar write latency spike va storage contentionga sabab bo‘lishi mumkin.

Splitning o‘zi corruption emas. B-tree ishlashining normal qismi. Muammo workloadga nisbatan juda ko‘p bo‘lsa va real performance/space ta’siri ko‘rinsa optimallashtiriladi.

Tashqi va ichki fragmentation

Split page’larni yarim bo‘sh qoldirib internal free space hosil qiladi. Fizik diskda logical key order page allocation orderiga mos kelmasligi mumkin. SSDda sequential physical order HDDga qaraganda kamroq ahamiyatli, ammo cache va read amplification saqlanadi.

Index rebuild page’larni zich va tartibli qayta yaratishi mumkin. Online rebuild ham CPU, IO, WAL, temporary disk va replica lag keltiradi. Faqat “fragmentation foizi” uchun jadvalsiz maintenance qilinmaydi.

Monitoring va yechim

Page split counter, index size, page density, write latency va WAL rate kuzatiladi. Qaysi index va key pattern sabab bo‘layotgani aniqlanadi. Keraksiz indexni olib tashlash write xarajatini to‘g‘ridan-to‘g‘ri kamaytiradi, ammo query va constraint dependency tekshiriladi.

Key tanlovi, fill factor, batch insert tartibi va partitioning variantlari baholanadi. Monoton key hotspotini hash/shard bilan tarqatish range scan imkoniyatiga zarar qilishi mumkin. Har o‘zgarish read va write workloadlar bilan birga sinov qilinadi.

Bog‘liq tushunchalar

B-tree, Leaf page, Internal node, Fill factor, Index fragmentation, WAL, Tree height, Random UUID