For ikke så længe siden gav jeg en tutorial om Forklar plan til vores applikationsudviklingspersonale. Et spørgsmål, der dukkede op, var, hvordan beslutter jeg mig for, hvilke SQL-sætninger der skal justeres? Jeg bruger et par forskellige tilgange og finder SQL tuning kandidater fra forskellige vinkler.
- Jeg udfører rutinemæssigt kodegennemgange på SQL-sætninger, der rammer vores database. Jeg udnytter min erfaring til hurtigt at se på en SQL-sætning, der er ny eller er blevet væsentligt ændret for at beslutte, om jeg skal undersøge SQL'en yderligere. For eksempel, hvis en forespørgsel på en tabel søger på en PK- eller Unique-kolonne, så kan jeg være ret sikker på, at den vil køre hurtigt. Hvis SQL-sætningen ser suspekt ud for mig, vil jeg køre den gennem Explain Plan og/eller time sætningen for at sikre, at den kører tilstrækkeligt.
- Jeg har fået Oracles Enterprise Manager til at advare mig om ressourcestrid i vores testdatabasesystem. Alle SQL-sætninger, jeg gik glip af under kodegennemgang, kan nogle gange findes her. Hvis jeg får en advarsel om ressourcestridighed, vil jeg hoppe videre og se, om en SQL-sætning eller to forårsager et problem. Dette er min sidste chance for at fange SQL-sætninger, før de rammer produktionen.
- Jeg bruger Ignite til Oracle. Dette produkt er fra Confio, men Confio er nu en del af Solarwinds. Normalt tilslutter jeg ikke sælgerens produkter, men jeg vil gøre en undtagelse i dette tilfælde. Det, jeg godt kan lide ved Ignite, er, at jeg sender en rapport til mig hver mandag. Rapporten indeholder Top N lovovertrædere baseret på ventetid. Det tager mig sekunder at se på denne rapport. Jeg leder efter de store søjler i rapporten. I eksemplet på skærmbilledet nedenfor kan du se en blå bjælke, der straks fanger din opmærksomhed. Tallet til højre er en id-værdi, og hvis du klikker på det, kan du få SQL-teksten. Dette er en fantastisk måde at identificere de SQL-sætninger, der skal justeres. Det er super hurtigt og super nemt.
Som du kan se, forsøger jeg at finde problematisk SQL, efterhånden som de udvikles, når de er i vores testsystem, og selv efter at de rammer produktionen.