Ik heb jarenlang prima gedraaid met een Lamp setup (Ubuntu 14.04) met een eigen gemaakt PHP pakket. Om gebruik te maken van een nieuw bibliotheek was ik geforceerd om PHP 5.6 te draaien en daarom ben ik ook gelijk gegaan naar Ubuntu 16.06.
Eenmaal alles weer ingesteld kom ik erachter dat MySQL een hoge load heeft.
Show proceslist gaf aan dat het erg rustig is, er worden zo nu en dan query's uitgevoerd die kloppen. Niets bijzonders daar te zien
Met behulp van
Krijg ik een lijst van alle child-processes van mysql. Daar zie ik bovenaan wel 12+ processen staan met alsnog wel een redelijke hoge load van 16 tot 23% cpu usage.
Een strace daarop geeft eigenlijk continue de melding:
Hierbij moest ik gelijk even denken dat tijdens de upgrade alle tabellen werden bijgewerkt naar een nieuw soort datum notatie.
Indirect kom ik er daarna achter wat de reden is, de load is verdwenen zodra ik een TV-scherm met een browser die elke seconde een json script opvraagt waar vervolgens best wel een hoop SQL querys aan vast hangen.
Nu heeft dit systeem op de vorige versie nog nooit load veroorzaakt, maar er zijn nu vast dingen veranderd, bijvoorbeeld zaken wat nu allemaal wat stricter werkt dan daarvoor.
Nu zijn er nog 2 zaken waar ik sowieso mee aan de slag moet, en ik vraag me af of dit ook grote invloed kan hebben op de performance. Ik heb nu de mysql server en verbinding- collatie op UTF-8 ingesteld. Om eerlijk te zijn weet ik niet eens hoe het ervoor stond ingesteld, maar ik moest dit nu wel instellen om "rare" tekens weer goed te krijgen. Tegelijkertijd zie ik dat ik nooit goed de tabellen heb ingesteld naar een juiste collatie. Er staan nog een hoop op de default van jaren terug: Iets met Swedish.
Dan zag ik ook dat er nog een hoop tabellen op MyIsam stonden ingesteld en de rest op InnoDB.
Dus wat ik kan doen:
1: Tabel collatie goed zetten
2: Alles op InnoDB zetten
3: slow query log enablen en kijken of ik daar wat kan vinden
4: ik maak hier en daar nog gebruik van mysql_query i.p.v. mysqli_query, wellicht heeft dat nu sinds de nieuwe versie ook impact op performance
Zie ik nog wat over het hoofd? Wat zouden jullie verder nog doen?
Globaal is het probleem volgens mij dat de SQL server continue zaken zoals de datum moet vertalen naar een client toe, en dit kost nu meer resources. (De melding van gettimeofday die enorm vaak herhaalt wordt in een child proces)
Eenmaal alles weer ingesteld kom ik erachter dat MySQL een hoge load heeft.
Show proceslist gaf aan dat het erg rustig is, er worden zo nu en dan query's uitgevoerd die kloppen. Niets bijzonders daar te zien
Met behulp van
code:
1
| Top -H -p <pidnummer mysql> |
Krijg ik een lijst van alle child-processes van mysql. Daar zie ik bovenaan wel 12+ processen staan met alsnog wel een redelijke hoge load van 16 tot 23% cpu usage.
Een strace daarop geeft eigenlijk continue de melding:
code:
1
| GetTimeofDay(...... |
Hierbij moest ik gelijk even denken dat tijdens de upgrade alle tabellen werden bijgewerkt naar een nieuw soort datum notatie.
Indirect kom ik er daarna achter wat de reden is, de load is verdwenen zodra ik een TV-scherm met een browser die elke seconde een json script opvraagt waar vervolgens best wel een hoop SQL querys aan vast hangen.
Nu heeft dit systeem op de vorige versie nog nooit load veroorzaakt, maar er zijn nu vast dingen veranderd, bijvoorbeeld zaken wat nu allemaal wat stricter werkt dan daarvoor.
Nu zijn er nog 2 zaken waar ik sowieso mee aan de slag moet, en ik vraag me af of dit ook grote invloed kan hebben op de performance. Ik heb nu de mysql server en verbinding- collatie op UTF-8 ingesteld. Om eerlijk te zijn weet ik niet eens hoe het ervoor stond ingesteld, maar ik moest dit nu wel instellen om "rare" tekens weer goed te krijgen. Tegelijkertijd zie ik dat ik nooit goed de tabellen heb ingesteld naar een juiste collatie. Er staan nog een hoop op de default van jaren terug: Iets met Swedish.
Dan zag ik ook dat er nog een hoop tabellen op MyIsam stonden ingesteld en de rest op InnoDB.
Dus wat ik kan doen:
1: Tabel collatie goed zetten
2: Alles op InnoDB zetten
3: slow query log enablen en kijken of ik daar wat kan vinden
4: ik maak hier en daar nog gebruik van mysql_query i.p.v. mysqli_query, wellicht heeft dat nu sinds de nieuwe versie ook impact op performance
Zie ik nog wat over het hoofd? Wat zouden jullie verder nog doen?
Globaal is het probleem volgens mij dat de SQL server continue zaken zoals de datum moet vertalen naar een client toe, en dit kost nu meer resources. (De melding van gettimeofday die enorm vaak herhaalt wordt in een child proces)