Partitioning szabályzat

A particionálási szabályzat határozza meg, hogy a mértékeket (adatszilánkokat) egy adott táblához vagy materializált nézethez particionálja-e.

A szabályzat egy további háttérfolyamatot aktivál, amely a mértékek létrehozása után, az adatbetöltést követően következik be. Ez a folyamat magában foglalja az adatok forrásbőségből való betöltését és homogén kiterjedések előállítását, amelyekben a partíciókulcsként kijelölt oszlop összes értéke egyetlen partíción belül található.

A particionálási szabályzat elsődleges célja a lekérdezési teljesítmény javítása adott támogatott forgatókönyvekben.

Megjegyzés

Alapértelmezés szerint, ha nincs definiálva adatparticionálási szabályzat (is null), a bővítmények particionálása a létrehozás (betöltés) időpontja szerint történik. A legtöbb esetben nincs szükség adatparticionálási szabályzat beállítására.

Támogatott esetek

Az adatparticionálási szabályzatok beállításához az alábbi forgatókönyvek ajánlottak. Az összes többi esetben a szabályzat beállítása nem javasolt.

  • Gyakori szűrők közepes vagy magas számosságú string vagy guid oszlopon:
    • Például: több-bérlős megoldások vagy metrikatáblák, ahol a legtöbb vagy az összes lekérdezés egy vagy guidtöbb típusú string oszlopra szűr, például a vagy a TenantIdMetricIdoszlopra.
    • A közepes számosság legalább 10 000 különböző érték.
    • Állítsa a kivonatpartíciós kulcsot vagy guid oszlopotstring, és állítsa a tulajdonságot értékre PartitionAssigmentModeuniform.
  • Gyakori összesítések vagy illesztések nagy számosságú string vagy guid oszlopon:
    • Például számos különböző érzékelőből származó IoT-információk, vagy sok különböző tanuló tudományos feljegyzései.
    • A magas számosság legalább 1 000 000 különböző érték, ahol az oszlop értékeinek eloszlása körülbelül egyenletes.
    • Ebben az esetben állítsa a kivonatpartíciós kulcsot a gyakran csoportosított vagy csatlakoztatott oszlopra, és állítsa a tulajdonságot értékre PartitionAssigmentModeByPartition.
  • Rendelésen kívüli adatbetöltés:
    • Előfordulhat, hogy a táblába betöltött adatok nem rendezhetők és particionálhatók mértékekre (szegmensekre) az adatlétrehozási időt képviselő és az adatok szűrésére gyakran használt oszlop datetime szerint. Ennek oka a heterogén forrásfájlokból származó, nagy időtartamú datetime értékeket tartalmazó visszatöltés lehet.
    • Ebben az esetben állítsa az egységes tartomány datetime partíciókulcsát oszlopként datetime .
    • Ha adatmegőrzési és gyorsítótárazási szabályzatra van szüksége az oszlop dátum/idő értékeihez való igazításhoz, ahelyett, hogy a betöltés időpontjához igazodik, állítsa a tulajdonságot értékre OverrideCreationTimetrue.

Figyelemfelhívás

  • A particionálási szabályzattal rendelkező táblák számára nincsenek rögzített korlátozások beállítva. Azonban minden további tábla többletterhelést okoz a fürt csomópontjaion futó háttéradat-particionálási folyamathoz. Ha több táblára állít be szabályzatot, az több fürterőforrást fog használni, és a mögöttes tárolótranzakciók miatt magasabb lesz a költség. További információ: kapacitás.
  • Nem ajánlott particionálási szabályzatot beállítani, ha az adatok partíciónkénti tömörített mérete várhatóan 1 GB-nál kisebb lesz.
  • A particionálási folyamat reziduális tárolási összetevőket eredményez a particionálási folyamat és az egyesítési folyamat során lecserélt összes mértékre vonatkozóan. A fennmaradó tárolóösszetevők többsége várhatóan törlődik az automatikus törlési folyamat során. A tulajdonság értékének növelése növeli a MaxPartitionCount reziduális tárolási összetevők számát, és csökkentheti a tisztítási teljesítményt.
  • Mielőtt particionálási szabályzatot alkalmaz egy materializált nézetre, tekintse át a materializált nézetek particionálási szabályzatára vonatkozó javaslatokat.

Partíciókulcsok

A rendszer a következő partíciókulcs-típusokat támogatja.

