sql >> Database teknologi >  >> RDS >> Mysql

Sådan indstilles en timeout for MySQL-forespørgsel ved hjælp af C API

Okay, jeg fandt en løsning.. Tak til Will og PRR ( min kollega ).

Jeg kan ikke start en ny tråd på hver forespørgsel, da dette er en realtidsapplikation, der formodes at behandle 1000+ beskeder i sekundet..(i alle fald, takket være R.. for ideen).

Det var heller ikke muligt at afbryde forbindelsen gennem biblioteket, ej heller at annullere/aflive forespørgslen, da problemet var i DB-serveren.

Og her er en brute-force løsning, men stadig meget bedre end _EXIT( FAILURE ) :Her er det relaterede spørgsmål:"Sådan tvinger du lukning socket på Linux?" - så jeg har lige lukket stikket ved hjælp af et systemopkald.

Vigtig BEMÆRK :(tak Will) - Det viste sig, at vores MySQL-biblioteksindpakning har et "fail-safe" flag, så den på lukket stik (eller anden kritisk fejl) forsøger at "løse" problemet, så den genåbner soklen i sig selv i mit tilfælde. Så jeg har lige slået denne mulighed fra, og alt er i orden nu - udførelsen er afsluttet på grund af en undtagelse - dette er den "blødeste" måde at gøre dette på.
Dette skal selvfølgelig gøres gennem en anden tråd - en timer, for eksempel.

EDIT: Timeouts virker virkelig for versioner efter 5.0.25. Men i det mindste på RHEL4 og RHEL5 tredobles timeouts af en eller anden grund! For eksempel, hvis nogle af timeouts er sat til 20 sek., er den reelle timeout ~60 sek..
En anden vigtig ting er også, at disse timeouts (som alle andre muligheder) indstilles efter mysql_init og før mysql_connect eller mysql_real_connect .



  1. MySQL-fejl 2006:mysql-serveren er forsvundet

  2. Genvinder adgang til mistet MySQL-adgangskode til PHPMyAdmin på WAMP

  3. forhindrer duplikatrækkeindsættelse i php/mysql

  4. PHP Fatal fejl:Ufanget PDOException:kunne ikke finde driveren