sql >> Database >  >> RDS >> Mysql

Een time-out instellen voor MySQL-query met behulp van C API

Oké, ik heb een oplossing gevonden.. Met dank aan Will en PRR (mijn collega).

Ik kan niet start een nieuwe thread bij elke query, aangezien dit een realtime applicatie is, die verondersteld wordt 1000+ berichten per seconde te verwerken..(in ieder geval, dankzij R.. voor het idee).

Het was ook niet mogelijk om de verbinding via de bibliotheek te beëindigen, noch om de query te annuleren/stoppen, omdat het probleem zich in de DB-server bevond.

En hier is een brute-force oplossing, maar nog steeds veel beter dan _EXIT( FAILURE ) :Hier is de gerelateerde vraag:"Hoe sluiten te forceren socket op Linux?" - dus ik heb zojuist de socket gesloten met een systeemoproep.

Belangrijke OPMERKING :(bedankt Will) - Het bleek dat onze MySQL-bibliotheekwrapper een "fail-safe" vlag heeft, zodat het bij een gesloten socket (of een andere kritieke fout) het probleem probeert op te lossen, dus het heropent de socket , op zichzelf, in mijn geval. Dus ik heb deze optie zojuist uitgeschakeld en alles is nu in orde - de uitvoering is beëindigd vanwege een uitzondering - dit is de "zachtste" manier om dit te doen.
Dit moet natuurlijk via een andere thread worden gedaan - een timer, bijvoorbeeld.

BEWERKEN: De time-outs werken echt voor versies na 5.0.25. Maar in ieder geval op RHEL4 en RHEL5 zijn de time-outs om de een of andere reden verdrievoudigd! Als sommige time-outs bijvoorbeeld zijn ingesteld op 20sec, is de echte time-out ~60sec..
Een ander belangrijk ding is dat deze time-outs (zoals alle andere opties) MOET worden ingesteld na mysql_init en voor mysql_connect of mysql_real_connect .



  1. Epoch-tijdstempel converteren naar sql-server (menselijk leesbaar formaat)

  2. Hoe kan ik beperkingen uit mijn MySQL-tabel verwijderen?

  3. Inzicht in SQL Server Always Encrypted

  4. Aggregatie van (x,y) coördinaatpuntenwolken in PostgreSQL