Altípus Oszloptípus Partíció tulajdonságai Partíció értéke
Kivonat string vagy guid Function, MaxPartitionCount, Seed, PartitionAssignmentMode Function(ColumnName, MaxPartitionCount, Seed)
Egységes tartomány datetime RangeSize, Reference, OverrideCreationTime bin_at(ColumnName, RangeSize, Reference)

Kivonatpartíciós kulcs

Ha a szabályzat kivonatpartíciós kulcsot tartalmaz, az ugyanahhoz a partícióhoz tartozó összes homogén kiterjedés ugyanahhoz az adatcsomóponthoz lesz hozzárendelve a fürtben.

Megjegyzés

Az adatparticionálási művelet jelentős feldolgozási terhelést ad hozzá. Azt javasoljuk, hogy csak a következő feltételek mellett alkalmazzon kivonatpartíciós kulcsot egy táblára:

  • Ha a lekérdezések többsége egyenlőségi szűrőket (==, ) használ. in()
  • A lekérdezések többsége egy adott típusú string vagy guidnagy méretű (10 M vagy nagyobb számosságú) oszlopon összesítve/összekapcsolva van, például egy device_IDvagy user_ID.
  • A particionált táblák használati mintája nagy párhuzamos lekérdezési terhelést jelent, például monitorozási vagy irányítópult-alkalmazásokban.
  • Az adatok particionálásához kivonatmoduló függvényt használunk.
  • A homogén (particionált) kiterjedésű adatokat a kivonat partíciókulcsa rendezi.
    • A kivonatpartíciós kulcsot nem kell belefoglalnia a sorrendszabályzatba, ha a táblában van definiálva.
  • Azokat a lekérdezéseket, amelyek az elosztási stratégiát használják, és amelyekben a shuffle key vagy summarizemake-series a táblában joinhasznált kivonatpartíciós kulcs, várhatóan jobban fognak teljesíteni, mivel a fürtcsomópontok közötti áthelyezéshez szükséges adatok mennyisége csökken.

Partíció tulajdonságai

Tulajdonság Leírás Támogatott érték(ek) Javasolt érték
Function A használni kívánt hash-modulo függvény neve. XxHash64
MaxPartitionCount A létrehozandó partíciók maximális száma (a hash-modulo függvény modulo argumentuma) időszakonként. A tartományban (1,2048]. A magasabb értékek nagyobb többletterhelést okoznak a fürt csomópontjainál az adatparticionálási folyamatnál, és az egyes időszakokban nagyobb mértékben. A javasolt érték a következő: 128. A magasabb értékek jelentősen növelik az adatbetöltés utáni particionálás többletterhelését és a metaadatok méretét – ezért nem ajánlott.
Seed A kivonatérték véletlenszerűsítéséhez használható. Pozitív egész szám. 1, amely egyben az alapértelmezett érték is.
PartitionAssignmentMode A partíciók fürtcsomópontokhoz való hozzárendeléséhez használt mód. ByPartition: Az ugyanahhoz a partícióhoz tartozó összes homogén (particionált) kiterjedés ugyanahhoz a csomóponthoz van rendelve.
Uniform: A mértékek partícióértékeit figyelmen kívül hagyja a rendszer. A mértékek egységesen vannak hozzárendelve a fürt csomópontjaihoz.
Ha a lekérdezések nem csatlakoznak vagy nem összesíthetők a kivonatpartíciós kulcson, használja a következőt Uniform: . Ellenkező esetben használja a következőt ByPartition: .

Példa kivonatpartíciós kulcsra

Kivonatpartíciós kulcs egy stringnevű tenant_id- típusú oszlopon. A kivonatfüggvényt XxHash64 használja, amelynek MaxPartitionCount értéke a javasolt érték, az alapértelmezett Seed értéke 1281pedig .

{
  "ColumnName": "tenant_id",
  "Kind": "Hash",
  "Properties": {
    "Function": "XxHash64",
    "MaxPartitionCount": 128,
    "Seed": 1,
    "PartitionAssignmentMode": "Uniform"
  }
}

Egységes tartomány datetime partíciókulcsa

Megjegyzés

Csak akkor alkalmazzon egységes tartományidő partíciókulcsot egy datetime-typed oszlopra egy táblában, ha a táblába betöltött adatok nem valószínű, hogy ennek az oszlopnak megfelelően lesznek rendezve.

Ezekben az esetekben átrendezheti az adatokat a mértékek között, hogy minden egyes mérték korlátozott időtartományból származó rekordokat tartalmazzon. Ez a folyamat azt eredményezi, hogy az datetime oszlop szűrői hatékonyabbak lesznek a lekérdezés időpontjában.

A használt partíciófüggvény bin_at() és nem testreszabható.

Partíció tulajdonságai

Tulajdonság Leírás Javasolt érték
RangeSize Skaláris timespan állandó, amely az egyes datetime partíciók méretét jelzi. Kezdje az értékkel 1.00:00:00 (egy nap). Ne állítson be rövidebb értéket, mert az azt eredményezheti, hogy a táblában nagy számú, nem egyesíthető kis méretű van.
Reference Skaláris datetime állandó, amely egy rögzített időpontot jelez, amely szerint a datetime partíciók egymáshoz vannak igazítva. Kezdje a(z) használatával 1970-01-01 00:00:00. Ha vannak olyan rekordok, amelyekben a datetime partíciókulcs értékekkel rendelkezik null , a partíció értéke a értékre Referencevan állítva.
OverrideCreationTime Azt bool jelzi, hogy az eredményfokozás minimális és maximális létrehozási idejét felül kell-e bírálni a partíciókulcs értékeinek tartományával. Az alapértelmezett érték: false. Állítsa be, true ha az adatok betöltése nem az érkezési idő sorrendjében történik. Egy forrásfájl tartalmazhat például távoli dátum/idő értékeket, és/vagy a betöltés időpontja helyett a datetime értékek alapján szeretné kikényszeríteni a megőrzést vagy a gyorsítótárazást.

Ha OverrideCreationTime a értékre van állítva, előfordulhat, hogy truea mértékek kimaradnak az egyesítési folyamatból. A mértékek kimaradnak, ha létrehozási idejük régebbi, mint a Lookback tábla Extents merge szabályzatának időtartama. Annak érdekében, hogy a mértékek felderíthetők legyenek, állítsa a tulajdonságot a Lookback értékre HotCache.

Egységes tartomány datetime partíciója – példa

A kódrészlet egy egységes datetime tartomány partíciókulcsát jeleníti meg egy datetime nevű beírt oszlopon timestamp. Referenciapontként használja datetime(2021-01-01) az egyes partíciókhoz tartozó méretet 7d , és nem bírálja felül a mértékek létrehozási idejét.

{
  "ColumnName": "timestamp",
  "Kind": "UniformRange",
  "Properties": {
    "Reference": "2021-01-01T00:00:00",
    "RangeSize": "7.00:00:00",
    "OverrideCreationTime": false
  }
}

A szabályzatobjektum

Alapértelmezés szerint a tábla adatparticionálási szabályzata a null, ebben az esetben a tábla adatai nem lesznek újraparticionálva a betöltés után.

Az adatparticionálási szabályzat a következő fő tulajdonságokkal rendelkezik:

  • PartitionKeys:

  • EffectiveDateTime:

    • Az a UTC dátumidő, amelytől a szabályzat érvényes.
    • Ez a tulajdonság nem kötelező. Ha nincs megadva, a szabályzat a szabályzat alkalmazása után betöltött adatokra érvényes lesz.

Figyelemfelhívás

  • Beállíthat egy datetime értéket a múltban, és particionálhatja a már betöltött adatokat. Ez a gyakorlat azonban jelentősen növelheti a particionálási folyamat során használt erőforrásokat.
  • A legtöbb esetben javasoljuk, hogy csak az újonnan betöltött adatokat particionálja, és kerülje a nagy mennyiségű előzményadat particionálását.
  • Ha úgy dönt, hogy particionálja az előzményadatokat, fontolja meg ezt fokozatosan. Ehhez állítsa az EffectiveDateTime értéket egy korábbira datetime a szabályzat módosításakor akár néhány napos lépésekben.

Példa adatparticionálásra

Adatparticionálási szabályzatobjektum két partíciókulcsgal.

  1. Kivonatpartíciós kulcs egy stringnevű tenant_id-typed oszlopon keresztül.
    • A kivonatfüggvényt XxHash64 használja, amely MaxPartitionCount az ajánlott értékre és az alapértelmezett Seed értékre 1281van állítva.
  2. Egy egységes datetime tartomány partíciókulcsa egy datetime nevű timestamptípusoszlopon.
    • Referenciapontként használja datetime(2021-01-01) az egyes partíciókhoz 7d tartozó méretet.
{
  "PartitionKeys": [
    {
      "ColumnName": "tenant_id",
      "Kind": "Hash",
      "Properties": {
        "Function": "XxHash64",
        "MaxPartitionCount": 128,
        "Seed": 1,
        "PartitionAssignmentMode": "Uniform"
      }
    },
    {
      "ColumnName": "timestamp",
      "Kind": "UniformRange",
      "Properties": {
        "Reference": "2021-01-01T00:00:00",
        "RangeSize": "7.00:00:00",
        "OverrideCreationTime": false
      }
    }
  ]
}

