Præsentation er lastning. Vent venligst

Præsentation er lastning. Vent venligst

Side 1Copyright © 2007 JaKoFi. All rights reserved. DB2 Performance: Optimering af SQL læsninger mod DB2 med AllFusion Gen Jan Erik Jensen, JaKoFi.

Lignende præsentationer


Præsentationer af emnet: "Side 1Copyright © 2007 JaKoFi. All rights reserved. DB2 Performance: Optimering af SQL læsninger mod DB2 med AllFusion Gen Jan Erik Jensen, JaKoFi."— Præsentationens transcript:

1 Side 1Copyright © 2007 JaKoFi. All rights reserved. DB2 Performance: Optimering af SQL læsninger mod DB2 med AllFusion Gen Jan Erik Jensen, JaKoFi

2 Side 2Copyright © 2007 JaKoFi. All rights reserved. Formål med gennemgangen At give en forståelse for DB2’s virkemåde ved udførsel af læsninger for derved at forstå hvordan performance kan påvirkes positivt.

3 Side 3Copyright © 2007 JaKoFi. All rights reserved. Optimering af SQL læsninger mod DB2 Præsentationens indhold Muligheder for optimering ”Undlad” SQL'et Indekser Ændret datamodellering Gennemgang af teknikken bag tabeller og indekser Principperne bag DB2's valg af accessveje til dataene Indholdet af DB2's explaintabel Måleværktøjer til måling af DB2 performance Arbejdsprocessen ved performanceoptimering af DB2 Snydetricks

4 Side 4Copyright © 2007 JaKoFi. All rights reserved. Indholdet af et READ / SUMMARIZE EACH statement READ EACH entity entity SORTED ASCENDING entity attribute WHERE DESIRED entity attribute IS EQUAL TO local-view attribute AND DESIRED entity attribute IS EQUAL TO local-view attribute AND DESIRED entity is_related_to DESIRED entity SUMMARIZE EACH GROUP OF entity entity WITH THE SAME entity attribute PLACING entity attribute INTO local-view attribute PLACING GROUP count(OCCURRENCES) INTO local-view attribute WHERE DESIRED entity attribute IS EQUAL TO local-view attribute AND DESIRED entity attribute IS EQUAL TO local-view attribute AND DESIRED entity is_related_to DESIRED entity

5 Side 5Copyright © 2007 JaKoFi. All rights reserved. Indholdet af en SQL læsning SELECT kolonne, kolonne, … FROM tabel, tabel, … WHERE kolonne = :hostvariabel AND kolonne = :hostvariabel, … GROUP BY kolonne, kolonne, … HAVING … ORDER BY kolonne, kolonne, … OPTIMIZE FOR xxx ROWS Der angives hvad der ønskes læst – ikke hvordan det fysisk forventes hentet. <- Viewenes attributter <- Entiteternes tabeller <- Statementets where-kriterie <- Summarize’s ”with the same” <- Sorted by på read each <- Statementets optimize markering

6 Side 6Copyright © 2007 JaKoFi. All rights reserved. Eksempel på en forespørgsel Data: Kunder (kundenr, kundenavn, leveringsadresse (vejnavn, husnummer, postnummer, postdistrikt), faktureringsadresse) Ordrer (ordrenr, ordredato, leveringsdato, status (U = udestående, L = leveret), kundenr, ordretotal) Ønsket resultat: En liste med alle udestående ordrer for ordrer bestilt til levering i marts 2007 og bestilt af kunder med postnummer 1780 i deres leveringsadresse.

7 Side 7Copyright © 2007 JaKoFi. All rights reserved. Eksempel på en konkret SQL læsning SELECT kunde.kundenr, ordre.ordrenr, ordre.leveringsdato, ordre.ordretotal FROM ordre, kunde WHERE kunde.levering_postnr = 1780 AND kunde.kundenr = ordre.kundenr AND ordre.leveringsdato between ’2007-03-01’ and ’2007-03-31’ AND ordre.status = ’U’ ORDER BY kunde.kundenr, ordre.ordrenr DB2 vælger selv hvordan læsningen fysisk udføres og resultatet sammenstykkes.

8 Side 8Copyright © 2007 JaKoFi. All rights reserved. Indekser En sorteret liste af nogle udvalgte kolonner fra en tabel defineret i en bestemt rækkefølge og sorteret stigende eller faldende. Indekset giver en hurtig (indekseret) tilgang til dataene, hvis de benyttes i den rækkefølge de indgår i indekset. En tabel kan have mange indekser. DB2 vedligeholder automatisk indekserne når rækker indsættes, opdateres eller slettes fra en tabel.

