Particionált táblák és indexek

A nagy táblák vagy indexek felosztása a következő előnyökkel járhat a kezelhetőség és a teljesítmény terén.

Ez lehetővé teszi az adatok részhalmazainak gyors és hatékony átvitelét és elérését, miközben megőrzi az adatkészlet integritását. Például olyan művelet, mint például OLTP-adatok OLAP-rendszerre történő feltöltése másodpercekben, nem percekben és órákban történik, mint a nem particionált adatok esetén.







A karbantartási műveletek gyorsabban végrehajthatók egy vagy több szakaszban. A műveletek hatékonyabbak, mivel azokat csak adatcsoportokkal végzik, nem pedig az egész táblával. Például tömörítheti az adatokat egy vagy több szakaszra, vagy újraépítheti az index egy vagy több szakaszát.

Javíthatja a lekérdezés végrehajtásának sebességét, attól függően, hogy a lekérdezések milyen gyakran kerülnek végrehajtásra a hardverkonfigurációban. Például, a lekérdezés optimalizáló gyorsan végezhet lekérdezéseket a equi-join két vagy több partíciós táblázatot, ha ezek a táblázatok ugyanazok particionáló oszlopokat, mert akkor csatlakozni magad oldalunkon.

Az SQL Server I / O műveletek adatainak rendezése során először az adatokat szekció szerint szétválogatják. Az SQL Server csak egyszer tud hozzáférni egy lemezhez, ami csökkenti a teljesítményt. Az adatok rendezésének felgyorsítása érdekében ajánlott az adatfájlok szétosztása több merevlemezen, RAID létrehozásával. Így, bár az adatok szekciók szerint rendezve vannak, az SQL Server egyszerre hozzáférhet az egyes partíciók összes merevlemezéhez.

Ezenkívül javíthatja a teljesítményt azáltal, hogy zárolásokat alkalmaz a szakasz szintjén, nem pedig a teljes táblázatban. Ez csökkentheti az asztalra vonatkozó zárolási ütközések számát.

Az alábbi kifejezések a táblázatok és indexek particionálására vonatkoznak.

Olyan adatbázis-objektum, amely meghatározza az oszlopok vagy indexsorok elosztását szakaszok szerint az egyes oszlopok, az úgynevezett partíciós oszlopok alapján. Vagyis a partíció függvény határozza meg a táblázatban a partíciók számát és a partíció határainak meghatározását. Például egy vevői rendelést tartalmazó táblázatot tartalmazó táblázathoz szükség lehet arra, hogy a táblázat 12 havi szakaszra oszthasson a datetime oszlop értékein alapulva. például az eladás időpontjáig.

Olyan adatbázis-objektum, amely a partíció függvényeit szakaszokra csoportosítja. A főbb oka annak, hogy a szekciók különböző filegroup-okra vannak felosztva, szükség van az ilyen partíciók független biztonsági mentésére, mivel mindegyik filegroup-on külön-külön történik.

A partíció funkció által használt táblázat vagy index oszlopa az asztal vagy index megosztásához. A partíciós funkcióban részt vevő számított oszlopokat kifejezetten PERSISTED karakterként kell megjelölni. Az index oszlopokhoz használható összes adattípus használható partíciós oszlopként, kivéve az időbélyegzőt. A Ntext adat típusokat nem lehet megadni. szöveget. képet. xml. varchar (max). nvarchar (max) és varbinary (max). Emellett nem adhat meg egy felhasználó által definiált adattípust a Microsoft .NET Framework CLR és az álnév adattípusok oszlopaihoz.

Az index ugyanazzal a partícionálási rendszerrel, mint a megfelelő táblázat. Ha az asztal és annak indexei igazodnak egymáshoz, az SQL Server gyorsan átválthat szakaszról szakaszra, miközben megőrzi mind az asztal, mind pedig az indexek partíciószerkezetét. Az alaptáblához való igazításhoz az indexnek nem kell ugyanazt a partíciós funkciót használni. Azonban, nincs funkciója kell partíció a index táblázat, és a bázis jelentősen változhat, azaz 1) a partíció függvényargumentumok kell ugyanazokat az adatokat típusú, 2) a funkciók kell határoznia az azonos szakaszok száma és a 3) függvény kell határoznia az azonos szakasz határ értékeket.

Az index a megfelelő táblától függetlenül van felosztva. Vagyis az indexnek más partícionálási sémája van, vagy nincs abban a fájlcsoportban, ahol az alaptáblázat található. A megosztatlan megosztott index létrehozása hasznos lehet a következő esetekben:







Az alaptábla nem partícionált.

Az indexkulcs egyedi, és nem tartalmaz táblázatos megosztási oszlopot.

Az alaptábla részt vesz az összehangolt csatlakozásokban olyan táblákkal, amelyek más csatlakozási oszlopokat használnak.

Az a folyamat, amelyben a lekérdezés optimalizáló csak bizonyos szakaszokat fér hozzá a lekérdező szűrőhöz.

A szakaszok magasabb száma (15 000) befolyásolja a memóriát, a particionált index műveleteket, a DBCC parancsokat és a lekérdezéseket. Ez a rész bemutatja, hogy a teljesítmény hogyan befolyásolja több mint 1000 szakasz létrehozását és a problémák megoldását. A szakaszok maximális számának növelése 15 000-re teszi lehetővé az adatok hosszabb tárolását. Azonban ajánlott az adatok pontos tárolása, ameddig szükséges, és egyensúly fenntartása a teljesítmény és a szakaszok száma között.

