Kommentarer i MySQL-forespørgsler
En lille idé man kan vælge at bruge eller ej :)
Har man et site der køre nogle store og tunge forespørgsler, og hvis man er bange for at nogle af dem løber løbsk eller ophober sig, kan man fx i starten af sin SQL indsætte en lille kommentar.
Tricket er nemlig at den kommentar kommer med når man laver en:
SHOW PROCESSLISTEfterfølgende sætter man et cron-job op der hvert minut kigger efter forespørgsler, og hvis scriptet opdager en forespørgsel der indeholder en bestemt kommentar kan man enten automatisk dræbe den, eller sende en mail om at en forespørgsel er løbet løbsk.
Kommentaren kunne fx indeholder en maks. kørselstid.
Et eksempel på en forespørgsel hvor man kun vil lave den køre i 120 sek.:
1 2 3 | <?php mysql_query("/* MAX_120 */ SELECT big_stuff FROM big_table"); ?> |
PHP-scriptet kunne se sådan ud:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | <?php mysql_connect("localhost", "benny", "pa55word"); mysql_select_db("benny_db"); $result = mysql_query("SHOW PROCESSLIST"); while($row = mysql_fetch_assoc($result)) { // Matcher /* MAX_120 */ if (preg_match("/\/\*\s*max_([0-9]+)\s*\*\//i", $row['Info'], $regs)) { // Kontrollerer om forespørgslen har kørt længe end den må if ($row['Time'] > $regs[1]) { mysql_query("KILL ".(int) $row['Id']); } } } ?> |
Comments
Leave a Reply

Jeg hedder Morten, og jeg har udviklet webapplikationer siden slutningen af 90'erne.