sql >> Databasteknik >  >> RDS >> Mysql

Hur man ställer in en timeout för MySQL-fråga med C API

Okej, jag hittade en lösning.. Tack vare Will och PRR ( min medarbetare ).

Jag kan inte starta en ny tråd för varje fråga, eftersom detta är en realtidsapplikation, som ska behandla 1000+ meddelanden per sekund..(i alla fall, tack vare R.. för idén).

Det var inte heller möjligt att avbryta anslutningen via biblioteket, inte heller att avbryta/döda frågan, eftersom problemet låg i DB-servern.

Och här är en brute-force-lösning, men ändå mycket bättre än _EXIT( FAILURE ) :Här är den relaterade frågan:"Hur man tvingar till stängning socket på Linux?" - Så jag stängde precis uttaget med ett systemanrop.

Viktig ANMÄRKNING :(tack Will) - Det visade sig att vårt MySQL-biblioteksomslag har en "fail-safe" flagga, så att den försöker "lösa" problemet vid stängd socket (eller annat kritiskt fel) så att den öppnar sockeln igen , i sig, i mitt fall. Så jag stängde precis av det här alternativet och allt är bra nu - exekveringen avslutas på grund av ett undantag - detta är det "mjukaste" sättet att göra detta på.
Detta bör naturligtvis göras via en annan tråd - en timer, till exempel.

EDIT: Timeouterna fungerar verkligen för versioner efter 5.0.25. Men åtminstone på RHEL4 och RHEL5 tredubblas timeouts av någon anledning! Till exempel, om några av timeouterna är inställda på 20 sek, är den verkliga timeouten ~60 sek.
En annan viktig sak är också att dessa timeouts (som alla andra alternativ) MÅSTE ställas in efter mysql_init och före mysql_connect eller mysql_real_connect .



  1. Analysera JSON i MySQL

  2. Kundvagn och lagerhantering

  3. Ska jag ta bort eller inaktivera en rad i en relationsdatabas?

  4. Escape-sträng för användning i MySQL-fulltextsökning