Gideon: Was genau macht "result_buffering"

Hallo,

ich bin eben über diese Codezeilen gestolpert:

$this->db->setOption('result_buffering', false);
$res =& $this->db->query($sql);
$this->db->setOption('result_buffering', true);

Hier wird also für einen Query das "result_buffering" deaktiviert. Ich vermute, es tut das, wonach es benannt ist, nämlich das SQL Ergebnis zu speichern. Was genau aber bedeutet es, etwa für die Performance der Abfrage, des Servers, Speicher oder ähnliches?

Sinn der Frage: bei einem Projekt ohne den ursprünglichen Programmierer suchen wir nach Flaschenhälsen in der Performance. Könnte dies die Performance beeinträchtigen? Habt Ihr sonstige Tipps hierzu?

Danke,
Gideon

  1. echo $begrüßung;

    Hier wird also für einen Query das "result_buffering" deaktiviert. Ich vermute, es tut das, wonach es benannt ist, nämlich das SQL Ergebnis zu speichern. Was genau aber bedeutet es, etwa für die Performance der Abfrage, des Servers, Speicher oder ähnliches?

    Du hast nur den Aufruf eines Datenbanklayers gezeigt. Verschwiegen hast du, was der genau macht, und vor allem, welche Datenbankschnittstelle PHPs verwendet wird. Die MySQL-Schnittstelle beispielsweise holt bei einem mysql_query() im Hintergrund bereits alle ermittelten Datensätze ab. Das macht sie, damit Funktionen wie mysql_num_rows() ein richtiges Ergebnis liefern können. Mit mysql_unbuffered_query() werden die Datensätze nicht gleich abgeholt. Die mysql_fetch-Funktionen holen dann ihr Ergebnis nicht aus dem Puffer sondern bei jedem Datensatz direkt beim Server ab. (Bitte die Hinweise auf der verlinkten Handbuchseite beachten).

    Sinn der Frage: bei einem Projekt ohne den ursprünglichen Programmierer suchen wir nach Flaschenhälsen in der Performance. Könnte dies die Performance beeinträchtigen? Habt Ihr sonstige Tipps hierzu?

    Ich glaube nicht, dass man Flaschenhälse effektiv durch reine Codebetrachtung finden kann. Ihr solltet Messpunkte einbauen oder mit einem Profiler ans Werk gehen.

    echo "$verabschiedung $name";

  2. Hallo Gideon,

    ich bin eben über diese Codezeilen gestolpert:

    $this->db->setOption('result_buffering', false);
    $res =& $this->db->query($sql);
    $this->db->setOption('result_buffering', true);[/code]

    Ein Ratespiel. Da haben nur wenige Lust darauf. Du solltest etwas spendabler mit Informationen umgehen. Das hilft.

    <glaskugel>
    Vielleicht hilft Dir ja die Doku der Klasse MDB2_Driver_Common weiter.
    </glaskugel>

    Ich vermute, es tut das, wonach es benannt ist, nämlich das SQL Ergebnis zu speichern. Was genau aber bedeutet es, etwa für die Performance der Abfrage, des Servers, Speicher oder ähnliches?

    Das Handbuch Deines Datenbankmanagementsystems weiß bestimmt etwas darüber. Schau nach!

    Vinzenz