Pinning Multiple Plans in MySQL
Master thesis

Permanent lenke
https://hdl.handle.net/11250/3088979Utgivelsesdato
2023Metadata
Vis full innførselSamlinger
Sammendrag
De fleste etablerte databasehåndteringssystemr har måter å manipulere spørringsplanleggeren til å lage eksekveringsplaner med spesifikke egenskaper. Dette gir database administratorer et kraftig verktøy til å håndtere den sjeldne, men eksisterende begivenheten der planleggeren produserer dårlige planer som fører til lange eksekveringstider. Fordi dårlige planer kan være katastrofale for ytelse, er det vanlig for et databasehåndteringssystemer å ha minst et slik manipuleringsverktøy. MySQL, som mange andre systemer, tilbyr funksjonaliteten planleggingshint (optimizer hint) som kan manipulere aspekter ved planen. Mange kommersielle systemer tilbyr funksjonalitet som kan manipulere spørringer automatisk, kalt planlåsing (plan pinning). MySQL tilbyr ikke slik funksjonalitet, og MySQL sin nye planlegger har ikke engang planleggingshint.
Dette prosjektet vil forsøke å se om det er mulig å implementere plan låsing (plan pinning) som kan låse flere planer samtidig i MySQL, og hvorvidt disse implementasjonene har god nok ytelse til å kunne brukes i fremtiden. For å få til dette er det gjort en litteraturstudie for å studere eksisterende teknikker for plan manipulasjon og planlåsing. Etterpå ble to forskjellige prototyper implementert i den nye planleggeren. Begge prototypene er i stand til å låse flere planer for en spørring. De to prototypene er join order hint (skjøt rekkefølge hint) som er i stad til å låse flere kompliserte skjøte rekkefølger, og hash-pinning(evt. hash-låsing) som bruker hasher generert fra planer til å pinne hele planer. Så ble et eksperiment kjørt med JOB spørringer gjennomført. Studien av planleggingstidene for JOB spørringer for de to viser at join rekkefølge hintene er mer effektive i snitt, men at hash-låsing har mer potensiale hvis hash genereringsfunksjonen blir bedre. Most mature DBMSs provide some means of manipulating the query optimizer into making query execution plans with specific traits. This gives database administrators a powerful tool to handle the rare but existing cases where the optimizer produces bad plans that cause long execution times. Because bad plans can be disastrous to performance, it is common for a DBMS to provide at least one such manipulation tool. MySQL along with many other systems provides optimizer hints that can manipulate certain aspects of the plan. Many commercial systems provide features that manipulate queries automatically, called plan pinning. MySQL does not provide such features, and MySQL's new optimizer does not even provide optimizer hints.
This project aims to see if it is possible to implement plan pinning that can pin multiple plans at once in MySQL and whether these implementations have good enough performance to be considered for future use. To accomplish this a literature study is conducted to study existing techniques for plan manipulation and plan pinning. Secondly, two different prototypes were implemented in the new optimizer. Both of the prototypes are capable of pinning multiple plans for a query. These are join order hints that are capable of pinning multiple complicated join orders, and hash-pinning that uses hashes generated from the plans to pin the full plans. Then an experiment running JOB queries was conducted. The study of the optimize times of the JOB queries for the two prototypes shows that join order hints are better in the general case, but that the hash-pinning has more potential if the hash generation function gets better.