9 Side 9Copyright © 2007 JaKoFi. All rights reserved. Eksempel på indekser til kunde og ordre eksemplet Kunde: 1: Kundenr 2: Kundenavn, levering_postnr Ordre: 1: Ordrenr 2: Kundenr, Ordrenr 3: Leveringsdato

10 Side 10Copyright © 2007 JaKoFi. All rights reserved. Eksempel på indekser på ordre tabellen OrdrenrRowid …… 12345278 …… KundenrOrdrenrRowid ……… ……… 9876512345278 Lev.datoRowid 20060701278 …… …… OrdrenrKundenrOrdredatoLev.datoStatus… ……………… 12345987652006062320060701U… ……………… Rowid 278 Tabellen Indekserne

11 Side 11Copyright © 2007 JaKoFi. All rights reserved. Fysisk lagring af data på ordre tabellen OrdrenrKundenrKundenavnLev.dato… …………… 1234598765Hansen20060701… …………… …………… …………… …………… …………… …………… …………… …………… Rowid Data Page 21 Tabellen Data Page 22 Data Page 23 278 Tabellen er sorteret efter clusteringindekset

12 Side 12Copyright © 2007 JaKoFi. All rights reserved. Fysisk lagring af data på ordre indekset KundenrOrdrenrRowid ……… ……… ……… ……… ……… 9876509483… Index Page KundenrOrdrenrRowid ……… ……… 9876512345278 ……… ……… 9876516420281 Index Page KundenrOrdrenrIndex Pg ……… 9876509483… 9876516420… ……… ……… ……… Index Page Indekser er lagret som en træstruktur (typisk med 2-3-4 niveauer) Index Row

13 Side 13Copyright © 2007 JaKoFi. All rights reserved. Fysisk lagring af data på indekser og tabeller Index Page Index Page Index Page Index Page Index Page Index Page Index Page Index Page Index Page Index Page Index Page Index Page Index Page Index Page Data Page 4/32K Data Row Data Page 4/32K Data Row Data Page 4/32K Data Row Data Page 4/32K Data Row Clustering- indeks

14 Side 14Copyright © 2007 JaKoFi. All rights reserved. DB2’s valg af accessveje DB2 vælger accessvej ud fra: Indekserne på tabellerne som læses Reduktionsfaktoren for de enkelte kolonner i indekset Sorterings- eller grupperingsrækkefølgen i læsningen (hvis angivet) Antallet af rækker i tabellen (table space scan på små tabeller) Hvis DB2 kan nøjes med at læse indekset (indexonly), så gør den det Hvis der læses flere tabeller i læsningen, så sker det (oftest) en af gangen Reduktionsfaktoren for kolonner: Angiver mængden af forskellige værdier og dermed hvor meget angivelse af kolonnen forventeligt vil reducere den samlede mængde rækker fra tabellen med.

15 Side 15Copyright © 2007 JaKoFi. All rights reserved. Eksempel på DB2’s valg af accessveje SQL’et SELECT kunde.kundenr, ordre.ordrenr, ordre.leveringsdato, ordre.ordretotal FROM ordre, kunde WHERE kunde.levering_postnr = 1780 AND kunde.kundenr = ordre.kundenr AND ordre.leveringsdato between ’2007-03-01’ and ’2007-03-31’ AND ordre.status = ’U’ ORDER BY kunde.kundenr, ordre.ordrenr Indekserne Kunde: 1: Kundenr 2: Kundenavn, levering_postnr Ordre: 1: Ordrenr 2: Kundenr, Ordrenr 3: Leveringsdato DB2’s valg af indeks Ordre indeks nummer 3 er det eneste indeks, som giver en reduktion i mængden af læste records. For hver læst ordre (med status U) vil den tilhørende kunde kunne hentes via kunde indeks nummer 1 for at kontrollere leveringspostnummeret (1780). Resultatet skal efterfølgende sorteres.

16 Side 16Copyright © 2007 JaKoFi. All rights reserved. Mål for optimeringen af SQL læsningerne Reducer mængden af fysisk I/O (”getpages”) – både index pages og data pages. Reducer mængden af behandlede rækker Færre getpages giver mindre ventetid (på grund af fysiske læsninger og på grund af låste rækker) og dermed kortere svartid Færre behandlede rækker giver mindre CPU forbrug og dermed kortere svartid og billigere drift Begge dele giver større evne til at håndtere flere samtidige transaktioner og dermed færre deadlocks og timeouts