További tulajdonságok

A szabályzat részeként az alábbi tulajdonságok definiálhatók. Ezek a tulajdonságok nem kötelezőek, ezért javasoljuk, hogy ne módosítsa őket.

Tulajdonság Leírás Javasolt érték Alapértelmezett érték
MinRowCountPerOperation Egyetlen adatparticionálási művelet forrásfokainak sorszámának minimális célja. 0
MaxRowCountPerOperation Egyetlen adatparticionálási művelet forrástartományainak sorszámának maximális célja. Állítson be 5M-nél alacsonyabb értéket, ha azt látja, hogy a particionálási műveletek műveletenként nagy mennyiségű memóriát vagy processzort használnak fel. 0, alapértelmezett célként 5 000 000 rekordot tartalmaz.
MaxOriginalSizePerOperation Egyetlen adatparticionálási művelet forrásterületeinek eredeti méretének (bájtban) maximális célja. Ha a particionálási műveletek műveletenként nagy mennyiségű memóriát vagy processzort használnak fel, állítsa be az 5 GB-nál alacsonyabb értéket. 0, alapértelmezett célértéke 5 368 709 120 bájt (5 GB).

Az adatparticionálási folyamat

  • Az adatparticionálás a betöltés utáni háttérfolyamatként fut a fürtben.
    • A folyamatosan beszúrt tábláknak várhatóan mindig van egy "farka", amely még particionálandó (nemhomogén kiterjedésű).
  • Az adatparticionálás csak gyakori elérésű mértékben fut, függetlenül a EffectiveDateTime szabályzat tulajdonságának értékétől.

Az adatbázis meghatározott szabályzataival rendelkező táblák particionálási állapotát az .show database extents partitioning statistics paranccsal figyelheti.

Particionálási kapacitás

  • Az adatparticionálási folyamat több terjedelem létrehozását eredményezi. A fürt fokozatosan növelheti a kiterjedésű egyesítési kapacitást, hogy a mértékek egyesítésének folyamata lépést tartson.
  • Ha nagy a betöltési átviteli sebesség, vagy elég sok olyan tábla van meghatározva, amely rendelkezik particionálási szabályzattal, a fürt fokozatosan növelheti a Extents partíciókapacitását, hogy a particionálási mértékek folyamata lépést tartson.
  • A túl sok erőforrás használatának elkerülése érdekében ezek a dinamikus növekedések le vannak képezve. Előfordulhat, hogy fokozatosan és lineárisan kell növelnie őket a korláton túl, ha teljesen fel vannak használva.
    • Ha a kapacitások növelése jelentősen megnöveli a fürt erőforrásainak használatát, manuálisan vagy az automatikus skálázás engedélyezésével felskálázhatja a fürtöt/.

Korlátozások

  • Az 5 000 000-nél több kiterjedésű adatbázis adatainak particionálására tett kísérletek szabályozva lesznek.
    • Ilyen esetekben az EffectiveDateTime adatbázis tábláinak particionálási házirendjeinek tulajdonsága automatikusan több órával késik, így újraértékelheti a konfigurációt és a szabályzatokat.

Kiugró értékek particionált oszlopokban

  • A következő helyzetek hozzájárulhatnak az adatok fürtcsomópontok közötti egyensúlytalan elosztásához, és csökkenthetik a lekérdezési teljesítményt:
    • Ha a kivonat partíciókulcsa olyan értékeket tartalmaz, amelyek sokkal elterjedtebbek, mint mások, például egy üres sztring vagy egy általános érték (például null vagy N/A).
    • Az értékek egy olyan entitást (például tenant_id) jelölnek, amely az adathalmazban elterjedtebb.
  • Ha egy egységes tartomány datetime partíciókulcsa elég nagy százalékban tartalmaz olyan értékeket, amelyek "messze" vannak az oszlopban lévő értékek többségétől, az adatparticionálási folyamat többletterhelése nő, és sok kis mértékben vezethet ahhoz, hogy a fürtnek nyomon kell követnie azokat. Ilyen helyzet például a távoli múltból vagy jövőből származó dátum/idő értékek.

Mindkét esetben "javítsa" ki az adatokat, vagy szűrje ki az adatokban a betöltési idő előtti vagy a betöltési időpontban lévő irreleváns rekordokat, hogy csökkentse a fürt adatparticionálásának többletterhelését. Használjon például frissítési szabályzatot.