De wereld is al complex genoeg zonder IT, dus heb ik de schone taak op me genomen om uit te leggen wat AutoDBE doet op een IBM i systeem, zodat iedereen het kan begrijpen. Of dat gelukt is hoop ik van jullie te horen, nadat je dit gelezen hebt.
Op IBM i bestaat een SQL Query Engine (SQE). Het woord engine zegt het al: de SQE is de motor die alle verzoeken om data uit de bestanden te halen oppakt en verwerkt. Tijdens het verwerken van die verzoeken, is er een proces dat kijkt of het verwerken van een verzoek om data op te halen uit de bestanden sneller werkt als er een index zou zijn.
Simpel gezegd: stel je de database van IBM i eens voor als een bibiliotheek vol boeken. Elk boek in die bibiliotheek kun je vergelijken met één bestand in de database. Laat ons het voorbeeld nemen van een boek waarin staat opgeschreven waar de leden van de club wonen en wat hun e-mail adres is. Degene die het boek geschreven heeft, heeft zijn uiterste best gedaan om alle leden in alfabetische volgorde in te voeren. Het enige dat hij niet gedaan heeft is het maken van een inhoudsopgave. Zoals een inhoudsopgave belangrijk is om snel gegevens in het boek te kunnen terugvinden, is een index belangrijk om snel gegevens in een database bestand te kunnen opzoeken. De index is dus in feite de inhoudsopgave van het boek.
In de SQE is er dus een proces dat zegt, “ik mis de inhoudsopgave in het boek op alfabetische volgorde van de lidnaam”. De SQE genereert vervolgens een bestand waarin staat hoe die index eruit moet zien en voor welk boek hij is. Dat bestand is de Index Advisor tabel.
De SQE houdt bij hoe vaak hetzelfde boek gebruikt wordt om clubleden op te zoeken en als steeds opnieuw dezelfde index keer op keer gemist wordt, dan maakt een proces die Index aan in het tijdelijke geheugen van IBM i. Zo'n Index noemen we een “Maintained Temporary Index” (MTI).
Aangezien het een index is die gemaakt wordt in het tijdelijke geheugen van IBM i, is het niet moeilijk om te raden wat er gebeurt als IBM i een herstart krijgt: dan wordt die MTI weggegooid.
De SQE onthoudt alle verzoeken om data op te vragen uit de database zo lang mogelijk. Dat wil zeggen: tot er geen ruimte meer over is in het geheugen. Als de SQE geen ruimte meer heeft om een vorig verzoek te blijven onthouden, wordt de MTI die bij dat verzoek hoort, ook verwijderd.
Als het verzoek om data uit het bestand op te halen wordt verwijderd, heeft het geen zin om de bijhorende MTI te behouden, aangezien er een duidelijke relatie is tussen het verzoek en de MTI.
Het heeft niet veel zin om het verzoek van het aanleveren van data te vergeten, maar de index die daarvoor nodig is toch nog te onthouden. Dat zou ook een verspilling van ruimte zijn.
De totale hoeveelheid ruimte die een SQE gebruikt is ook tijdelijk geheugen, dus ook dat wordt verwijderd bij een herstart van het systeem. De tijdelijke ruimte van de SQE en de tijdelijke ruimte van de MTI’s zijn twee afzonderlijke delen, maar zijn beiden tijdelijk: een IPL/herstart van het systeem verwijdert deze allebei.
AutoDBE kijkt naar alle indexen die geadviseerd worden om aan te maken en zal deze automatisch aanmaken (of niet) op basis van instellingen in de controletabel van AutoDBE. Het voordeel is dat de MTI's dan niet meer nodig zijn en dat er bij een herstart geen indexen meer verloren gaan. Daarnaast kijkt AutoDBE ook of die aangemaakte index wel vaak genoeg gebruikt worden. Ook dit is weer op basis van de instellingen van de controletabel van AutoDBE.
Om uit te leggen wat een reden kan zijn om een door de SQE geadviseerde index te verwijderen, hierbij een voorbeeld.
Stel, we hebben te maken met een meisjesschool en in het bestand van leerlingen bestaat het veld geslacht. Het is niet moeilijk voor te stellen dat op een meisjesschool iedereen op die school een meisje is. De SQE doet een aanname op basis van het veld geslacht dat “man” of “vrouw” kan zijn. In de tabeldefinitie zijn voor het veld geslacht alleen de waarden M of V mogelijk en op basis van dit gegeven, doet de SQE de aanname dat de verdeling 50/50 is. Op de meisjesschool is dat uiteraard ten onrechte, wat tot gevolg heeft dat een index op het veld geslacht geen voordelen oplevert in de performance. Als de naam opgevraagd zou worden van alle meisjes op die school, dan kan die index wel gebruikt worden, maar het netto resultaat is toch dat elk record in het bestand aangeraakt moet worden. In dat geval biedt de index dus geen voordeel en heeft het aanmaken geen zin. Die index zal niet gebruikt worden en kan dus beter verwijderd worden.
Deze processen opvolgen en optimaliseren is in normale omstandigheden een deel van de job van een database engineer. Een database engineer heeft daardoor heel wat manuele taken. AutoDBE automatiseert al deze manuele taken van de database engineer waardoor die zich op andere taken kan concentreren.