Signatur
Beschreibung
pg_result_memory_size() liefert die Speichergröße in Bytes, die ein PostgreSQL-Ergebnis-Objekt (vom Typ PgSql\Result) intern belegt. Die Funktion ermöglicht es, den Ressourcenverbrauch einzelner Datenbankabfragen zur Laufzeit zu messen und zu überwachen.
Dies ist besonders nützlich bei der Performance-Analyse und beim Debugging: Werden sehr große Ergebnismengen geladen, kann der belegte Speicher schnell in den Megabyte-Bereich wachsen. Mit dieser Funktion lässt sich gezielt erkennen, welche Abfragen unverhältnismäßig viel RAM belegen, und es können Optimierungen wie Paginierung oder LIMIT-Klauseln gezielt eingesetzt werden.
Die zurückgegebene Zahl entspricht dem von der libpq-Bibliothek für dieses Ergebnis reservierten Speicher und kann leicht von der tatsächlichen PHP-Speichernutzung abweichen, da PHP eigene Overhead-Strukturen hinzufügt. Dennoch ist der Wert ein guter Indikator für die Größe des Ergebnisses.
Die Funktion steht erst ab PHP 8.1.0 zur Verfügung und erwartet das neue objektorientierte PgSql\Result-Handle, das seit PHP 8.1 anstelle der älteren Resource-Handles verwendet wird.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $result Pflicht | PgSql\Result | Ein PgSql\Result-Objekt, das von Funktionen wie pg_query(), pg_query_params() oder pg_execute() zurückgegeben wurde. |
Rückgabewert
Beispiele
Speicherbedarf einer einfachen Abfrage messen
<?php
$conn = pg_connect('host=localhost dbname=testdb user=postgres password=geheim');
if (!$conn) {
die('Verbindung fehlgeschlagen');
}
$result = pg_query($conn, 'SELECT * FROM benutzer');
if (!$result) {
die('Abfrage fehlgeschlagen: ' . pg_last_error($conn));
}
$bytes = pg_result_memory_size($result);
echo 'Speicherbedarf des Ergebnisses: ' . $bytes . ' Bytes' . PHP_EOL;
echo 'Das entspricht ca. ' . round($bytes / 1024, 2) . ' KB' . PHP_EOL;
pg_free_result($result);
pg_close($conn);
Speicherbedarf mehrerer Abfragen vergleichen
<?php
$conn = pg_connect('host=localhost dbname=testdb user=postgres password=geheim');
if (!$conn) {
die('Verbindung fehlgeschlagen');
}
$abfragen = [
'Alle Benutzer' => 'SELECT * FROM benutzer',
'Nur Admins' => "SELECT * FROM benutzer WHERE rolle = 'admin'",
'Nur IDs und Namen' => 'SELECT id, name FROM benutzer',
];
foreach ($abfragen as $bezeichnung => $sql) {
$result = pg_query($conn, $sql);
if ($result) {
$bytes = pg_result_memory_size($result);
printf("%-25s: %d Bytes\n", $bezeichnung, $bytes);
pg_free_result($result);
}
}
pg_close($conn);
// Wichtig · Fallstricke
Versionshinweis: Diese Funktion ist erst ab PHP 8.1.0 verfügbar. In älteren PHP-Versionen gibt es keine direkte Entsprechung. Wer den Speicherbedarf unter älteren Versionen schätzen möchte, kann sich mit memory_get_usage() vor und nach der Abfrage behelfen.
Genauigkeit: Der zurückgegebene Wert spiegelt den von libpq intern verwalteten Speicher wider. PHP-eigene Strukturen, Zend-Engine-Overhead und Referenz-Zähler sind darin nicht enthalten. Der Wert ist daher als Richtwert zu verstehen.
Speicher freigeben: Nach der Verwendung eines Ergebnisses sollte pg_free_result() aufgerufen werden, um den reservierten Speicher umgehend freizugeben, insbesondere bei großen Ergebnismengen in langlebigen Prozessen.