Bosh sahifa Wiki Partitioning

Partitioning

Partitioning — bitta mantiqiy table yoki index ma’lumotini kichikroq fizik bo‘laklarga ajratish usuli. Foydalanuvchi table’ni bitta obyekt sifatida query qiladi, database esa kerakli partitionlarni tanlaydi.

Partitioning katta table’larni boshqarish, query scanini kamaytirish, retention va maintenance jarayonlarini soddalashtirish uchun ishlatiladi.

Shardingdan farqli ravishda partitionlar ko‘pincha bitta database tizimi tomonidan umumiy boshqariladi.

Partition key

Row qaysi partitionga tushishini partition key belgilaydi.

Misollar:

  • sana;
  • region;
  • tenant;
  • ID;
  • status.

Yaxshi key query filterlari va data lifecycle bilan mos bo‘ladi.

Range partitioning

Qiymat oralig‘i bo‘yicha bo‘linadi.

Masalan, oylar bo‘yicha:

2026-01
2026-02
2026-03

Vaqtga bog‘liq log, event va transaction table’lari uchun qulay.

Eski oyni alohida drop yoki archive qilish mumkin.

List partitioning

Aniq qiymatlar ro‘yxati partitionga biriktiriladi.

Masalan:

UZ, KZ → CentralAsia
DE, FR → Europe

Region, category yoki status bo‘yicha bo‘lish uchun ishlatiladi.

Yangi qiymat uchun default partition yoki DDL talab qilinishi mumkin.

Hash partitioning

Key hash natijasiga ko‘ra partition tanlanadi.

Bu data’ni tengroq taqsimlashga yordam beradi.

Range query barcha partitionlarni ko‘rishi mumkin.

Hash partitioning vaqt bo‘yicha retentionni soddalashtirmaydi.

Composite partitioning

Bir nechta bosqich birlashtiriladi.

Masalan:

avval oy bo‘yicha range
keyin tenant bo‘yicha hash

Bu katta vaqtli multi-tenant table’da query va parallelizmni yaxshilashi mumkin.

Murakkab partition soni metadata va maintenance yukini oshiradi.

Partition pruning

Query predicate’iga qarab database keraksiz partitionlarni o‘qimaydi.

Misol:

SELECT *
FROM events
WHERE created_at >= '2026-07-01'
  AND created_at < '2026-08-01';

Faqat iyul partitioni scan qilinishi mumkin.

Bu partition pruning.

Predicate partition key bilan tushunarli shaklda yozilishi kerak.

Static va runtime pruning

Optimizer query plan tuzishda aniq constant orqali partitionlarni oldindan tanlashi mumkin.

Prepared parameter yoki join natijasiga bog‘liq holatda runtime pruning bajarilishi mumkin.

Function yoki type conversion pruningni cheklashi ehtimoli bor.

Local index

Har partition o‘z indexiga ega bo‘lishi mumkin.

Afzalliklari:

  • kichik index;
  • partition maintenance;
  • tez rebuild;
  • alohida storage.

Global uniquenessni faqat local index bilan ta’minlash qiyin bo‘lishi mumkin.

Global index

Barcha partitionlarni qamrab oladigan index global index hisoblanadi.

U global lookup va unique constraint uchun qulay.

Kamchiligi — partition detach, move va maintenance murakkablashadi.

Aniq qo‘llab-quvvatlash database mahsulotiga bog‘liq.

Partition elimination va performance

Partitioning har query’ni avtomatik tezlashtirmaydi.

Agar query partition key bo‘yicha filter qilmasa, barcha partition scan qilinadi.

Juda ko‘p partition query planning vaqtini va metadata overheadini oshirishi mumkin.

Kerakli indexlar baribir talab qilinadi.

Retention

Vaqtga bo‘lingan table’da eski data’ni row-by-row delete qilish o‘rniga butun partition drop qilinadi.

Bu:

  • tez;
  • kam WAL;
  • kam lock;
  • kam bloat

bo‘lishi mumkin.

Dropdan oldin backup va compliance retention tekshiriladi.

Partition attach va detach

Tayyor table partition sifatida attach qilinishi mumkin.

Bu bulk load jarayonida:

  1. data alohida table’ga yuklash;
  2. validation;
  3. index;
  4. partition sifatida ulash

imkonini beradi.

Detach data’ni asosiy table’dan mantiqiy ajratadi.

Default partition

Hech bir aniq partition shartiga mos kelmagan row default partitionga tushadi.

Bu insert failure’ni kamaytiradi.

Biroq default partition yashirin data quality muammosini to‘plashi mumkin.

U muntazam tekshiriladi.

Partition constraint

Har partition faqat o‘z key oralig‘idagi rowlarni saqlashi kerak.

Database bu qoidani constraint orqali biladi.

Noto‘g‘ri row attach jarayonida rad etiladi yoki oldindan validation talab qilinadi.

Unique constraint

Partitioned table’da unique constraint ko‘pincha partition keyni ham o‘z ichiga olishi kerak.

Masalan, faqat email global unique bo‘lishi kerak, ammo partition created_at bo‘yicha bo‘lsa cheklov murakkablashadi.

Global index yoki alohida registry kerak bo‘lishi mumkin.

Foreign key

Partitioned table’ga yoki undan foreign key qo‘llab-quvvatlashi database versiyasiga bog‘liq.

Cascade operation ko‘p partitionga ta’sir qilishi mumkin.

Query plan va locklar katta datasetda sinovdan o‘tkaziladi.

Parallelism

Turli partitionlar parallel scan yoki maintenance qilinishi mumkin.

Bu analytical query va bulk operationni tezlashtiradi.

Lekin barcha worker bir disk yoki networkni bo‘lishsa parallelizmning foydasi cheklanadi.

Partitioning va sharding

Partitioning odatda bitta database ichida mantiqiy table’ni bo‘ladi.

Sharding esa data’ni mustaqil server yoki database’lar orasida taqsimlaydi.

Ayrim distributed database bu ikki atamani bir-biriga yaqin ishlatishi mumkin.

Kontekst va ownership muhim.

Monitoring

Kuzatiladi:

  • partition hajmi;
  • row soni;
  • pruning;
  • default partition;
  • yangi partition mavjudligi;
  • index holati;
  • eski partition retentioni;
  • planning time.

Kelajak sana uchun partition yaratilmasa insertlar xato berishi mumkin.

Partition rotation

Vaqtli table’da kelajak partitionlari oldindan yaratiladi.

Schedule yangi partitionni yaratadi, eski partitionni archive qiladi va retention muddati tugagach drop qiladi.

Bu jarayon ishlamay qolsa default partition o‘sishi yoki insertlar xato berishi mumkin.

Partitionwise operation

Ayrim optimizerlar join va aggregationni partitionlar bo‘yicha alohida bajarib, natijalarni birlashtirishi mumkin.

Bu ikki table bir xil key va boundarylar bilan partition qilinganida samarali.

Mos kelmaydigan partition sxemasi data movement yoki umumiy joinni talab qiladi.

Bog‘liq tushunchalar

Table partitioning, Partition key, Range partitioning, List partitioning, Hash partitioning, Partition pruning, Local index, Retention, Sharding