Yllätys??
DB2 v9.7 Pullonkaulojen metsästys, metodeja ja esimerkkejä elävästä elämästä
Sisältö Miksi Miten Työkalut Esimerkkejä
Miksi metsästämme pullonkauloja? http://fi.wiktionary.org/wiki/pullonkaula Substantiivi pullonkaula 1. pullon tai vastaavan säiliön osa, joka johtaa suuaukosta säiliöön ja on tätä kapeampi 2. (kuvaannollisesti) ahdas paikka kulkureitillä, kaventuma 3. (kuvaannollisesti) jotain rajoittava ilmiö Talouskasvun suurin pullonkaula on pula ammattitaitoisesta työvoimasta. Tietojärjestelmän toiminnan nopeuttamiseksi pullonkaulojen eliminointi on usein Helpoin Halvin Nopein tapa saavuttaa positiivisia tuloksia.
Miksi metsästämme pullonkauloja? CPU Suorituskyky Levy I/O Muistin määrä
Kysymyksiä? Kun suorituskykyongelma ilmaantuu, on syytä esittää ainakin seuraavat kysymykset: Kuka kuormittaa? Käyttöjärjestelmä Tietokanta Sovellus Valvonta Miten kuormitus jakautuu? Etsitään kipupisteet ja keskitetään tutkinta niihin
Korkea CPU-kuorma Käyttöjärjestelmä Villiintyneitä prosesseja <defunct Zombie> -attack Sovellus Mitä sovellus tekee korkean kuorman aikana? Miksi? Tietokanta Onko paljon sortteja? Löytyykö erityisen huonoja SQLlauseita? statistiikat päivittämättä? Valvontasovellus Onko valvonnan konfiguraatio kunnossa?
Korjaavat toimenpiteet, CPU Voiko sortteja vähentää esim. indeksoimalla? Onko SQL-lauseille mitään tehtävissä? Statistiikkojen päivitys, reorgtarpeiden kartoitus Onko DB2:n parametrisointi kunnossa db2set db2 get dbm cfg db2 get db cfg for <db> Voidaanko sovelluksen toimintaa/ajoituksia/logiikkaa muuttaa? Sovellusmuutokset Valvontapuolen konfiguraation katselmointi/järkeistäminen
Korkea Levy I/O Käyttöjärjestelmä Ovatko levykäsittelyyn liittyvät parametrit kunnossa? Onko levyjärjestelmän konfiguraatio kunnossa? Sovellus Mitä sovellus tekee korkean kuorman aikana? Miksi? Tietokanta Mikä taulu eniten luettu/kirjoitettu? Onko taulutilojen containerjako + stripe set-jako optimaalinen? Onko DB2:n parametrisointi kunnossa? Valvontasovellus Onko valvonnan konfiguraatio kunnossa?
Korjaavat toimenpiteet, Levy I/O Mahdolliset konfiguraatiomuutokset Levyjärjestelmän konfiguraatiotarkistus+ mahdolliset korjaavat toimenpiteet Eniten kuormitettujen taulujen tutkinta Auttaako indeksoinnin tehostaminen? Taulutilojen health check tasaisesti data-alueilla ei liian pieniä, ei liian isoja 1 stripe set should be enough for everyone Onko DB2:n parametrisointi kunnossa Sovellusmuutokset
Korkea muistin käyttöaste Käyttöjärjestelmä Onko muistisyöppöjä/muistivuotoja? Onko sivutusta? Sovellus Mitä sovellus tekee korkean kuorman aikana? Miksi? Tietokanta Onko muistiparametreissa korjattavaa? Bufferpoolien tarkistus, riittääkö muisti? Valvontasovellus Onko valvonnan konfiguraatio kunnossa?
Korjaavat toimenpiteet, Muisti Käyttöjärjestelmän parametrimuutokset DB2:n konfiguraatiomuutokset Onko tarvetta rajoittaa DB2:n käyttämää muistia instanssi/kantakohtaisesti DB2:n Automatiikka ja sen toiminnan tarkistus Sovellusmuutokset Valvonnan parametrisointimuutokset
Työkaluja ja Apuvälineitä CPU topas Levy I/O ps vmstat iostat nmon db2top DB2 Event monitor DB2 DB2 snapshot DB2 system views Tivoli db2pd patrol db2mtrk Muisti
Työkalut ja apuvälineet, esimerkkejä Patrol-monitoroinnista otettuja yhdistelmägraafeja. Agents+agents executing+cpu ja DB2:n data-alueiden kuormitus
db2top / Dynamic SQL Db2top d <database> D->dynamic sql z 4 ->sort average exec time:n mukaan V ->default schema explaineja varten L <hashvalue> ->koko lause e->explain
db2top / Pullonkaulat B->Bottlenecks
db2top / Taulutilat T->Tablespaces z 1 -> sort RowsRead:n mukaan k ->actual/delta arvot
Esimerkkejä pullonkauloista #1 Ongelma: Ilmoituksia päivittäin satunnaisesti hidastelevasta verkkoyhteydestä Kyseessä radioasema, joka striimaa audion serveriltä Business-kriittinen ongelma Ratkaisu: Kävin kytkemässä näytönsäästäjän serveriltä pois päältä Ongelma: Serverin CPU tapissa usean päivän ajan Päivittäin ajettava eräajosovellus "villiintynyt" Zombie attack Korkea CPU-kuorma Koko järjestelmän hidastuminen Ratkaisu: Eräajo-ohjelman parametrit vinossa, jäi "hullun looppiin". Kun parametrit oli korjattu, niin kaikki oli taas hyvin
Esimerkkejä pullonkauloista #2 Ongelma: Tietokannasta ajetaan päivittäin myyntiraportteja n. 10kpl, kesto 10min/kpl Tutkittiin mahdollisia indeksointivaihtoehtoja Tutkittiin SQL-parannuksia Ratkaisu: Tiedustelu asiakkaalta raporttien tarkoituksesta tuotti vastauksen "Ei tuota enää tarvita, korvasimme sen uuden järjestelmän raporteilla jo 6 kk sitten" Ongelma: Patrol-valvonta vie yhden CPU:n verran moniprosessorijärjestelmässä, jossa ei ole vielä yhtään kuormaa DB2 9.1->9.5 ->uusi versio Patrol-agentista->kovempi "peruskuorma" kuin mitä odotettiin Ratkaisu: Disabloitiin patrol-agentista applikaatiotason valvonta, ylimääräinen kuorma katosi heti
Esimerkkejä pullonkauloista #3 Ongelma: Tietokantapalvelimen levykuorma 100% muutamalla data-alueella satunnaisesti Satunnaista hidastelua Yksittäistä syytä/sql-lausetta ei löytynyt Tarkemmassa tutkinnassa kävi ilmi, että muinaisessa menneisyydessä oli yritetty sijoitella taulutilojen data-alueita fiksusti siten, että kuorma jakaantuisi tasaisesti kaikkien levyalueiden kesken Osassa taulutiloja 1-2 kontaineria, osassa 20 containeria, tämä kaikki jaoteltuna 7:n filesysteemiin Ratkaisu: Kontainerjaon tasaus, ne taulutilat joissa oli vähemmän kuin 7 kontaineria saivat uusia kontainereita, ne taulutilat, joissa oli paljon kontainereita tasattiin myös tasan levyalueiden kesken
Esimerkkejä pullonkauloista #4 Ongelma: Satunnaisia hidasteluja partitioidun taulun lukemisessa Yksi SQL nopea, toinen hidas Pitkällinen tutkinta ja analyysi testijärjestelmässä Yhden datapartition alla olevaan taulutilaan lisätty kontainereita useaan otteeseen begin new stripe set-komennolla lisäten pelkästään yksi container Ratkaisu:Usean stripe setin poisto begin new stripe set, uudet containerit joka data-alueelle dropattiin vanhat containerit->rebalance Vaihtoehtoinen ratkaisu #1: Restore redirect uudella containerjaolla Vaihtoehtoinen ratkaisu #2: Restore dropaten allaoleva kanta-> containerit tulivat yhteen stripe settiin
Kysymyksiä ja avointa keskustelua