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

Perché le nostre query si bloccano nello stato Scrittura in rete in MySql?

Poiché le applicazioni non generano magicamente query come preferiscono, penso che sia piuttosto probabile che ci sia un errore da qualche parte nell'applicazione che sta causando questo. Ecco alcuni suggerimenti che puoi utilizzare per rintracciarlo. Immagino che tu stia usando PHP, dal momento che stai usando MySQL, quindi lo userò per i miei esempi.

Prova ad aggiungere commenti davanti a tutte le tue domande nell'applicazione, in questo modo:

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

Il commento verrà visualizzato nel registro delle query. Se stai utilizzando un tipo di wrapper API di database, potresti potenzialmente aggiungere automaticamente questi messaggi:

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();
}

Nel caso in cui non si utilizzi un wrapper, ma si stiano eseguendo direttamente le query, è possibile utilizzare l'estensione runkit e la funzione runkit_function_rename per rinominare mysql_query (o qualunque cosa tu stia utilizzando) e intercettare le query.