Lerövidítheti a boot idejű adattárház, ablakok IT Pro

Küldj egy kérés egy anyag

Nemrég optimalizálásához szükséges a szakaszos eljárás végezzük minden este az adattárház SQL Server társított letöltését több mint 250 ezer. Strukturálatlan fájlokat. Miután némi kísérletezés voltam képes csökkenteni a teljes terhelést idő 14 óra 15 perc.

Erre szoktam:

Menjünk végig a folyamat a határozat végrehajtásában.

Általános megjegyzések

Lerövidítheti a boot idejű adattárház, ablakok IT Pro

1. Reboot képernyő adatok segítségével SQL Server Integration Services csomag

Itt szeretném megmagyarázni, hogy miért kell betölteni az értékeket adatsort az adatbázisban. Első pillantásra, megőrzése az adatállomány a vonal (amely csak a két területen - a dátum és az érték) az adatbázisban nincs szükség. Azt gondoltam, hogy tartani őket az eredeti formátumban (külön fájl), vagy használjon egy adatbázis, amely eltér az SQL (például Hadoop). De az egyik legfontosabb követelmény az volt a számítás adatsort összefüggést a teljes adatbázis. Hála az SQL adatbázis képességeit (és az alapján egy sor lekérdezések) képesek elvégezni egy ilyen lekérdezés körülbelül egy percig közepes teljesítmény szerveren.

Javítja a teljesítményt - váltás SSIS csomag

A teljesítmény növelése érdekében tettem kísérletet, hogy optimalizálja a SSIS csomagot. A tesztelés egy kis részét az adatok (1000 adat vonal) csomag az eredeti állapotában hajtották végre 3,5 percig. Feladatokkal adatfolyam nem használhatja OLE DB Destination, és az SQL Destination, már csökkentették a csomag futásidejű maximum 1,5 perc.

Aztán tekinthető különböző módszerek párhuzamos végrehajtását SSIS csomagot. Megváltoztattam a csomag egyidejű feldolgozását különböző csomagok fájlok (formájában több feladatot adatfolyam), létrehozott egy jelentős csomagot, a párhuzamos végrehajtás az alapcsomag (lásd. 2. ábra mutatja), és kivett néhány kombinációt ezek kölcsönhatása. Sajnos, nem tudtam, hogy jobb teljesítményt. A számítógépen nem vette észre CPU túlterhelés, memória vagy lemezterület, de SSIS sávszélesség arányában csökkent az egyidejűleg számos feldolgozott fájlokat.

Lerövidítheti a boot idejű adattárház, ablakok IT Pro

Képernyő 2. Párhuzamos végrehajtás magcsomagok

Én azonban nem volt kétséges, hogy lehetséges, hogy javítsa a párhuzamos feldolgozást az SSIS, ezért úgy döntöttem, hogy fontolóra alternatív módon le fájlokat.

BULK INSERT parancs

BULK INSERT parancs jelent meg a SQL Server 7.0 és betöltéséhez használt adatokat a fájlt egy tábla vagy nézet. Ez nem olyan rugalmas, mint a SSIS csomagot, de elég jó konfigurálható, és lehetővé teszi, hogy boot mind helyi, mind a távoli fájlok többféle formátumban. A tömeges INSERT érvek tudja ellenőrizni a méret a tranzakció, az átirányítási hibák (és jelzi a megengedett legnagyobb hibák száma), valamint a magatartás megváltoztatására, és zárja le a ravaszt feltételeiről aktiválását az asztalra.

Amint az 1. listán elkészítettem egy T-SQL szkript kurzort elfog a fájl elérési útját a betűk (megjegyzendő, hogy a SSIS csomagot végighaladni utak fájlok ciklikus feladat foreach). Bent a kurzort hívtam BULK INSERT parancsot kell tölteni a sorozat a köztes tábla; befejezése után a kurzor I futtatni egy tárolt eljárás ([DBO]. [spI_SeriesValue]) kombinálásának a közbenső eredmények a céltáblát.

Az első alkalommal futtatja a szkriptet Management Studio, úgy tűnt nekem, hogy semmi sem történt volna. Én voltam a veszteség: néhány másodpercig a lekérdezés eredménye ablak lehetett látni az üres net. Aztán, mintha felébred, az SQL Server kezdett lázasan, hogy adatokat szolgáltassanak. Nem hittem a szememnek, és indítsa újra a szkriptet. A második alkalommal, az eredmény kaptuk még valamivel gyorsabban - 5 másodperc alatt! Ez volt a határozat, amellyel a teljes szekvencia potenciálisan újraindítani 25 perc alatt.

Azonban, tesztelés után egy nagyobb számú sorozatban ez kiderült, hogy a forgatókönyv nem lineárisan skálázás történt (például, a feldolgozási idő 5 tysyachnoy szekvencia körülbelül 32 másodperc - csökkentése a termelékenység mintegy 20% -kal). Azonban még mindig akarta kideríteni, hogy lehetséges-e, hogy megszüntesse egy bizonyos számú írási műveletek az adatfájlok és belépés kapcsolódó megállóhelyek használata táblázatokban.

Táblázatok vannak optimalizálva elhelyezésére memória

Megváltoztattam a kódot 1. lista felhasználás optimalizált elhelyezése a memóriában, a rövid távú, a köztes táblázatokban. Az ezredik tesztsorozat script teljesítménye közel azonos volt, mint korábban (

5 másodperc). Az ismételt végrehajtását egy nagyobb csoportját (5? Ezredik szekvencia) a forgatókönyvet már befejeződött, 22 másodperc alatt.

Most volt egy lineárisan skálázható megoldás a csökkentett számú írási művelet az adatfájlok és naplók (a felvételt a lemez nem áll rendelkezésre, kivéve az utolsó csapatok szövetsége). Utolsó lépésként, úgy döntöttem, hogy megtudja, hogy tudok végre több változatban a szkript párhuzamosan, miközben a lineáris skálázás.

Aszinkron végrehajtása a T-SQL parancsokat

Én változott a forgatókönyv, hogy adja meg az elején vagy végén a tartományban az adatok sorrendje a sorozat csomag értékét, hogy időről időre küldeményeket a részletező tábla a cél táblát, majd mentse a változtatásokat, mint egy tárolt eljárást. Lehetséges lenne, hogy visszatérjen a csomag SSIS (több feladatot Execute SQL, hívja a tárolt eljárások), hogy a párhuzamos feldolgozás, de azt akarta, hogy megtaláljuk a módját, T-SQL, vagy hívott által végrehajtott adatbázis szerver. Alapértelmezésben tárolt eljárás vagy T-SQL script végrehajtja minden parancsot szinkronizálást. Keresés az interneten a kulcsszavak aszinkron T-SQL számos lehetőséget biztosít, beleértve a komponens SQL Service Broker, a tárolt eljárás alapján a CLR és dinamikus létrehozását, illetve a végrehajtás az SQL Server Agent feladatok.

Az utóbbi határozat nem tudja feldolgozni az összes adat-re kevesebb, mint 15 perc alatt. Vajon mi a „szerver” (valójában egy virtuális gép egy laptop) jelentős forrásokat a CPU és a memória, így talán képes lesz futtatni további feladatokat párhuzamosan, hogy tovább csökkentsék a feldolgozási időt.

Azt kell mondanom, hogy az újraindítás végre minden este több mint 250.000 tagolt fájlok -. Nem a legjellemzőbb eset. De tudod használni egy (vagy több) leírt három módszer általam (BULK INSERT, a táblázat, amely optimalizált memória és aszinkron végrehajtása a T-SQL) a környezet.

1. listán Script T-SQL Script a BULK INSERT parancs

2. lista létrehozása egy rövid táblázatot, amely optimalizált elhelyezése a raktárban

3. lista Calling SQL Server Agent munkahelyek T-SQL a szervezet aszinkron műveletek

Ossza meg képeit barátaival és kollégáival

Kapcsolódó cikkek