Come posso profilare le query del database da PHP?

3

CodeIgniter ha una funzionalità molto utile chiamata Profiler, che visualizza le informazioni ai piedi di una pagina, informazioni come GET, Memoria, dati POST. Mostra anche le query del database e quanto tempo impiegano per eseguire ciò che trovo molto utile.

Recentemente ho rilevato un'applicazione legacy PHP e sarebbe stato di grande aiuto vedere quali tabelle del database sono state interrogate dalle pagine PHP. Esiste una libreria per le applicazioni raw di PHP che potrebbe produrre qualcosa di simile a CodeIgniter's Profiler? Sto già usando xdebug, mi interessa solo profilare le query sui database.

    
posta Gortron 02.01.2013 - 15:28
fonte

1 risposta

2

Il profiler di CI è una piccola classe elegante che assembla i dati dalla classe di database CI e dalla classe di controller CI e offre una visione completa di ciò che sta accadendo. Sfortunatamente non funzionerà in modo isolato, è strettamente accoppiato con il resto del framework e, a parte ciò, non esiste un'alternativa semplice da inserire in un'applicazione legacy.

Dato che sei principalmente interessato a profilare le query sui database e supponendo che tu stia usando MySQL, dovresti controllare Registro di query generale :

The general query log is a general record of what mysqld is doing. The server writes information to this log when clients connect or disconnect, and it logs each SQL statement received from clients. The general query log can be very useful when you suspect an error in a client and want to know exactly what the client sent to mysqld.

mysqld writes statements to the query log in the order that it receives them, which might differ from the order in which they are executed. This logging order contrasts to the binary log, for which statements are written after they are executed but before any locks are released. (Also, the query log contains all statements, whereas the binary log does not contain statements that only select data.)

Da MySQL 5.1.6 è possibile memorizzare il log in una tabella MySQL, quindi i log sono estremamente facili da interrogare e presentare.

PostgreSQL ha un meccanismo simile che è anche abbastanza facile da configurare ( Manuale di PostgreSQL > 18.8 Segnalazione errori e registrazione ). Se stai utilizzando PostgreSQL, dovresti controllare pgFouine , un analizzatore di log scritto in PHP. Immagino che ogni altro RDBMS importante fornisca meccanismi di registrazione simili.

Il registro delle query ti fornirà tutte le informazioni necessarie per le query del tuo database ed è abbastanza semplice hackerare insieme un semplice script per migliorare i rapporti. Se sei interessato a profilare anche le richieste HTTP, allora dovresti consultare i log di Apache (o il tuo registri del server Web preferito). Per gli analizzatori di log, dovresti controllare AWStats , apache-scalp e PHPIDS .

    
risposta data 03.01.2013 - 21:59
fonte

Leggi altre domande sui tag