Hi,
Die Perl-Anwendung selbst kann ich schon ganz ordentlich benchmarken - die Ergebnisse der Funktion times() reichen mir dafür aus.
Du kennst aber perldoc Benchmark?
mySQL selbst ist jedoch kein Kindprozeß
Richtig. MySQL ist ein Server, der von Perl aus angesprochen wird - und genau wie bei einem HTTP-Server hast Du vom Client (Deinem Script) aus keine Chance, die Roundtrip-Zeit con der Arbeitszeit zu trennen, geschweige denn noch detailliertere Werte zu erhalten, solange der Server diese Werte nicht selbst liefert.
der mySQL-Prozeß geht aber kurzfristig steil nach oben).
Das ist ja auch nicht schlimm. Wenn der Rechner diese Peaks verkraftet, dürfen sie ruhig auftauchen - und eine kurze Load-Steigerung von 0.3 auf 3 oder so ist nun wirklich nichts erschreckendes :-)
Nun würde ich gerne innerhalb meiner Perl-Anwendung auch die durch meine SQL-Statements verbrauchte Zeit irgendwie sinnvoll mit erfassen (um sie beispielsweise im generierten HTML-Dokument anzuzeigen).
Wie gesagt: Das wird schwierig. Mir ist nicht bekannt, dass MySQL solche Werte ausliefern würde.
Außerdem würde ich überhaupt erst mal vernünftige Werte sehen wollen - bisher kann ich nur grob schätzen, welcher Aufruf wieviel kostet.
Dazu kannst Du Deine Statements mit "EXPLAIN SELECT ..." testen; zumindest erfährst Du damit die Vorgehensweise des Servers. Ansonsten sollte in der Regel der Roundtrip am meisten Zeit verbraten - reduziere also die Anzahl der ausgeführten Statements, arbeite so gut es geht mit Joins, hole so viele Werte wie möglich (und nötig!) auf einmal.
Ich glaube zwar die "schnellen" und die "langsamen" Abfragen zu kennen, aber die Faktoren, um welche sich beide voneinander unterscheiden, kenne ich nur sehr ungefähr.
Vielleicht kann Dir da jemand mit Erfahrung zur Seite stehen. Beschreibe das DB-Layout (inklusive Indizes - und Statements, denn auch die gehören dazu!) und die vorhandenen Datenmengen, Änderungsraten etc.
daß mySQL dabei doch irgendwas cached und dasselbe Statement bei wiederholter Ausführung schneller wird als beim ersten Zugriff - welcher im realen Einsatz aber der interessante ist.
Nein; idealerweise sollte der Cache verwendet werden, denn dazu ist er da. Wenn das bei Dir die Ausnahme ist, könnte es ein Problem bei Deinen Statements geben.
Cheatah