21. juni 2023 - 17:00Der er
8 kommentarer og 1 løsning
Skift fra MySql 5.7.42 til 8.0.33 har forøget svartiden voldsomt
Jeg har en server, der kører Mysql 5.7.42. Jeg har installeret en ny server med Mysql 8.0.33, men svartiden er steget voldsomt efterfølgende.
Jeg har en simpel tabel med knap 7.000 poster, hvor jeg forespørger med denne select (returnerer 68 rækker): SELECT `file`, `child` FROM `test_table` WHERE `parent` = '01' ORDER BY `child_sort_order`
På den oprindelige server tager forespørgslen 0,0008 sekunder, på den nye server tager forespørgslen 0,0303 sekunder.
Den gamle server kører 32 bit, den nye server kører 64 bit og har 8 x så meget ram samt dobbelt op på cpu.
Jeg har et php-script, der alene henter data i den nævnte tabel og load af denne side tager 9 sekunder på den nye server, mod 1 sekunder på den gamle server.
Jeg har ingen idé om hvad jeg skal kigge efter, for at identificere hvad der gør så stor en forskel.
det har sikkert intet at gøre mht performance, men hvorfor SELECT `file` når det vitterligt burde være SELECT 'file'
´ og ` er til franske ord og systemet sidder måske og prøver om file´ er ment som filé Til ordafgrænsninger er " (over 2) og ' (til højre for ø) dem, der bruges. Når du bruger ´ og ` så ser det lige så dumt ud som at bruge ~ og ^
Jeg anbefaler normalt at undlade at bruge navne som er reserverede ord og undlade bruge af højrelænende gnyffer, men det er best practice ikke MySQL syntax regler.
Kommentar til #1: Jeg er ikke nervøs for php-scriptet. Scriptet er noget jeg har overtaget fra et gammelt system. Det er meget uhensigtmæssigt opbygget og laver derfor 288 kald til databasen, hvilket altså gøres på 1 sekunder på den ene server og 9 sekunder på den anden server. Jeg har isoleret den længere svartid direkte til databasekaldene.
På den ene server tager kaldene knap 0,3 sekunder i alt, på den anden server ca. 8,7 sekunder.
Jeg har testet kaldene dirkte i sql-konsollen lokalt på serveren og det er den nye version af Mysql, der giver den længere svartid.
Kommentar til #1-#6: I en meget stor del af den tid jeg har arbejdet med Mysql, har jeg anvendt Jeg har Jeg bruger de venstrelænede phpmyadmin. Jeg arbejder meget med tabel- og rækkenavne, som er forholdsvis låst pga. data kommer fra gamle systemer og man ikke ønsker at bruge ressourcer på at gennemgå alt kode og "død" dokumentation, for at ændre på disse navne. Det har derfor altid været en vane at bruge den form for gnyffer, så jeg dermed ikke behøvede forholde mig til om navnene kunne komme i konflikt med reserverede ord osv.
For det er altså et mysterie hvorfor den skulle være så langsom.
SELECT `file`, `child` FROM `test_table`
er jo givet
WHERE `parent` = '01'
kunne være en dræber med 7 millioner rækker hvis der manglede index på parent feltet, men med kun 7 tusind rækker, så synes jeg ikke at der skulle kunne være noget.
Men for en god ordens skyld - er der index på parent?
ORDER BY `child_sort_order`
sortere 68 rækker bør heller ikke være noget problem - selv bobble sortering burde være god nok.
Viser EXPLAIN på den query på den gamle og den nye server nogen forskel?
En sletning af index på parent og tilføjelse af dette igen har løst problemet.
Der må være gået et eller andet galt under import, selvom jeg synes det lyder underligt.
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.