Portal > Foren > Datenbanken, Server, Betriebssysteme und sonstige Programmiersprachen > Datenbanken > Datenbankoptimierung am bestehenden System (mysql)
Antwort
 
Themen-Optionen
Alt 22.06.2007, 03:01 Nach oben    #1
Benjamin Steininger
 
Benutzerbild von robo47
 
Registriert seit: 02.06.2005
Ort: weiher im tiefsten Odenwald
Beiträge: 1.180
Standard Datenbankoptimierung am bestehenden System (mysql)

Also ich mache mir momentan darüber Gedanken die Datenbankabfragen eines Scriptes zu optimieren und denke da insbesondere an das setzen von Indizes auf Spalten, dazu wollte ich wissen ob es bei mySQL möglich ist, eine Art Statistisches Logging darauf zu machen, welche Spalten mehrfach im WHERE-Teil von abfragen auftauchen, vielleicht gibt es auch fertige Lösungen die beispielsweise mysql-logs auswerten zu diesem Zweck.

Ich bin mir zwar im klaren darüber, welche Spalten in meinen Querys abgefragt werden und auch welche wohl relativ oft, aber ich dachte daran dass sich Theorie und Praxis zu oft unterscheiden und wollte deshalb Produktivsysteme in dieser Form einfach mal für 1-2 Monate überwachen, weil ich denke, dass mir dies bessere Informationen darüber gibt, wie die Belastung der Datenbank wirklich ist und wo man sinnvoller Weise eher Indizes setzt, Dinge an der Datenbank ändert oder auch andere Optimierungen durchführen kann.

Vielleicht hat jemand ja in dem Bereich Erfahrungen, kennt (möglichst kostenlose) Tools die einem sowas ermöglichen oder kennt andere Tips die mir beim meinem Problem helfen.

mfg
robo47
robo47 ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 22.06.2007, 11:00 Nach oben    #2
Ben
Benjamin Klaile
 
Benutzerbild von Ben
 
Registriert seit: 02.12.2004
Ort: Remagen
Beiträge: 4.480
Standard

Kenne jetzt keine Tools, aber vielleicht hilft dir ja die Auswertung dieses speziellen Logfiles?

5.11.5. The Slow Query Log
http://dev.mysql.com/doc/refman/5.1/...query-log.html
Ben ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 22.06.2007, 13:42 Nach oben    #3
Benjamin Steininger
 
Benutzerbild von robo47
 
Registriert seit: 02.06.2005
Ort: weiher im tiefsten Odenwald
Beiträge: 1.180
Standard

Slow Query Log ist mir bekannt, aber es sind halt keine wirklich lang dauernden Querys, mir gehts es mehr um alle Querys.
robo47 ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 22.06.2007, 13:52 Nach oben    #4
Erfahrener Benutzer
 
Benutzerbild von Bleistift
 
Registriert seit: 31.12.2006
Ort: Zürich
Beiträge: 298
Standard

Hm... Ich würde das direkt in der Applikationen mit einem DB-Profiler machen.
Du kannst ja direkt in der Klasse, die die Applikation für die SQL-Abfragen nutzt, die Queries () aufzeichnen und später dann auswerten.
__________________
. <-- This is Punkt. Copy Punkt into your signature to help him on his way to world domination.
Bleistift ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 22.06.2007, 14:14 Nach oben    #5
Benjamin Steininger
 
Benutzerbild von robo47
 
Registriert seit: 02.06.2005
Ort: weiher im tiefsten Odenwald
Beiträge: 1.180
Standard

Zitat:
Zitat von Bleistift Beitrag anzeigen
Hm... Ich würde das direkt in der Applikationen mit einem DB-Profiler machen.
Du kannst ja direkt in der Klasse, die die Applikation für die SQL-Abfragen nutzt, die Queries () aufzeichnen und später dann auswerten.
Hmm ich frag mich dabei, was schneller und einfacher ist, mysql einfach alle querys mitloggen zu lassen oder einen DB-Profiler das während der Laufzeit machen zu lassen, aktuell würde ich das aufzeichnen wohl bevorzugt von SQL selbst machen lassen.

mfg
robo47
robo47 ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 22.06.2007, 16:58 Nach oben    #6
Martin Eisengardt
 
Registriert seit: 30.03.2006
Ort: Pfinztal
Beiträge: 355
Standard

Zitat:
Zitat von robo47 Beitrag anzeigen
Hmm ich frag mich dabei, was schneller und einfacher ist, mysql einfach alle querys mitloggen zu lassen oder einen DB-Profiler das während der Laufzeit machen zu lassen, aktuell würde ich das aufzeichnen wohl bevorzugt von SQL selbst machen lassen.
Schneller und einfacher ist das, was schneller und einfacher ist. Klingt blöd, ist aber so. Zunächst einmal kommt das ganze stark darauf an, wo die Performance-Probleme herrühren. Da man das aber nie (oder nur selten) wirklich weiß vor der nalyse, kann man eigentlich nicht zielgerichtet analysieren.