Memóriahasználat és ajánlások

Számos használt partíciónál legalább 16 GB RAM-ot ajánlunk használni. Ha a rendszer nem rendelkezik elegendő memóriával meghiúsulhat adatkezelési nyelvet utasítások (DML), az adatok meghatározása nyelv utasításait (DDL) és egyéb műveletek hiánya miatt a memória. Azokban a rendszerekben, 16 GB RAM-mal és egy nagyszámú eljárás, memória- és nem műveletek dolgozik egy nagy szakaszok száma, hiánya miatt a memóriát. Ezért minél több memória van, mint a 16 GB-nál nagyobb, annál kevésbé valószínű a teljesítmény és a memória problémája.

A RAM korlátozásai hatással lehetnek a teljesítményre vagy a partícionált index létrehozására. Ez például akkor történik meg, ha az index nem egyezik az alaptáblájával vagy a fürtözött indexével, ha ilyen létezik a táblázatban.

Partícionált indexekkel végzett műveletek

A RAM korlátozásai hatással lehetnek a teljesítményre vagy a partícionált index létrehozására. Ez különösen igaz a nem igazolt indexekre. Leegyszerűsíthető, de nem támogatott táblázattal nem rendelkező mutatószámok létrehozása és újbóli létrehozása több mint 1000-nél. Ez az ilyen műveletek során teljesítmény romlásához vagy túlzott memóriafelhasználáshoz vezethet.

Az igazított indexek létrehozása és átrendezése több időt vehet igénybe, ahogy a szakaszok száma nő. Nem ajánlott több parancsot végrehajtani az index létrehozásához és újbóli létrehozásához egy időben, mivel vannak teljesítmény- és memóriaproblémák.

Amikor egy SQL Server összetevő végrehajtja a partícionált indexek létrehozásának rendezését, először létrehoz egy sort táblát minden egyes szakaszhoz. Ezután létrehoz egy sort táblázatot az egyes szakaszok megfelelő fájlcsoportjában vagy a tempdb-ben. ha a SORT_IN_TEMPDB paraméter van megadva. Mindenfajta táblázatok minimális RAM-ot igényelnek. Amikor partíciózott indexet állít össze, az alaptáblához igazítva, a rendezési táblázatokat egyenként hozza létre, a memória dinamikus mentése. Ugyanakkor, ha létrehoz egy megosztatlan megosztott indexet, egyszerre hozhatók létre táblák. Ennek eredményeképpen elegendő RAM-ra van szükség ahhoz, hogy párhuzamosan dolgozzon. Minél nagyobb a szakaszok száma, annál több RAM szükséges. A szakaszok mindegyikéhez legalább 40 oldal, 8 kilobájtnyi méretű. Például, egy nem szintezett particionált index, 100 részre osztva, a RAM nagyságának 4000 oldal (40 * 100) egyidejű rendezéséhez szükséges. Ha ez a memória mennyisége elérhető, akkor a létrehozási művelet sikeres lesz, de a teljesítmény szenvedhet. Ha ez a memória mennyisége nem érhető el, a build művelet sikertelen lesz. 100 részre osztott, igazított partícionált index esetén csak 40 oldal szükséges a válogatáshoz, mivel a válogatások nem egyszerre futnak.

Mindkét rendezi és el nem kötelezett az indexek szükség lehet több RAM, ha az SQL Server a párhuzamosságát létrehozni művelet többprocesszoros számítógépre. Minél nagyobb a párhuzamosság mértéke, annál több RAM-ra van szükség. Például, ha az SQL Server beállítja a párhuzamosságát 4, az el nem kötelezett megosztjuk index 100 szakaszokat memória négy processzort egyszerre fajta 4000 oldal, azaz 16.000 oldalakon. Ha a particionált index igazodik, akkor a RAM-követelmények 40 oldalra csökkennek a négy processzor mindegyikéhez, vagyis 160 oldal (4 * 40). A MAXDOP index paraméterrel manuálisan csökkentheti a párhuzamosság mértékét.

DBCC parancsok

Több szakasz esetén a DBCC parancsok végrehajtása hosszabb ideig tarthat, mint a szakaszok száma.

Azt a kérést, hogy a részeltávolítási funkció használata hasonló vagy nagyobb teljesítményű lehet, számos szakaszban. A törlési szakaszok funkcióját nem használó lekérdezések hosszabb ideig tarthatnak, ahogy a szakaszok száma nő.

Tegyük fel, táblázatnak 100 millió sorok és oszlopok A. B és C A példában az 1. táblázat van osztva 1000 szakaszok az A. oszlop A példában a 2. táblázat van osztva oszlopban lévő szakaszok 10.000 A. lekérdezőtábla, amely képletekben ajánlatot szűrjük oszlopon A. végrehajtja a szekciók eltávolításának és egy szekció beolvasásának funkcióját. Ugyanez a lekérdezés gyorsabban végrehajtható a 2. példában, mivel kevés a szkennelési vonal a szakaszban. A B oszlopban lévő szűrővel rendelkező WHERE záradék lekérdezés minden szekciót szkennel. Az 1. példában ezt a kérelmet lehet gyorsabb, mint a 2. példában, mivel ebben az esetben kisebb szakaszokra szkenneléshez.

Request, ahol az ilyen szereplők TOP vagy a MAX / MIN, használják az összes oszlop kivételével oszlopok particionálás tapasztalhatnak csökkent teljesítményt particionálás, mert minden szakasz szerint kell kiszámítani.




Kapcsolódó cikkek