phpmyadmin Prozesse -> Liste mit alten Abfragen?

Fragen zu allen Themen rund ums Programmieren außerhalb von phpBB können hier gestellt werden - auch zu anderen Programmiersprachen oder Software wie Webservern und Editoren.
Antworten
Benutzeravatar
mgutt
Mitglied
Beiträge: 2999
Registriert: 31.08.2004 16:44
Wohnort: Hennef
Kontaktdaten:

phpmyadmin Prozesse -> Liste mit alten Abfragen?

Beitrag von mgutt »

Man kann sich die aktive Prozessliste z.B. wie folgt anzeigen lassen:
http://www.php-faq.de/q/q-mssql-list-processes.html

In phpmyadmin kann man sich auch die Abfragen inkl. der ID anzeigen lassen. Werden die Abfragen nach Beendigung entfernt oder kann man die noch einsehen? Ich hätte gerne eine Einsicht über die Abfragen der letzten 120 Sekunden, falls das möglich ist.

Gruß
meine Foren: http://www.maxrev.de/communities.htm
Ich kaufe Dein Forum! Angebote bitte an marc at gutt punkt it
Benutzeravatar
Gumfuzi
Ehemaliges Teammitglied
Beiträge: 2454
Registriert: 26.03.2004 22:25
Wohnort: Linz, AT
Kontaktdaten:

Beitrag von Gumfuzi »

Gute Frage.

Ich habe mir was gebastelt, wo ich alle SQL-Abfragen, die länger als x Sekunden (einstellbar) dauern, in eine logdatei (pro tag eine) am FTP speichert inkl. Usernamen, SQL-Befehl, Datei, Codezeile, etc.

Ist aber nur sinnvoll, wenn man den Sekundenwert auf mind. 5 Sekunden stellt, da sonst jede Abfrage geloggt wird - ich wollte nur die sehen, die eben lange brauchen.

Wäre aber schön, wenn es da wo in phpMyAdmin was gäbe...
Benutzeravatar
mgutt
Mitglied
Beiträge: 2999
Registriert: 31.08.2004 16:44
Wohnort: Hennef
Kontaktdaten:

Beitrag von mgutt »

Ich habe komischerweise manchmal Abfragen, die dauern bis zu 30 Sekunden.. aber ohne Inhalt.. also da steht dann immer nur "sleep". Daher würde ich mal gerne wissen, ob man an Hand der eigentlichen Abfrage eine Regelmäßigkeit erkennt.

Wie machst Du das denn mit den Abfragen, per PHP Script oder was serverbasierendes?
meine Foren: http://www.maxrev.de/communities.htm
Ich kaufe Dein Forum! Angebote bitte an marc at gutt punkt it
Benutzeravatar
Gumfuzi
Ehemaliges Teammitglied
Beiträge: 2454
Registriert: 26.03.2004 22:25
Wohnort: Linz, AT
Kontaktdaten:

Beitrag von Gumfuzi »

php-basierend, mittels timer bei jeder im Forum ausgeführten Abfrage - also innerhalb der SQL-Funktion.
im Footer werden dann die einzelnen Abfragen, die eben länger als x Sekunden gedauert haben, izusammengefasst und in eine Logdatei geschrieben.

So sieht dann die Logdatei aus:
######################### Anfang SQL-Log User: xxxxx (IP: xxx.xxx.xxx.xxx) ##############################
### aufgerufene Seite: /phpBB2/statistics.php
### gekommen von: http://www.irgendeineseite.de/phpBB2/vi ... p?p=129496
### Browser: Mozilla/5.0 (Windows; U; WinNT4.0; de-AT; rv:1.4.1) Gecko/20031008