Glücklicherweise gibt es im klassischen Umfeld vier Ursachen für Performance-Probleme.

1. Keine Index-Nutzung
Selbst bei kleinen Tabellen mag das sinnlos erscheinen, einen Index zu erstellen. Aber nutzt man rege JOINs und ergeben sich damit für das SQL permutiert sehr sehr viele Ergebnis-Datensätze oder verjoint man mit einer sehr großen Tabelle, können Indizes einen Sinn ergeben.

2. Zu große Datenmengen
Jedes Datenbanksystem hat Optimierungen. Aber irgendwann stolpert jedes Datenbanksystem über zu große Datenmengen.

3. zu große temporäre Tabellen
Ein Optimizer hat irgendwann Probleme, wenn Subselects rege genutzt werden. Selbst wenn die resultierende Datenmenge klein ist. Sind die temporären Datenmengen eines Subselects gigantisch, stolpert jedes noch so tolle Datenbanksystem.

4. zu viele Selects
Gerade Anfänger nutzen eigentlich eher selten einfachste Joins. Die Folge sind oft Verschachtelungen mehrerer Selects, wobei dann die inneren Selects gleich hundertfach oder tausendfach ausgeführt werden pro Request.


Im Grunde kann man das ganze also zweiteilen:
- Häufigkeit von Selects
- Langläufigkeit von Selects
Bei beiden stellt MySQL bereits Techniken zur Verfügung, um so etwas herauszufinden. Wie man es tunen kann, kommt dann immer auf die konkreten Fälle an: http://dev.mysql.com/doc/refman/5.1/en/query-speed.html
__________________
Open Sourcing the Online Gaming Universe
PHP/SQL/Java/C++/Assembler.
Seit Jahren Mitglied und Entwickler in einem der wohl größten Java-Projekte der Welt: http://weblogs.java.net/blog/hansmul...e_desktop.html
mepeisen ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 22.06.2007, 18:19 Nach oben    #7
Benjamin Steininger
 
Benutzerbild von robo47
 
Registriert seit: 02.06.2005
Ort: weiher im tiefsten Odenwald
Beiträge: 1.180
Standard

Es ist ja nicht so, dass es aktuell Performance-Probleme gibt, es ist viel mehr so, dass ich gerne schauen würde ob sich ein bestehendes System eventuell weiter optimieren lässt.
robo47 ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 22.06.2007, 20:20 Nach oben    #8
Martin Eisengardt
 
Registriert seit: 30.03.2006
Ort: Pfinztal
Beiträge: 355
Standard

Zitat:
Zitat von robo47 Beitrag anzeigen
Es ist ja nicht so, dass es aktuell Performance-Probleme gibt, es ist viel mehr so, dass ich gerne schauen würde ob sich ein bestehendes System eventuell weiter optimieren lässt.
Das ist ja wurscht. In deinem Fall wendest du halt einfach deutlich sensiblere Kriterien an, also was Laufzeit und Häufigkeit eines SQLs angeht.

Das ist einfache Mathematik: Ein SQL, der 2 Millisekunden braucht, wird sich kaum tunen lassen. Der Aufwand ihn zu tunen, ist zu hoch. Dann tunt man lieber einen SQL, der 15 Sekunden dauert. Denn den kann man vielleicht so tunen, dass er nur noch 0,1 Sekunden dauert. Der Nutzen ist groß.

Umgekehrt: Wird der SQL von 2 Millisekunden Länge in der Minute 5 Millionen mal aufgerufen, der SQL von 15 Sekunden aber nur einmal am Tag, tunt man doch lieber den "schnellen" SQL. Dann halt vielleicht mit einem Cache oder ähnlichem.
__________________
Open Sourcing the Online Gaming Universe
PHP/SQL/Java/C++/Assembler.
Seit Jahren Mitglied und Entwickler in einem der wohl größten Java-Projekte der Welt: http://weblogs.java.net/blog/hansmul...e_desktop.html
mepeisen ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Antwort

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
[Suche] MySQL Tool ähnlich MySQL Front ex³ Gesuche 5 22.12.2006 18:52
Newsletter system (kostenlos, php4, ohne mysql) robo47 Gesuche 1 21.09.2006 10:11
eigenes Template System mit Sprachunterstützung jjelliss PHP-Programmierung 61 15.09.2006 10:00
ssh tunnel zu einer mysql datenbank beny_mcde Datenbanken 4 07.06.2006 16:05
MySQL 5.1 kommt in die Beta-Phase Ben Nachrichten 1 02.03.2006 14:31


Alle Zeitangaben in WEZ +2. Es ist jetzt 17:51 Uhr.


Powered by vBulletin® Version 3.7.3 (Deutsch)
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44