Bosh sahifa Wiki HOT update

HOT update

HOT update — PostgreSQLdagi Heap-Only Tuple yangilanishi bo‘lib, mos sharoitda yangi row version uchun index entrylarini qayta yaratmasdan UPDATE bajaradi. U write amplification, index bloat va keyingi vacuum ishini kamaytiradi, lekin barcha update’lar uchun mavjud emas.

MVCC update jarayoni

PostgreSQL MVCC modelida qator yangilanganda eski tuple joyida o‘zgarmaydi. Heapda yangi tuple version yaratiladi, eski version esa oldingi snapshotlar ko‘rishi uchun vaqtincha qoladi. Oddiy update’da har bir index yangi tuple manziliga entry olishi kerak, hatto indexed qiymat o‘zgarmagan bo‘lsa ham.

HOT update yangi versionni ayni heap page ichida joylashtirib, eski tuple’dan unga chain yaratadi. Index entry chain boshiga olib keladi, heap scan ko‘rinadigan versionni shu zanjirdan topadi. Natijada yangi index tuple yozilmaydi.

Zarur shartlar

Yangilanayotgan ustun hech bir tegishli indexda referenced bo‘lmasligi kerak. Bu faqat oddiy index keylarini emas, expression va partial index predicate ishlatgan ustunlarni ham qamrashi mumkin. PostgreSQL versiyasiga qarab summarize qiluvchi ayrim index turlari uchun imkoniyat kengayishi mumkin, shu sabab aniq xulq hujjatdan tekshiriladi.

Yangi row version ayni heap page’da sig‘ishi kerak. Page to‘la bo‘lsa HOT amalga oshmaydi va normal update yangi page hamda index entrylarini talab qiladi. fillfactor insert paytida sahifada bo‘sh joy qoldirib, tez-tez yangilanadigan jadvalda HOT ulushini oshiradi.

Index scan

Index faqat chainning boshlang‘ich tuple’iga pointing qilishi mumkin. PostgreSQL heap page ichidagi HOT chainni yurib, transaction snapshotiga ko‘rinadigan oxirgi mos versionni topadi. Chain page tashqarisiga chiqmaydi, shu sabab index entrysiz qidiruv boshqariladigan bo‘ladi.

Pruning eski HOT versionlarni page access paytida olib tashlashi yoki line pointerlarni redirect qilishi mumkin. VACUUM ham dead tuple va index cleanup bilan shug‘ullanadi. HOT vacuumni keraksiz qilmaydi; u faqat hosil bo‘ladigan index ishini kamaytiradi.

Samaradorlik

Ko‘p indexli jadvalda oddiy update har indexga yozuv va WAL yaratadi. HOT bu write’larni cheklab, disk IO va cache churnni kamaytiradi. Foyda update rate, qator kengligi, sahifadagi bo‘sh joy va index soniga bog‘liq.

Juda past fillfactor HOT uchun joy beradi, ammo table hajmi va scan qilinadigan page sonini oshiradi. Juda yuqori fillfactor storage’ni zich saqlaydi, lekin update’lar tezda boshqa pagega ko‘chadi. Qiymat real workload bilan o‘lchanadi.

Kuzatuv

PostgreSQL statistik viewlari update va HOT update sonini ko‘rsatadi. HOT ratio past bo‘lsa, qaysi indexed ustunlar yangilanayotgani, tuple size va page free space tekshiriladi. Faqat ratio’ni maksimal qilish maqsad emas; query uchun zarur indexni olib tashlash read performance va constraintni buzishi mumkin.

Table bloat, index size, WAL rate, autovacuum chastotasi va update latency birga kuzatiladi. Schema o‘zgarib yangi index qo‘shilganda avval HOT bo‘lgan update endi normal updatega aylanishi mumkin. Performance regressioni migration testida write workload bilan tekshiriladi.

Cheklovlar

HOT applicationga ko‘rinadigan SQL semantikasini o‘zgartirmaydi va maxsus query sintaksisini talab qilmaydi. U implementation optimizatsiyasi. Qator boshqa partitionga ko‘chishi, indexed qiymat almashishi yoki page’da joy bo‘lmasligi HOTni cheklaydi. Uning mavjudligiga correctness uchun tayanilmaydi; faqat o‘lchangan performance xususiyati sifatida boshqariladi.

Bog‘liq tushunchalar

PostgreSQL, MVCC, Heap tuple, Index bloat, Fillfactor, Autovacuum, WAL, Page pruning