################## Zeitpunkt: 26.04.2006-07:26
### Datei: stat_modules/top_words/module.php
### Zeile: 86
### Zeit: 5.32241
### Abfrage: SELECT COUNT( swm.word_id ) word_count, swm.word_id word_id, swl.word_text word_text FROM phpbb_search_wordmatch swm, phpbb_search_wordlist swl WHERE swm.word_id = swl.word_id GROUP BY swm.word_id ORDER BY word_count DESC LIMIT 250
################## Ende Zeitpunkt ###

######################### Ende SQL-Log User: xxxxx ##############################



######################### Anfang SQL-Log User: Anonymous (IP: xxx.xxx.xxx.xxx) ##############################
### aufgerufene Seite: /phpBB2/viewtopic.php?t=3340&highlight=&
### gekommen von: http://images.google.de/imgres?imgurl=h ... eseite.de/...
### Browser: Mozilla/5.0 (Windows; U; Windows NT 5.1; de; rv:1.8.0.2) Gecko/20060308 Firefox/1.5.0.2

################## Zeitpunkt: 26.04.2006-13:00
### Datei: viewtopic.php
### Zeile: 1140
### Zeit: 6.30536
### Abfrage: UPDATE phpbb_topics
SET topic_views = topic_views + 1
WHERE topic_id = 3340
################## Ende Zeitpunkt ###

######################### Ende SQL-Log User: Anonymous ##############################



######################### Anfang SQL-Log User: xxxxx (IP: xxx.xxx.xxx.xxx) ##############################
### aufgerufene Seite: /phpBB2/statistics.php
### gekommen von: http://www.irgendeineseite.de/phpBB2/se ... d=newposts
### Browser: Mozilla/5.0 (Macintosh; U; PPC Mac OS X Mach-O; de; rv:1.8.0.2) Gecko/20060328 Firefox/1.5.0.2

################## Zeitpunkt: 26.04.2006-20:37
### Datei: stat_modules/top_words/module.php
### Zeile: 86
### Zeit: 13.13647
### Abfrage: SELECT COUNT( swm.word_id ) word_count, swm.word_id word_id, swl.word_text word_text FROM phpbb_search_wordmatch swm, phpbb_search_wordlist swl WHERE swm.word_id = swl.word_id GROUP BY swm.word_id ORDER BY word_count DESC LIMIT 250
################## Ende Zeitpunkt ###

######################### Ende SQL-Log User: xxxxx ##############################
(sensible Daten wurden hier verändert)

Wenn innerhalb eines Seitenaufrufes mehrere SQL-Abfragen über der Zeit waren, dann kommt der Block "Zeitpunkt" mehrmals innerhalb eines Block des Users.

Die Idee kam daher, daß ich zwar eine Zeit hatte, wie lange der Seitenaufbau dauerte mit den %-Anteil alle SQL-Abfragen. Ich wollte aber eben wissen, welche Abfrage da so bremst.

Wobei man Einzelfälle nicht berücksichtigen kann, da es auch immer darauf an kommt, wieviele User exakt zur gleichen Zeit SQL-Abfragen machen bzw. noch sinnloser ist es bei Shared-Servern.

Wenn interesse besteht, kann ich mal nachschauen, wie die Codeänderungen aussehen und hier porten.
Benutzeravatar
Gumfuzi
Ehemaliges Teammitglied
Beiträge: 2454
Registriert: 26.03.2004 22:25
Wohnort: Linz, AT
Kontaktdaten:

Beitrag von Gumfuzi »

Ich habe es mal eben in einen kleinen Mod verpackt:

Code: Alles auswählen

