PDA

Bekijk Volledige Versie : Hoe mysql loop stoppen?



Blacky
13/09/12, 23:06
Een van m'n users had een mysql opdracht gestart om iets met templates en de database te doen.
Deze heeft hij afgebroken omdat het te lang duurder, was al meer dan een kwartier.

Maar het lijkt erop alsof mysql zich in daarin verslikt heeft en nu blijft proberen iets uit te voeren. Daardoor ontstaan er veel httpd processen op dat gebruikersaccount en mysql zit ver over de 100% cpu tijd.

Met de mysql processlist zie ik dit (dbaccountnaam en forumnaam zijn aangepast):

| 6455 | account_dbuser | localhost | account_forum | Query | 4 | Sending data | SELECT *
FROM phpbb_styles_template_data
WHERE template_id = 2
AND (template_filename = |
| 6456 | account_dbuser | localhost | account_forum | Query | 2 | Sending data | SELECT *
FROM phpbb_styles_template_data
WHERE template_id = 2
AND (template_filename = |

Mytop geeft dit aan:

MySQL on localhost (5.1.65) up 0+00:05:18 [23:03:48]
Queries: 26.0 qps: 0 Slow: 0.0 Se/In/Up/De(%): 00/00/00/00
qps now: 2 Slow qps: 0.0 Threads: 151 ( 151/ 0) 00/00/00/00
Key Efficiency: 97.1% Bps in/out: 1.9/ 1.7k Now in/out: 41.0/43.2k

223 accountnaam localhost accountnaam 1 Query SELECT * FROM phpbb_styles_template_data WHERE template_id = 2 AND (t
224 accountnaam localhost accountnaam 1 Query SELECT * FROM phpbb_styles_template_data WHERE template_id = 2 AND (t
188 accountnaam localhost accountnaam 2 Query SELECT * FROM phpbb_styles_template_data WHERE template_id = 2 AND (t
200 accountnaam localhost accountnaam 2 Query SELECT * FROM phpbb_styles_template_data WHERE template_id = 2 AND (t
201 accountnaam localhost accountnaam 2 Query SELECT * FROM phpbb_styles_template_data WHERE template_id = 2 AND (t
Meer krijg je daarmee niet te zien. Process id's blijven niet hetzelfde.

Herstarten van mysql heeft niet geholpen. Herstarten van de hele server heeft ook niet geholpen.

Het top commando geeft dit aan:

2721 mysql 15 0 330m 60m 5380 S 340.9 0.8 18:11.60 mysqld
Dus 340.0% cpu tijd. Dat zal daadwerkelijk niet het geval zijn, maar normaliter hangt deze waarde bij ons rond nog onder de 5%.

Hoe kan ik deze loop of dit probleem nu stoppen?

CT0
13/09/12, 23:29
Waarschijnlijk een cronjob die hem steeds start. Die cron ff op een langer interval zetten en dat zal het waarschijnlijk oplossen.

Blacky
13/09/12, 23:41
Nee een cronjob had hij niet.
Wat het nu wel was heb ik niet kunnen ontdekken. Opeens was het probleem over. Forum draait weer snel etc.
Het was na een upgrade, en hij had een nieuwe style geimplementeerd en die moest nog toegepast worden op iets in de database. En toen dat begon bleef het maar duren en begon de hoge load. Toen heeft hij uiteindelijk op "afbreken" geklikt, maar schijnbaar is dat proces toch door blijven gaan op een of andere manier.

Het lijkt nu in orde te zijn want het systeem is weer rustig. Maar zou toch leuk zijn om te ontdekken hoe zoiets te fixen als het zich nog eens mocht voordoen in de toekomst. Behalve dan het account op suspend zetten want dat lost niets op.

Mark17
14/09/12, 00:08
Een MySQL proces kun je ook stoppen (kill proces ID dacht ik). Echter lijkt dit eerder als of het script gestopt was in de browser en binnen Apache door bleef draaien, dan is het zinvol eerst het proces in Apache te stoppen en daarna pas binnen MySQL.

Sommige verstaan onder stoppen/afbreken het browser scherm weg klikken terwijl processen op de achtergrond blijven draaien.

Blacky
14/09/12, 00:16
Ja maar dan moet er sprake zijn van 1 process ID. Dit waren er zoveel, er kwamen steeds nieuwe proces id's dus dat kon ik al vergeten.
Kan inderdaad wat je zegt dat het binnen apache bleef doordraaien, maar ik had apache en mysql al herstart.
Ik heb zelfs (zoals ik al schreef) de hele server herstart (een reboot dus), dan had het toch eigenlijk ook afgelopen moeten zijn? Toch begon het grapje toen weer gewoon opnieuw, terwijl m'n user op dat moment al weg was. In dit geval is de user een goede vriend van me.
Juist vanwege die reboot vind ik het vreemd dat het maar bleef doordraaien c.q. weer terugkwam.

Mark17
14/09/12, 00:31
Die herstart had ik overheen gelezen. Was voor die upgrade inloggen vereist? Zo niet is het een "standaard" URL van phpbb (ga ik vanuit door de query) die mogelijk door anderen "geraden" is?

Zodra inloggen vereist is lijkt het als of er ergens een scherm open is blijven staan. Hoewel dat lastig met zekerheid te zeggen is en de logs (Apache) mogelijk meer zeggen over hoe het kon gebeuren (requests voor zijn site in die periode? Stond de site op onderhoud?).

Blacky
14/09/12, 00:41
Er is inderdaad inloggen als admin vereist om die upgrade van phpBB te kunnen doen, we hebben de auto-upgrade procedure gevolgt. Daarvoor moet je dus inloggen en naar de /install directory gaan. Die moet weer gewist worden nadien om goed gebruik te kunnen maken van het forum. Alle upgrades (4 in totaal) zijn prima gelukt en zonder problemen afgesloten.

Maar pas daarna is het probleem begonnen. Het is begonnen op het moment dat de admin (mijn kennis dus) zijn nieuwe style er in had gezet en toen via het admincp (als ik me niet vergis) opdracht heeft gegeven dat in de database te implementeren. De site stond toen nog op onderhoud.
Er is ook niets aan de request te zien.

Volgens mij is het dus puur die actie geweest om die style naar de database te schrijven of zoiets (morgen krijg ik exact te horen wat ie deed want hij slaapt nu). Misschien dat phpBB die opdracht ergens in de cache schrijft en er even vrolijk mee verder gaat na een onderbreking van webserver of mysql of zoiets, da's me niet bekend.

systemdeveloper
14/09/12, 12:50
Als root op mysql inloggen en het aantal select queries van die user limiteren tot 1 per uur. Dan in je logs checken hoe/wie/wat/waar?

Blacky
14/09/12, 15:01
Oke thanks, dat zal ik volgende keer doen als zich ooit weer zoiets voordoet.

Nu was het net weer aan de gang, maar ik zag met mytop steeds die zelfde query wat ik boven al aangaf over die styles_template data. Gelukkig heb ik ook admin toegang tot dat forum. Heb nu van de nieuwe styl de templates van database naar filesystem gezet (da's een optie bij phpbb) en nu is de load en de query's weg.
Dus dat lijkt het geweest te zijn.

Blacky
14/09/12, 15:06
Ik zie wel nog deze van een user vermoedelijk, maar zie niet welke user:

2809 DELAYED localhost xvrb_wp1 28 Delaye Waiting for INSERT
Geeft dus als usernaam delayed op. Ik kan geen xrvb_wp1 database vinden op de server.
Ik heb ook al dit proces gekilled, maar het komt even later gewoon terug. Wat kan dit zijn dan?