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
vagyguid
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
guid
több típusústring
oszlopra szűr, például a vagy aTenantId
MetricId
oszlopra. - 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ékrePartitionAssigmentMode
uniform
.
- 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
- Gyakori összesítések vagy illesztések nagy számosságú
string
vagyguid
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
PartitionAssigmentMode
ByPartition
.
- 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
OverrideCreationTime
true
.
- 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
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
vagyguid
nagy méretű (10 M vagy nagyobb számosságú) oszlopon összesítve/összekapcsolva van, például egydevice_ID
vagyuser_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
vagysummarize
make-series
a táblábanjoin
haszná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 string
nevű 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 128
1
pedig .
{
"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 Reference van á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 true a 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:
- Partíciókulcsok gyűjteménye, amely meghatározza, hogyan particionálja az adatokat a táblában.
- A táblák akár
2
partíciókulcsokkal is rendelkezhetnek, az alábbi lehetőségek egyikével: - Minden partíciókulcs a következő tulajdonságokkal rendelkezik:
ColumnName
:string
– Annak az oszlopnak a neve, amely szerint az adatokat particionálja.Kind
:string
- Az alkalmazandó adatparticionálási típus (Hash
vagyUniformRange
).Properties
:property bag
– A particionálási művelet paramétereit határozza meg.
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.
- Kivonatpartíciós kulcs egy
string
nevűtenant_id
-typed oszlopon keresztül.- A kivonatfüggvényt
XxHash64
használja, amelyMaxPartitionCount
az ajánlott értékre és az alapértelmezettSeed
értékre128
1
van állítva.
- A kivonatfüggvényt
- Egy egységes datetime tartomány partíciókulcsa egy
datetime
nevűtimestamp
típusoszlopon.- Referenciapontként használja
datetime(2021-01-01)
az egyes partíciókhoz7d
tartozó méretet.
- Referenciapontként használja
{
"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.- Ha a ritka elérésű tartományok particionálása szükséges, ideiglenesen módosítania kell a gyorsítótárazási szabályzatot.
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.
- Ilyen esetekben az
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
vagyN/A
). - Az értékek egy olyan entitást (például
tenant_id
) jelölnek, amely az adathalmazban elterjedtebb.
- 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
- 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.
Kapcsolódó tartalom
Visszajelzés
https://aka.ms/ContentUserFeedback.
Hamarosan elérhető: 2024-ben fokozatosan kivezetjük a GitHub-problémákat a tartalom visszajelzési mechanizmusaként, és lecseréljük egy új visszajelzési rendszerre. További információ:Visszajelzés küldése és megtekintése a következőhöz: