Stressz teszt


Adott a következő probléma: A vállalatnál működik egy OLAP alapú adatpiac, amelybe első körbe csak az élő rendszerből betöltött adatok kerültek be. Most azonban a hosszabbtávú elemzések futtatásához a vállalatnak szüksége van az archivált (forrásrendszerekben már nem megtalálható) adatok betöltésére is. Ezt a feladatot kell megoldanunk. Természetesen úgy, hogy közben ne nőjenek jelentősen a válaszidők.

Annak idején, amikor az adatpiacot elkészítettük, büszkén állítottuk a menedzsereknek, hogy ez a rendszer úgy lett megtervezve, hogy a mostani adatmennyiség többszörösét is képes lesz elviselni. Most rajtunk a sor, hogy mindezt be is bizonyítsuk.

Stressz tesztek

A módszer rém egyszerű: gyűjtsünk össze jó sok lekérdezést. Ezt futtassuk le mindkét adatbázison: Az archív adatokat tartalmazó „új" és az archív adatokat nem tartalmazó „régi" adatbázison is. Mérjük mindkét esetben a válaszidőket, és hasonlítsuk össze az eredményt. Ha nincs szignifikáns különbség a két adatbázison mért válaszidőkben, akkor megmarad a mundér becsülete.

A bizonyításhoz három dologra lesz szükségünk: Sok-sok lekérdezésre, egy programra ami lefuttatja helyettünk a sok-sok lekérdezést, és egy eszközre, ami méri a válaszidőket.

A lekérdezések összegyűjtésének módszeréről írtam már a múlt héten. Azóta ezzel a módszerrel összegyűjtöttem 1217 lekérdezést úgy, hogy a felhasználóknak nem szóltam. Napi rutinjuk szerint dolgoztak, így a kapott lekérdezések valós felhasználói igények voltak.

A következő lépés a lekérdezések lefuttatása a régi és új adatbázisokon. Ezeket lefuttathatjuk kézzel is, de a XXI. században ez a módszer nem túl elterjedt. Helyette érdemes valami gépesített megoldást keresnünk.

ASCMD

Először az ASCMD parancssoros utility-vel próbálkoztam a lekérdezéseket futtatni, de megmondom őszintén nem tudtam beizzítani. (legalábbis azalatt a két óra alatt, amit engedélyeztem magamnak a kísérletezésre. Tuti ötletem ugyanis volt (SSIS), de le akartam térni a járt útról)

SSIS

Maradt a járt út, az Integration Services. Az elképzelés - ami aztán megvalósult - az volt, hogy kéne írni SSIS-ben egy betöltő csomagot, amely végigmegy egy táblában tárolt MDX lekérdezéseken és rendre lefuttatja őket:

MDX lekérdezések futtatása SSIS-ből

MDX lekérdezések futtatása SSIS-ből

Megjegyzések

  • A fekete dobozban (trace fájl) tárolt lekérdezéseket az itt leírt módon exportáltam ki egy táblába.
  • Tábla helyett használhatjuk magát a trace fájlt is, ha telepítjük a Trace file source adatpert. Nekem ez idő hiányában elmaradt.
  • Az MDX lekérdezéseket Execute SQL taskból futtattam úgy, hogy a Connection Type-ot ADO-ra állítottam (Az ADO mellett az itt olvasható okok miatt döntöttem)

Eredmény

A válaszidők gyakorlatilag változatlanok maradtak. Az 1217 lekérdezésből 1207 futott le 5 másodpercen belül az archivált adatok betöltése előtt és 1211 a betöltés után. Ha mindezt százalékosan is megvizsgáljuk, akkor azt láthatjuk, hogy az archivált adatok betöltése előtt az összes lekérdezés 99,2%-a futott le 5 másodpercen belül, míg utána 99,5%

Az összes lekérdezés %-ka a válaszidők függvényében

Az összes lekérdezés %-ka a válaszidők függvényében

Megmarad tehát a mundér becsülete.

 

 

Elválasztó

Már készül a következő cikk. Kérjen értesítést a megjelenéséről itt.

|

Kővári Attila
2009. június 30.
Címkék: