|
29 Jun |
Profiling mit MySQL Computer, MySQL, Tutorials
|
Manchmal begegnet man einer SQL-Abfrage, welche langsamer ist als erwartet. Man weiß genau, alles wurde getan, dass die Tabellen optimiert und sauber indexiert sind. Und dennoch ist die Abfrage zu langsam.
Hier hilft Profiling.
MySQL verfügt über einen eingebauten Profiler, der es ermöglicht, sehr detailliert zu tracen, für welchen Bestandteil einer Abfrage die Datenbank wie lange genau gebraucht hat.
Um den Profiler zu verwenden, geht man wie folgt vor:
(1) Einschalten des Profilers.
Per Default ist der Profiler deaktiviert, daher muss man ihn erst starten.
SET profiling = 1;
(2) Ausführen der eigentlichen Abfrage.
(3) Identifizieren der Abfrage-ID.
SHOW PROFILES;
Dieses Kommando wird in etwa folgendes zeigen:
Query_ID | Duration | Query
---------+-----------+-----------------------
... | ... | ...
29 | 0.0006200 | SHOW STATUS
30 | 0.3600000 | SELECT (your query here)
... | ... | ...
Jetzt weiß man, die Abfrage-ID ist 30.
(4) Profiling der Abfrage.
SHOW PROFILE FOR QUERY 30; // example
Dies zeigt die Details der Abfrage.
Status | Duration
--------------------------------+-------------------
starting | 0.000010
checking query cache for query | 0.000078
Opening tables | 0.000051
System lock | 0.000003
Table lock | 0.000008
init | 0.000036
optimizing | 0.000020
statistics | 0.000013
preparing | 0.000015
Creating tmp table | 0.000028
executing | 0.000602
Copying to tmp table | 0.000176
Sorting result | 0.000043
Sending data | 0.080032
end | 0.000004
removing tmp table | 0.000024
end | 0.000006
query end | 0.000003
freeing items | 0.000148
removing tmp table | 0.000019
closing tables | 0.000005
logging slow query | 0.000003
cleaning up | 0.000004
In diesem Beispiel wurde die meiste Zeit der Abfrage damit verbracht, das Ergebnis an den Client zurückzusenden. Vielleicht sollte man die Ergebnismenge reduzieren, oder ggf. den Query Cache erhöhen. Vielleicht geht man aber auch ganz anders vor, hier sollte man von Fall zu Fall prüfen, was sinnvoll und möglich ist.
Aber dank dem Profiling weiß man nun, wo man suchen muß!
|
4 Apr |
Firebug: Logfunktionen Computer, Tutorials
|
Viele Entwickler betrachten Firebug als die Mutter aller Web-Tools. Diese Ansicht ist durchaus begründet, denn Firebug umfassst mächtige Werkzeuge, mit welchen man so ziemlich alles machen kann, was man als Webentwickler so täglich braucht, angefangen von kleineren CSS-Experimenten bishin zum Debuggen von komplexen JScript-Anwendungen sowie dem Profiling von Webseiten.
Was nicht ganz so bekannt ist, man kann sogar über den Firebug aus JScript heraus Debug-Logs generieren.
Beispielsweise gibt…
console.log('Hallo Welt!');
…genau diesen Text in der Konsole aus.
Das kann man noch etwas verfeinern, denn schließlich unterscheidet man Infos, Warnings, Errors und Debugs!
console.debug('Debug');
console.info('Information');
console.warn('Warnung');
console.error('Fehler');
Und auch die Ausgabe von Variablen kommt nicht zu kurz:
var banane = 1.234;
var orange = "Test";
console.log("Mein %a hat den Wert %d", orange, banane);
Ästheten können auch Gruppen bilden, welche in der Konsole sauber dargestellt werden:
console.group('meine Gruppe');
console.info('Info1');
console.debug('Was ich wissen wollte...');
console.groupEnd();
Über noch mehr Möglichkeiten dieser Funktionen, wie z.B. Zeitwerte, Stacks u.s.w kann man sich hier auf der Seite von Firebug informieren.
Übrigens:
Die meisten dieser Funktionen sind mittlerweile auch im Debugger des Google Chrome verfügbar!
|
19 Mär |
kreatives WAIT-Kommando für DOS Computer, Tutorials
|
Vielleicht standen Sie auch mal vor dieser Thematik: Es gibt keinen direkten Weg, ein einfaches WAIT-Kommando in DOS zu stricken. Während ich an einer Lösung für eine kleine Aufgabe arbeitete, stolperte ich über einen sehr kreativen Weg, dies zu lösen:
PING 1.1.1.1 -n 1 -w 25000 >nul
Ja, genau. Das PING-Kommando kann als WAIT-Alternative verwendet werden!
Ein paar ergänzende Erklärungen:
- Die IP-Adresse 1.1.1.1 verweist auf das erste Netzwerk-Device/Karte, daher sollte diese Adresse in den allermeisten Fällen für ein System verfügbar sein.
- Der Parameter
-n 1setzt die Anzahl der Ping-Versuche auf 1. - Der zweite Parameter -w steht für die Wartezeit. Bitte beachten Sie, dass hier die Angabe in Millisekunden erfolgt, sodass der im Beispiel verwendete Wert 25000 tatsächlich 25 Sekunden entspricht.
>NULroutet den Datenstrom aus dem Output in das sogenannte Null-Device, damit wird jede Eingabe oder Antwort dieses Streams akzeptiert und weggelöscht.
Natürlich versuche ich immer, WAIT-Operationen in Programmen und Scripts zu vermeiden, aber manchmal hilft es doch, gerade beim Testen. Außerdem ist dies kein sehr exakter Ansatz, hier sollte man also nicht mit einer Atomuhr nachmessen. Dennoch ist dieser kreative Ansatz eine kleine, aber feine Lösung, falls man doch mal um ein WAIT nicht herumkommt…!
|
28 Sep |
Visualisierung von Sortierverfahren Fundstücke, Tutorials
|
Die Entwicklung von Sortierverfahren mag zwar für Nicht-Entwickler etwas wie schwarze Magie wirken, ist aber für einen Entwickler Grundwissen.
Eine gute, Coffescript-basierte Seite, welche dieses doch manchmal relativ abstrakte Thema on-thy-fly visualisiert, kann hier gefunden werden:
|
30 Jun |
IT-Weisheiten im Juni Computer
|
Weisheit 1:
Falls Flash-Anwendungen im Firefox den Browser reproduzierbar zum Absturz bringen, sollte man prüfen, ob in der Flashkonfiguration die Hardwarebeschleunigung aktiviert ist.
Weisheit 2:
Falls die Authentifizierung von Clients einer einfachen Windows-Heimnetzgruppe nicht funktioniert, könnte es auch daran liegen, dass die Systemzeit der Clients voneinander abweichen.
Weisheit 3:
VPN-Probleme können durchaus auch durch einen alten Router ausgelöst werden.