17 Side 17Copyright © 2007 JaKoFi. All rights reserved. Indhold af DB2’s explain-tabel For hver DBRM/Package og hvert SQL statement findes information om: De enkelte trin i læsningen Hvilke indeks der blev anvendt (hvis nogen) Hvordan tabellen/indekset blev læst Om der blev udført sortering i læsningen Explain-tabellen får sit indhold af DB2’s Optimizer ved Bind eller Rebind

18 Side 18Copyright © 2007 JaKoFi. All rights reserved. Udtræk af information fra DB2’s explain-tabel SQL til udtræk fra explain-tabellen (PLAN_TABLE): SELECT * FROM ENVP.PLAN_TABLE PTA WHERE PROGNAME LIKE 'KUNDE%' AND BIND_TIME = ( SELECT MAX(BIND_TIME) FROM PROD.PLAN_TABLE PTB WHERE PTB.PROGNAME = PTA.PROGNAME ) ORDER BY PROGNAME, QUERYNO, TIMESTAMP, QBLOCKNO, PLANNO, MIXOPSEQ

19 Side 19Copyright © 2007 JaKoFi. All rights reserved. Eksempel på indhold af DB2’s explain-tabel Gennemgang af regnearket med udtræk fra explain-tabellen Eksempel på udtræk fra explain-tabellen

20 Side 20Copyright © 2007 JaKoFi. All rights reserved. Måleværktøjer - Detector, Strobe eller Omegamon Kan typisk give her-og-nu information om DB2 performance og ressourceforbrug Præsenterer blandt andet DB2’s egne performancemålinger Giver et rigtig godt indtryk af, hvor problemerne findes Giver information om den fysiske tilgang til dataene Eksempel på output fra Detector

21 Side 21Copyright © 2007 JaKoFi. All rights reserved. Arbejdsprocessen ved optimering Find en konkret DBRM/Package som ser ud til at have problemer (via måleværktøjer som Detector, Strobe eller Omegamon) Kig på accessveje ifølge explain-tabellen Undersøg indekserne på de læste tabeller Kig på SQL’et og vurder om DB2’s valg af accessvej ser fornuftig ud Vurder om: SQL’et kan ændres (eventuelt splittes op eller på anden måde forenkles) eller eventuelt er fejlbehæftet DB2 burde vælge andre indekser og eventuelt skal forsøges tvunget dertil (med ændret SQL) Der mangler eller er defineret forkerte indekser på tabellen Der eventuelt er behov for ændret datamodellering

22 Side 22Copyright © 2007 JaKoFi. All rights reserved. Arbejdsprocessen ved nyudvikling/redesign Foretag datamodellering af dataene (nogenlunde på 3. normalform) Lav analyse af den forventede access til dataene Foretag denormalisering af data (men kun hvis behovet er åbenlyst på designtidspunktet) Design indekserne ud fra: Analysen af den forventede access Krav til dataintegritet (typisk entydighed på den brugervendte nøgle) Krav på baggrund af RI (indekser på fremmednøgler) Behov for at kunne joine mellem tabeller Behovet for at kunne udsøge rækker fra tabellen (til søgefunktioner i dialogen) Hold løbende øje med at der findes indekser, som understøtter læsningerne i det SQL, som efterfølgende laves.

23 Side 23Copyright © 2007 JaKoFi. All rights reserved. Snydetricks til at gennemtvinge ændret access READ EACH entity entity SORTED ASCENDING entity attribute WHERE entity attribute + 0 IS EQUAL TO local-view attribute AND concat(entity attribute,””) IS EQUAL TO local-view attribute AND entity is_related_to entity READ EACH entity entity SORTED ASCENDING entity attribute WHERE (entity attribute IS EQUAL TO local-view attribute OR 0 = 1) AND entity attribute IS EQUAL TO local-view attribute AND entity is_related_to entity Metode 1 + 0 (numeriske felter) + 0 DAYS (datoer) Concat (tekstfelter) Metode 2 Tilføj OR 0 = 1 for at undgå brug af indeks

24 Side 24Copyright © 2007 JaKoFi. All rights reserved. Den samlede værktøjskasse Måleværktøj: Detector, Strobe eller Omegamon Analyseværktøj: Explain-tabellen Teoriapparatet: DB2’s valg af dataaccess og reduktion af mængden af getpages

25 Side 25Copyright © 2007 JaKoFi. All rights reserved. Spørgsmål? jan.erik.jensen@jakofi.dk www.jakofi.dk Jeg kan kontaktes via:


Download ppt "Side 1Copyright © 2007 JaKoFi. All rights reserved. DB2 Performance: Optimering af SQL læsninger mod DB2 med AllFusion Gen Jan Erik Jensen, JaKoFi."

Lignende præsentationer


Annoncer fra Google