Index tuning wizard - få ut det bästa resultatet
Förord
The Index Tuning Wizard är ett mycket användbart verktyg som kan analysera SQL-satser och föreslå ändringar som kan både höja och förbättra funktionerna av dem, och som följer med i SQL Server 7.0 och SQL Server 2000 Profiler. I denna artikel tänker jag visa på hur du kan få ut det allra bästa av att använda The Index Tuning Wizard.
Hur Guiden fungerar
Det första du gör är att du pekar ut en kopia av den databas som du vill analysera, till din Index Tuning Wizard. Sedan ”matar” du Guiden med en sökfil (vilket är en samling SQL-satser som du använder mot databasen i fråga) för att sedan lämna Guiden till att arbeta. Det den gör är att den går igenom satserna och funderar ut om ändringar i satserna skulle förbättra deras prestanda.
Hur du skapar din sökfil
Om du håller på att skapa en ny databas så kan det vara svårt att gissa sig till vilka de ”representativa” kommandona är, och om SQL-satserna utvecklas fritt av webbklienter t ex, så kan det finnas ett oräkneligt antal variationer av SQL-satser som går att köras. Om så är fallet så är det bara att gissa sig till vad din sökfil ska bestå av. Ett sätt att göra detta på är att skapa anrop med ”representativa” parametrar till dessa sparade procedurer. Som det ser ut i verkligheten så är det inga problem med att skapa en sökfil eftersom SQL Server Profilers sökfunktion gör detta åt dig. Bara peka ut en databas som används för Profilern, så spelar den in de SQL-satser som körs. Glöm bara inte att peka ut databasens ID i filtersektionen (du kan få tag på den aktuella databasens ID genom att köra ”SELECT DB_ID()”) för att inte få med SQL-satser från andra databaser. Du kan också klippa ut all ”Connection” info för att hålla sökfilen så liten som möjligt.
Att köra Index Tuning Wizard
Jag föredrar att minimera lasten på SQL Servern genom att köra Profiler och spara resultaten som en *.trc-fil på en annan maskin än min SQL Server. Det är särskilt viktigt att göra det i en aktiv miljö, eftersom du vill hålla lasten nere så mycket som möjligt på en aktiv Server.När jag väl har skapat min sökfil så måste jag köra Index Tuning Wizard mot databasen i fråga. För att återigen minska lasten på Servern, så kör jag helst på en utbildningsmaskin där jag har den senaste kopian på vilken aktiv databas som helst som jag har kört sökfilen mot. The Index Tuning Wizard arbetar enligt ett ”logiskt I/O” underlag – som inte är beroende utav maskinen – så det spelar ingen roll om maskinen du arbetar på har samma hårdvara som de aktiva miljömaskinerna.
The Index Tuning Wizard kommer att föreslå ett antal Index åt dig, vilka redan kommer att finnas på plats, och den kommer att generera ett skript som kommer att skapa nya Index åt dig, vilka du bör spara på disken till senare bruk. Om du vill så kan du välja att din Wizard skapar nya Index åt dig med en gång, eller så kan du schemalägga det arbetet till en lugnare tidpunkt.
Hur du behandlar resultaten
Bland många andra saker så kommer din Wizard att lägga fram en ”Topp-100-lista” av de SQL-satser som den tror kommer att dra mest fördel av att du gjort de ändringar den föreslagit. Den låter dig sedan spara denna Topp 100 listan som en SQL-fil, vilket jag rekommenderar att du verkligen gör, för de kan komma till användning senare. Wizarden kommer sedan att fråga om den ska lägga in det nya Indexet med en gång. Jag brukar vanligtvis svara ”Ja” på denna fråga, eftersom jag brukar köra Index Tuning Wizard mot en kopia av en databas som ändå är under utveckling. När den har lagt in de nya satserna kan jag nu jämföra den ”nya” databasen (med de nyligen inlagda Indexen) mot den ”gamla” aktiva databasen (eller en annan kopia av den).
Det är nu de ”mest förbättrade” SQL-satserna som vi sparade förut är bra att ha. Antingen jämför jag de nya SQL-satserna med SQL-satserna som finns i varje kopia av databasen, eller så kör jag de nya satserna för att se om jag märker någon förbättrad tidsskillnad. Det är kanske onödigt att påpeka att du inte bör testa de nya satserna på den aktiva databasen.
När jag väl har försäkrat mig om att min Index Tuning Wizards rekommendationer är värda att spara, så jag kan implementera de nya satserna till en aktiv miljö. Men var inte alltid så säker på att rekommendationerna alltid är bättre. Jag förklarar närmare sen.
Tips och tricks
Det kan vara frestande att fylla din sökfil med så mycket data som möjligt för att göra dina tester mer ”representativa”, men jag föreslår att du inte gör det på grund av följande:- Guiden kommer bara att behandla upp till 32 000 olika satser ändå.
- Du kommer att få många satser som är väldigt lika, och dem kan komma att fylla upp hela den Topp 100 listan av förbättrade satser som Guiden ger dig. Om du använder en mindre mängd data så får du en bättre distribuerad och finfördelad lista på olika förbättrade satser, och därmed kan du dubbelkolla fler av Guidens rekommendationer.
- Om du däremot skulle ha en stor sökfil så kan du ange ett mer hanterbart antal satser som Guiden ska kolla igenom genom att ändra vissa inställningar under ”Advanced” knappen.
- Om du sedan verkligen vill kolla igenom en stor mängd data så föreslår jag att du delar upp dem i mindre bitar, och kollar igenom de sammanlagda resultaten.
Kom ihåg att ett nytt index kan snabba på en del operationer, men de kan också sakta ner vissa andra, som t ex INSERT, UPDATE eller DELETE (eftersom de nya Indexen också måste uppdateras). Det här är någonting som du måste fundera över innan du applicerar något nytt Index. Om din Index Tuning Wizard säger att du bör använda den nya satsen för att öka hastigheten till att få ut stora mängder data, fastän du bara använder INSERT i den tabellen, så bör du kanske inte lägga in den nya Indexen trots allt.
Kom också ihåg att användningsprofilen av databasen kan ändras över hela dagen. Det kan vara så att du lägger in data under dagarna och skapar en batchrapport på kvällarna. Många Index föredrar att du samlar in batchrapporter hellre än att du samlar in data, men jag föreslår att du håller transaktionsnivån nere medan du samlar in data. Under dagen sitter användarna och väntar på att någonting ska hända i tillfredsställande takt, medan du har hela kvällen och natten på dig till att göra dina rapporter.
The Index Tuning Wizard har som standard att godkänna Index som kan ha upp till 16 kolumner. Men man brukar generellt sett rekommendera att Indexer ska vara så täta som möjligt, och jag brukar ändra sådana inställningar under ”Advanced” knappen.
Om Index Tuning Wizard föreslår ett Index som bara skalar av en liten del av tiden för en SQL-sats som redan verkar gå relativt snabbt så bör du inte avfärda den det första du gör. För även om det är en så liten skillnad så att du inte märker den direkt så kan du komma att märka den sammanlagda reducerade tiden då många användare har använt sig utav den, och det kan vara värt det.
0 Kommentarer