Newsgroup: it.comp.www.php
Titolo: connessioni a MySQL

Qualcuno sa se e dove MySQL tiene traccia delle connessioni?
Cioč, so che Apache genera i suoi bravi log file, ma volevo sapere se c'era
qualcosa di analogo su MySQL. Volevo leggermeli per capire bene il modo e il
numero di volte che i miei script si connettono al server MySQL.
Matteo



Ti converrebbe, anche per altri motivi, usare una funzione a parte tipo
	SQLExec($conn, $query)
	{
		...
	}
che possa "loggare" query e magari anche tempo impiegato ecc., dentro a
un registro di testo o via syslog (su Unix).
Cosi' oltre alle query vedi anche il tempo impiegato, errori, ecc..
Sep  3 19:04:04 keter httpd: fminia@tipheret: SELECT creation::date AS
 data, opname AS operatore, counter as N, testo FROM note WHERE
 anag=1265794 AND gruppo IN ('*****') AND NOT (creation::date = now()::date
 AND counter='1') ORDER BY creation; -- time=4.47 ms
Sep  3 19:04:04 keter httpd: ccarpi@netzach: SELECT '*****' AS Lavorazione,
 opname as Operatore, substr(data,1,19) as data, result as Esito FROM
 storico WHERE anag=1264128 AND wrkhandle = ( SELECT handle FROM
 lavorazioni WHERE workname='********'); -- time=7.04 ms
Sep  3 19:04:05 keter httpd: cpolese@binan: UPDATE ***** SET status=22, 
 username='binan', nextcall='Wed Sep 05 20:30:00 2001', lastcall='Mon Sep
 03 19:04:05 2001',counter='2' ,weight=120 , preferred='cpolese',
 prospect='-3' WHERE anag=1265790; -- time=5.81 ms
...poi, un piccolo script puo' estrarre le queries:
* Piu' pesanti (maggior numero di millisecondi)
* Piu' numerose (maggior numero di items)
* Piu' onerose (maggior prodotto msecs * items)
e saprai che QUELLE ti conviene ottimizzare.
Leonardo
-- 
Nior thainig ar major i dtus an lae chugainn,
is ni rabhamar fein ann i gcoir na gceart
ach mar sheolfai aoireacht bo gan aoire,
ar thaobh na greine de Sliabh na mBan.




qualche modo l'esecuzione degli script?
Non moltissimo. Soprattutto se si usa syslog. E tieni conto che:
	a) Quanto vale la candela... va visto!
	b) Mica sei obbligato a loggare SEMPRE. E una volta che due giorni
	   di queries lente ti hanno dato il dato ;-), i risultati di quel
	   che ci farai sono permanenti.
Nel caso mio, almeno una volta il logging mi ha fatto risparmiare circa un
sei milioni (meno l'usato su un doppio Pentium III vecchio di un anno). E,
naturalmente, c'e' da considerare che serve anche per il debugging.
Io uso questa funzione:
        function phprintf($where, $severity, $string)
        {
                global $REMOTE_HOST, $REMOTE_USER, $DEFCON;
                if ($DEFCON <= $severity)
		{
			switch($where)
			{
				case "INFO":
				case "SQL":
					$facility = 128 + LOG_INFO;
					break;
				case "NOTICE":
					$facility = 128 + LOG_NOTICE;
					break;
				case "DEBUG":
					$facility = 128 + LOG_DEBUG;
					break;
				default:
					$facility = 128 + LOG_NOTICE;
					break;
			}
			$message = "$REMOTE_USER@$REMOTE_HOST: $string";
			syslog($facility, $message);
		}
        }
per cui, usando la variabile globale $debug, posso decidere QUALE LIVELLO
di gravita' loggare (da 5 = logga solo i casini gravissimi, a 0 = logga i
sospiri dell'utente quando la pagina si carica lentamente), e anche verso
quale file mandarlo.
In /etc/syslog.conf:
#
# Local syslog facilities
#
local0.=notice                  /var/log/sysphp.log
local0.=info                    -/var/log/syssql.log
local0.=debug                   -/var/log/sysusr.log
In "INFO" loggo le queries SQL. In "notice" le cose importanti, che hanno
il flush immediato (il resto ha un "-" prefisso, per cui e' bufferizzato,
e non impegna molto il disco).
Di solito giro a DEFCON 5 :-), per cui nel caso dell'SQL
	phprintf("SQL", 1, "SELECT")
	phprintf("SQL", 2, "INSERT")
	phprintf("SQL", 3, "UPDATE")
	phprintf("SQL", 4, "DELETE")
...non viene registrato nulla. A DEFCON 4, vengono registrate soltanto le
cancellazioni. A DEFCON 1 (guerra termonucleare globale) registro tutto e
con "grep" posso avere lo storico di quel che ha fatto un utente su tutto
il sito, per capire cos'e' successo.
Dato che le funzioni "phprintf" sono sempre da sole su una sola riga, per
spremere fino all'ultimo le risorse del sistema posso anche fare
	/^\(.*\<phprintf\>.*\)$/\/\/\1/g
per disattivare completamente anche il parsing della funzione (e, come e'
ovvio, il file incluso si chiama 'phprintf.inc'), e
	/^\/\/\(.*\<phprintf\>.*\)$/\1/g
per riattivarla globalmente a colpi di "sed".


Bello, grazie di cuore!
Matteo