##############################################################
## MOD Title:           SQL-Log
## MOD Author:          Gumfuzi (www.gumfuzi.com)
## MOD Description:     Protokolliert in eine Log-Datei am Server (ohne zusätzliche SQL-Abfragen),
##                      sobald eine einzelne SQL-Abfrage mehr als eine einstellbare Anzahl an
##                      Sekunden benötigt.
##                      Diese Funktion kann deaktiviert werden, die Anzahl an Sekunden kann ebenso
##                      eingestellt werden - leider beides nicht via ACP, aber einfach im Quellcode.
##                      getestet auf phpBB ab Version 2.0.17
##
## MOD Version:         0.0.1
##
## Installation Level:  Easy
## Installation Time:   2-4 minutes
##
## Files To Edit (2) :  
##                      includes/page_tail.php
##                      db/mysql.php
##
############################################################## 
## Author Notes: 
## - ersetze im Code beim Einfügen in der page_tail.php das "/www/xxx/xxx/phpBB2/"
##   durch Deinen Pfad zum Forum! 
## - kann durch setzen der Variable "sql_log" in der page_tail.php rasch wieder
##   deaktiviert werden 
## - auch in der page_tail.php einstellbar: ab wieviel Sek. pro Abfrage geloggt
##   werden soll (siehe Quellcode)
##
############################################################## 
## MOD History:
##
## 08/05/2006- First release 0.0.1
##
############################################################## 
## Before Adding This MOD To Your Forum, You Should Back Up All Files Related To This MOD 
############################################################


# 
#-----[ OPEN ]------------------------------------------ 
#
includes/page_tail.php

#
#-----[ FIND ]------------------------------------------
#
exit;
?>

#
#-----[ BEFORE, ADD ]------------------------------------------
#
# ersetze im nachstehenden Code das "/www/xxx/xxx/phpBB2/" (ohne "xYz"!) durch Deinen Pfad zum Forum!

// SQL-Log Anfang
$sql_log = 1;
$cr = chr(13).chr(10);
if ($sql_log == 1)
{
	$zmtotal = $db->zmtotal;
	$abfrage1 = $db->abfrage;
	$abfrage = explode("xYz",$db->abfrage);
	$zmteil = explode("xYz",$db->zmteil);
	$zmfile = explode("xYz/www/xxx/xxx/phpBB2/",$db->zmfile);
	$zmline = explode("xYz",$db->zmline);
	$sl_aktuell = $_SERVER['REQUEST_URI'];
	$sl_referer = $_SERVER["HTTP_REFERER"];
	$sl_browser = getenv('HTTP_USER_AGENT');
	$sl_ip = GetIP();
	$co = 1;
	$sql_log_total = '######################### Anfang SQL-Log User: ' . $userdata['username'] . ' (IP: ' . 

$sl_ip . ') ##############################' . $cr;
	$sql_log_total = $sql_log_total . '### aufgerufene Seite: ' . $sl_aktuell . $cr . '### gekommen von: ' . 

$sl_referer . $cr . '### Browser: ' . $sl_browser . $cr;
	while ($abfrage[$co] <> "")
	{
		if ($zmteil[$co] >= 5) # hier die Sekunden eintragen, ab wieviel Sek. pro Abfrage geloggt werden 

soll!
		{
			$sql_log_abfrage = "";
			$sql_log_abfrage =  $cr .'################## Zeitpunkt: ' . date("d.m.Y-H:i",time()) . $cr;
			$sql_log_abfrage = $sql_log_abfrage . '### Datei: ' . $zmfile[$co] . $cr;
			$sql_log_abfrage = $sql_log_abfrage . '### Zeile: ' . $zmline[$co] . $cr;
			$sql_log_abfrage = $sql_log_abfrage . '### Zeit: ' . $zmteil[$co] . $cr;
			$sql_log_abfrage = $sql_log_abfrage . '### Abfrage: ' . $abfrage[$co] . $cr;
			$sql_log_abfrage = $sql_log_abfrage . '################## Ende Zeitpunkt ###' . $cr;
			$sql_log_total = $sql_log_total . $sql_log_abfrage . $cr;
			$sql_log_ja = 1;
		}
		$co++;
	}
	$sql_log_total = $sql_log_total . '######################### Ende SQL-Log User: ' . $userdata['username'] . 

' ##############################' . $cr . $cr . $cr . $cr;

	if ($sql_log_ja == 1)
	{
		$sl_time = str_replace(".", "-", max($zmteil));
		$avz = getcwd();
		$dateiname = date("Y_m_d",time()) . ".txt"; #  pro Tag eine Datei
#		$dateiname = date("Ymd_Hi",time()) . "_" . $sl_time . "_" . $userdata['user_id'] . "_" . 

rand(100,999) . ".txt"; #Jedes mal eine neue Datei
		$navz = $avz . "/log_sql";
		chdir($navz);
		$testa = getcwd();
		$abc = fopen($dateiname, a);
		fwrite($abc, $sql_log_total);
		fclose($abc);
		chdir($avz);
	}
}
// SQL-Log Ende


