Query lente non registrate


13

Sto tentando di abilitare la registrazione delle query lenta sul nostro server al fine di identificare eventuali query che potrebbero utilizzare l'ottimizzazione. Sembra abbastanza semplice, tuttavia il mio file non viene scritto. Non ricevo errori o cose del genere, non sembra che stia registrando le query lente. Mi sono ricordato di riavviare mysql dopo le mie modifiche alla configurazione.

Sto usando MySQL Ver 5.1.61. Ecco cosa ho in my.cnf:

slow-query-log=1
slow-query-log-file=/var/logs/my.slow.log
long_query_time=1

il file /var/logs/my.slow.log ha mysql come proprietario, anche nell'interesse del debug ho dato lettura / scrittura a tutti sul file di registro.

Ho long_query_time impostato su 1 in quanto sopra, voglio solo vedere se funziona. Ho provato a impostarlo su un valore inferiore (ad es. 0.3) ma non riesco ancora a registrare nulla. So che le query in esecuzione sulla mia app impiegano più di 1 secondo e ho anche eseguito intenzionalmente le query di registro ( SELECT sleep(10);) nel terminale per il test e il registro è ancora vuoto.

Ho esaminato i documenti, da quello che posso vedere dovrebbe funzionare. Qualcuno ha qualche suggerimento su cosa sto facendo di sbagliato? Qualsiasi consiglio sarebbe apprezzato, grazie mille!

Modifica: come richiesto nei commenti ho eseguito la query:

 `SELECT variable_value FROM information_schema.global_variables WHERE variable_name IN ('slow_query_log','slow_query_log_file','long_query_time');`

Il risultato:

10.0000000
/var/run/mysqld/mysqld-slow.log
OFF

Ovviamente le mie modifiche alla configurazione non vengono prese in considerazione poiché ritengo che si tratti di impostazioni predefinite. Sono abbastanza sicuro che il file my.cnf che sto modificando viene analizzato come se inserissi un valore non valido che mysql genererà un errore al riavvio. Cosa potrebbe succedere qui?

Un'altra modifica:

Dopo aver seguito i consigli di @RolandoMySQLDBA e aver spostato le mie linee di configurazione della query lenta in sotto le [mysqld]mie impostazioni, sembrano salvare. Ora il risultato della query variabile_valore sopra riportata è:

1.0000000
/var/logs/my.slow.log
ON

Tuttavia, non vedo ancora la scrittura del file my.slow.log. Non penso che si tratti di un problema di autorizzazioni poiché il file è di proprietà di mysql e ho aggiunto tutte le autorizzazioni per tutti gli utenti del file. Qualcuno potrebbe pensare a un motivo per cui questo non funzionerebbe?

Modifica: risolto! Il percorso per il log delle query lente non era corretto, avrebbe dovuto essere /var/log/my.slow.log invece di / var / log * s * / my.slow.log. Grazie a tutti per l'aiuto, ho imparato a assegnare!


1
Esegui SELECT variable_value FROM information_schema.global_variables WHERE variable_name IN ('slow_query_log','slow_query_log_file','long_query_time');e pubblica il suo output.
RolandoMySQLDBA

1
Se qualcuno ha ancora problemi dopo aver letto questo, controlla la variabile log_output. SET GLOBAL log_output=FILEriparato per me.
molholm,

Risposte:


21

Penso di aver ottenuto la risposta:

Devi mettere quelle opzioni nella [mysqld]sezione

[mysqld]
slow-query-log=1
slow-query-log-file=/var/logs/my.slow.log
long_query_time=1

e riavvia mysql

AGGIORNAMENTO 2013-03-05 16:36 EST

Non so perché questo accada ancora, ma per favore prova questo:

service mysql stop
rm -f /var/logs/my.slow.log
touch /var/logs/my.slow.log
chown mysql:mysql /var/logs/my.slow.log
service mysql start

quindi corri SELECT SLEEP(10);e vedi se arriva/var/logs/my.slow.log


Grazie! Ciò che hai suggerito ha aiutato, sembra che le impostazioni stiano salvando correttamente, ma non sto ancora scrivendo le cose. Ho modificato la mia domanda per riflettere questo.
TheMethod

Ehi, sono solo curioso, sto usando un sistema Debian su una VM. Il percorso è corretto nella tua risposta? /var/logs/invece di/var/log
Silviu-Marian,

Solo info. "touch & chown" sono necessari anche nell'ambiente CentOS 6.6 mysql 5.1.73.
Fumisky Wells,

Ho appena incontrato un sistema in cui hanno tentato di inserirli [mysqld_safe], che non ha funzionato. Mettendoli sotto [mysql]risolto il problema.
Michael Hampton,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.