sql >> Databáze >  >> RDS >> Mysql

Jak nastavit časový limit pro dotaz MySQL pomocí C API

Dobře, našel jsem řešení.. Díky Will a PRR (můj spolupracovník).

Nemohu založte nové vlákno na každý dotaz, protože se jedná o aplikaci v reálném čase, která má zpracovat 1000+ zpráv za sekundu..(v každém případě díky R.. za nápad).

Také nebylo možné ukončit spojení přes knihovnu, ani zrušit/ukončit dotaz, protože problém byl v DB serveru..

A zde je řešení hrubou silou, ale stále mnohem lepší než _EXIT( FAILURE ) :Zde je související otázka:"Jak vynutit uzavření socket na Linuxu?" - Takže jsem právě uzavřel zásuvku pomocí systémového volání.

Důležitá POZNÁMKA :(díky Wille) - Ukázalo se, že náš obal knihovny MySQL má příznak "fail-safe", takže na uzavřeném soketu (nebo jiné kritické chybě) se pokusí "vyřešit" problém, takže soket znovu otevře samo o sobě, v mém případě. Takže jsem právě vypnul tuto možnost a vše je nyní v pořádku - provádění je ukončeno kvůli výjimce - toto je "nejměkčí" způsob, jak to udělat.
To by mělo být samozřejmě provedeno prostřednictvím jiného vlákna - a například časovač.

UPRAVIT: Časové limity skutečně fungují pro verze po 5.0.25. Ale alespoň na RHEL4 a RHEL5 jsou časové limity z nějakého důvodu ztrojnásobeny! Pokud jsou například některé časové limity nastaveny na 20 sekund, skutečný časový limit je ~60 sekund.
Další důležitou věcí je, že tyto časové limity (jako všechny ostatní možnosti) MUSÍ nastavit po mysql_init a před mysql_connect nebo mysql_real_connect .



  1. Zápis souboru PHP ke čtení z CSV a spuštění SQL Query

  2. Alternativy MySQL Workbench - Správa uživatelů databáze ClusterControl

  3. Jak zašifrovat zálohy MySQL a MariaDB

  4. Správa rozdílů ve formátu data mezi PHP a MySQL