#
#-----[ OPEN ]------------------------------------------
#
db/mysql.php


#
#-----[ FIND ]------------------------------------------
#
	//
	// Base query method
	//
	function sql_query($query = "", $transaction = FALSE)
	{


#
#-----[ AFTER, ADD ]------------------------------------------
#
		// SQL-Zeitmessung Anfang
		$zmtime = microtime();
		$zmtime = explode(" ",$zmtime);
		$zmstart = $zmtime[1] + $zmtime[0];
		$abfrage = $query;
		$test = debug_backtrace();
		$this->zmfile .= "xYz" . $test[0]['file'];
		$this->zmline .= "xYz" . $test[0]['line'];
		// SQL-Zeitmessung Ende

#
#-----[ FIND ]------------------------------------------
#
		// Remove any pre-existing queries
		unset($this->query_result);
		if($query != "")
		{
			$this->num_queries++;

			$this->query_result = @mysql_query($query, $this->db_connect_id);
		}
		if($this->query_result)
		{
			unset($this->row[$this->query_result]);
			unset($this->rowset[$this->query_result]);


#
#-----[ AFTER, ADD ]------------------------------------------
#
		// SQL-Zeitmessung Anfang
		$zmtime = microtime();
		$zmtime = explode(" ",$zmtime);
		$zmende = $zmtime[1] + $zmtime[0];
		$zmtotal = round(($zmende - $zmstart), 5);
		$this->zmtotal += $zmtotal;
		$this->zmteil .= "xYz" . $zmtotal;
		$this->abfrage .= "xYz" . $abfrage;
		// SQL-Zeitmessung Ende



#
#-----[ FIND ]------------------------------------------
#
			return $this->query_result;
		}
		else
		{


#
#-----[ AFTER, ADD ]------------------------------------------
#
		// SQL-Zeitmessung Anfang
		$zmtime = microtime();
		$zmtime = explode(" ",$zmtime);
		$zmende = $zmtime[1] + $zmtime[0];
		$zmtotal = round(($zmende - $zmstart), 5);
		$this->zmtotal += $zmtotal;
		$this->zmteil .= "xYz" . $zmtotal;
		$this->abfrage .= "xYz" . $abfrage;
		// SQL-Zeitmessung Ende


#
#-----[ DO ]------------------------------------------
#
Einen Ordner "log_sql" als Unterordner im Forum-Root-Verzeichnis anlegen,
und mit CHMOD 777 einstellen


#
#-----[ SAVE/CLOSE ALL FILES ]------------------------------------------
#
# EoM
Benutzeravatar
mgutt
Mitglied
Beiträge: 2999
Registriert: 31.08.2004 16:44
Wohnort: Hennef
Kontaktdaten:

Beitrag von mgutt »

Erfordert die Loggeschichte noch was hier von:
http://www.phpbb.de/viewtopic.php?p=650594#650594

Oder ist das autark?

Korrekturvorschlag (Deine Funktion kann dann komplett raus)

Code: Alles auswählen

(IP: ' . 

decode_ip($user_ip) . ')
meine Foren: http://www.maxrev.de/communities.htm
Ich kaufe Dein Forum! Angebote bitte an marc at gutt punkt it
Antworten

Zurück zu „Coding & Technik“