Using Re-Optimization in MySQL to Improve the Handling of Sub-optimal Query Plans
Abstract
Effektiv innhenting av data er avgjørende for kvaliteten til mange forskjellige applikasjoner og systemer i et datadrevet samfunn. Grunnlaget for effektiv lagring, administrasjon og henting av data gis av databasesystemer. Med så høy avhengighet av databaser er responshastigheten avgjørende. Gjennom en økning i databasebruk kan de originale databasedesignene og optimaliseringsteknikkene vise seg som utilstrekkelige, ettersom datavolumene øker eksponentielt og bruksmønstrene endres. Dette kan resultere i ineffektivitet og dårligere ytelse.
Nåværende databasesystemer er sterkt avhengige av kardinalitetsestimater for å effektivt utføre spørringer. Disse estimatene er avgjørende for databaseytelsen, og store avvik kan skade ytelsen. Re-optimalisering er en teknikk som prøver å håndtere denne utfordringen ved å samle inn statistikk under utføring av spørringer. Hvis estimatene er vesentlig feil startes optimalisering på nytt og innsamlet statistikk erstatter estimatene som var feil. Vi har ikke funnet noen tidligere forsøk på å implementere re-optimalisering i MySQL.
Gjennom implementering av re-optimalisering i MySQL og flere eksperimenter, viser denne studien hvordan re-optimalisering i MySQL kan forbedre ytelsen for kjøring av spørringer betydelig. Implementasjonen setter inn sjekkpunkter i spørringsplanen til en databasespørring. Når et sjekkpunkt oppdager store avvik mellom estimater og antall behandlede rader, startes re-optimalisering for å rette feilen. Resultatene viser at med riktig konfigurasjon for når re-optimalisering skal startes, kan kjøretiden for spørringer reduseres med opptil 28 %. Selv om kun én benchmark og ett datasett har blitt testet mot implementeringen, viser resultatene at re-optimalisering med nesten hvilken som helst konfigurasjon, forbedrer ytelsen. Effective retrieval of data is essential to the success of many different applications and systems in a data-driven society. The foundation for effectively storing, managing, and retrieving data is provided by databasesystems. With such a high reliance on databases, the response speed is crucial for everything to work. With an increase in database usage, the original database designs and optimization techniques may not be sufficient as data volumes increase exponentially and usage patterns change, resulting in inefficiencies and performance degradation.
Current database systems rely heavily on cardinality estimates to efficiently execute queries. These estimates are crucial to database performance, and large deviations can harm performance. Re-optimization is a technique that aims to handle this challenge by collecting statistics during query execution. If the estimates are significantly wrong, optimization is started again and the collected statistics replace the wrong estimates. We have not found any previous attempts to implement re-optimization in MySQL.
Through the implementation of re-optimization in MySQL and multiple experiments, this study shows how re-optimization in MySQL can significantly improve the query execution performance. The implementationinserts checkpoints into the query plan of a database query. When a checkpoint detects large deviations between estimates and the amount of rows processed, re-optimization is triggered to correct the error. The results show that with the right configuration of when to initiate re-optimization, the run-time of queries can be decreased by up to 28%. Although only one benchmark and one dataset have been tested against the implementation, the results show that re-optimization with almost any configuration improves performance.