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

Proč se naše dotazy zasekávají na stavu Zápis do sítě v MySql?

Vzhledem k tomu, že aplikace magicky negenerují dotazy, jak se jim líbí, myslím si, že je spíše pravděpodobné, že je někde ve vaší aplikaci chyba, která to způsobuje. Zde je několik návrhů, které můžete použít k jeho sledování. Hádám, že používáte PHP, protože používáte MySQL, takže to použiji pro své příklady.

Zkuste přidat komentáře před všechny vaše dotazy v aplikaci, jako je tento:

$sqlSelect  = "/* file.php, class::method() */";
$sqlSelect .= "SELECT * FROM foo ";
$sqlSelect .= "WHERE criteria";

Komentář se zobrazí v protokolu dotazů. Pokud používáte nějaký druh databázového rozhraní API, můžete tyto zprávy potenciálně přidat automaticky:

function query($sql)
{
    $backtrace = debug_backtrace();
    // The function that executed the query
    $prev = $backtrace[1];
    $newSql = sprintf("/* %s */ ", $prev["function"]);
    $newSql .= $sql;

    mysql_query($newSql) or handle_error();
}

V případě, že nepoužíváte wrapper, ale spouštíte dotazy přímo, můžete použít rozšíření runkit a funkci přejmenování_funkce_runkit přejmenovat mysql_query (nebo cokoli, co používáte) a zachytit dotazy.



  1. Zkopírujte tabulky z jedné databáze do druhé na SQL Server

  2. Načtěte výsledky dotazu podle pokynů v SQLAlchemy

  3. Chyba kódování PHP při vytváření XML z databáze

  4. Klauzule Oracle DateTime in Where?