php.de

Zurück   php.de > Webentwicklung > PHP Einsteiger > PHP Tipps 2006

 
 
LinkBack Themen-Optionen Thema bewerten
Alt 02.10.2006, 20:07  
Benutzer
 
Registriert seit: 18.11.2004
Beiträge: 56
Gumfuzi
Standard Größe des Arrays oder der MySQL-Abfrage in Bytes?

Hallo Leute,

wie kann ich am einfachsten die Größe eines Arrays herausfinden - also nicht die Anzahl der darin enthaltenen Einträge (geht ja mit "count()"), sondern die Summe aller Zeichen in dem Array (rekursiv) - oder eben die größe in Bytes.

Es geht darum, zu überprüfen, wieviele Bytes durch die MySQL-Anfrage an RAM benötigt werden, da der Server manchmal Speicher auslagern muss und ich aber nicht sehen kann, bei welcher Abfrage das passiert.
Darum wollte ich gerne jede Abfrage mitloggen, die SQL-Abfrage ist eine Funktion, daher möchte ich die Byteanzahl gerne dort ermitteln können und dann weiterverwenden.

Entweder es gibt da eine Option beim SQL-Befehl oder ev. kann man die Summe aller Zeichen des Arrays ausrechnen lassen. Habe in der PHP-Doku noch nichts derartiges finden können oder ev. nach dem falschen gesucht...

Hoffe, ich habe das verständlich erklärt.

Vielen Dank für eure Tipps!

P.S.:
mit dem Code erhalte ich schonmal die Felderanzahl:
Code:
echo mysql_num_rows($result) * mysql_num_fields($result);
(Zeilen * Spalten)

nur die Bytegröße scheint nicht machbar zu sein...
Gumfuzi ist offline  
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 02.10.2006, 20:40  
Erfahrener Benutzer
 
Registriert seit: 05.04.2005
Beiträge: 1.333
Freeaak ist zur Zeit noch ein unbeschriebenes Blatt
Standard

PHP-Code:
<?php
function getArrayBytes($arr)
{
    foreach(
$arr as $key=>$val$str .= is_array($val) ? getArrayBytes($val) : $val;
    return 
$str;
}
$arr = array("text",123,array(321,"blaaa",'asdfghjk'),1234567890);
echo 
strlen(getArrayBytes($arr));
?>
gibt dir die byte-größe des inhalts eines arrays rekursiv wieder (auch mehrdimensional)
__________________
"Wenn du nicht weißt, was du tust: Machs mit Eleganz!"

(Murphy's Gesetze)
Freeaak ist offline  
Alt 02.10.2006, 21:19  
Erfahrener Benutzer
 
Registriert seit: 08.11.2004
Beiträge: 2.079
Der_Gerhard ist zur Zeit noch ein unbeschriebenes Blatt
Der_Gerhard eine Nachricht über ICQ schicken
Standard

Ich weiß nicht so genau, was diese Funktion da liefert, aber glaube nicht, dass das eine brauchbare Anzahl an Bytes der ursprünglichen Werte ist.

Bei allen Zahlen wird nur die Länge der Zahlendarstellung in einem String genommen. Nicht der Speicherbedarf der Zahl.

Außerdem ist noch zu unterscheiden, auf welchem Rechner das alles läuft.
Auf dem Server, auf dem das PHP-Script ausgeführt wird, ist pro Abfrage sinnvollerweise nur eine gerade bearbeitete Zeile im Speicher.

Auf dem Rechner, wo MySQL läuft, kann das gesamte Ergebnis im Speicher liegen. Wobei es Sache von MySQL ist, ob die Daten im Speicher gehalten werden oder in irgendeine temporäre Datei gepackt werden.

An die Auslastung des MySQL-Servers wirst Du vermutlich gar nicht rankommen.

Um den Speicherbedarf auf dem PHP-Server zu ermitteln, könntest Du den freien Speicher vor und nach der Operation ermitteln. (Stichwort: memory_get_usage() ) Das ist zwar nur indirekt, aber bei einer interpretierten Scriptsprache ohne Typbindung und mit beliebigen impliziten Konvertierungen dürfte eine direkte Ermittlung recht schwierig sein.
__________________
**********************************
Nein, ich bin nicht die Signatur.
Ich putze hier nur.
**********************************
Der_Gerhard ist offline  
Alt 02.10.2006, 21:43  
Benutzer
 
Registriert seit: 18.11.2004
Beiträge: 56
Gumfuzi
Standard

Zitat:
Invalid argument supplied for foreach() in ...
vorher wird ein SQL-Befehl definiert und mit $result =
Code:
$db->sql_query($sql))
ausgeführt (phpBB Forum) mit
Code:
while ($row = $db->sql_fetchrow($result))
werden die Daten dann Reihenweise verarbeitet.

Danach wird zwischen SQL-Ausführung und der Verarbeitung die Funktion mit "echo strlen(getArrayBytes($result));" aufgerufen.

Werden so DB-Abfragen nicht als Array gespeichert?

*edit*
@Der_Gerhard:
danke für die Info!
Gumfuzi ist offline  
Alt 02.10.2006, 22:51  
Erfahrener Benutzer
 
Registriert seit: 05.04.2005
Beiträge: 1.333
Freeaak ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Zitat:
Zitat von Der_Gerhard
Ich weiß nicht so genau, was diese Funktion da liefert, aber glaube nicht, dass das eine brauchbare Anzahl an Bytes der ursprünglichen Werte ist.

Bei allen Zahlen wird nur die Länge der Zahlendarstellung in einem String genommen. Nicht der Speicherbedarf der Zahl.

Außerdem ist noch zu unterscheiden, auf welchem Rechner das alles läuft.
Auf dem Server, auf dem das PHP-Script ausgeführt wird, ist pro Abfrage sinnvollerweise nur eine gerade bearbeitete Zeile im Speicher.
naja, sie gibt die anzahl der zeichen in einem array zurück. und ist ein zeichen nich 1 byte?
Freeaak ist offline  
Alt 02.10.2006, 23:04  
Erfahrener Benutzer
 
Registriert seit: 08.11.2004
Beiträge: 2.079
Der_Gerhard ist zur Zeit noch ein unbeschriebenes Blatt
Der_Gerhard eine Nachricht über ICQ schicken
Standard

Wenn ein Eintrag den Wert 123456789 hat, so sind das aber je nach Implementierung 4 oder 8 Byte, da es ein 32Bit- oder 64Bit-ZAHLENWERT ist. Bei Deiner Variante sind es 9 Bytes, weil Du Zeichenketten zählst.

Andersrum, aber genauso falsch sieht es aus mit dem Wert 1. Als Zahl 4 oder 8 Bytes, als String 1 Zeichen.

Du konvertierst ja Zahlen erst nach Strings und zählst dann die Länge des Strings. Mit der ursprünglichen Zahl bzw. deren Platzverbrauch hat das doch nichts zu tun.

Außerdem, wird für eine Zeichenkette mehr Speicher benötigt, als darin an Zeichen gespeichert werden sollen.
__________________
**********************************
Nein, ich bin nicht die Signatur.
Ich putze hier nur.
**********************************
Der_Gerhard ist offline  
Alt 03.10.2006, 09:01  
Erfahrener Benutzer
 
Registriert seit: 03.01.2006
Beiträge: 253
CC84
Standard

hat schonmal irgendwer drüber nachgedahct, dass das Ergebnis einer Berechnung nur sehr marginal mit dem Speicherbedarf für seine Berechnung zusammen hängt?
Und da der mysql Server nix anderes macht, als ein Ergebnis zu "berechnen" (ob das nun ein binärer Vergleich ist oder eine wirkliche Rechnung macht dabei keinen Unterschied)
Das heisst, am Ergebnis kann ich nicht mal im Ansatz erkennen, wie viel Speicher der Mysql Server dafür verbraten hat. Wenn du einen Datensatz aus 2 Millionen haben willst, muss der Server (im ungünstigsten Fall) ja 2 Millionen Vergleiche anstellen.
Kannst dir also überlegen wo der Speicher drauf geht und in wie weit du mit php da ran kommst.
CC84 ist offline  
Alt 03.10.2006, 11:17  
Erfahrener Benutzer
 
Registriert seit: 08.11.2004
Beiträge: 2.079
Der_Gerhard ist zur Zeit noch ein unbeschriebenes Blatt
Der_Gerhard eine Nachricht über ICQ schicken
Standard

Ja, auf sowas ähnliches hab ich in meiner ersten Antwort schonmal hin gewiesen.

Allerdings wird der MySQL-Server wohl kaum 2 Mio Datensätze gleichzeitig im Speicher halten. Es interessieren ja höchstens die, bei denen der Vergleich positiv ausgefallen ist.
__________________
**********************************
Nein, ich bin nicht die Signatur.
Ich putze hier nur.
**********************************
Der_Gerhard ist offline  
Alt 03.10.2006, 15:40  
Erfahrener Benutzer
 
Registriert seit: 17.07.2006
Beiträge: 140
louis
Standard Re: Größe des Arrays oder der MySQL-Abfrage in Bytes?

Zitat:
Zitat von Gumfuzi
Es geht darum, zu überprüfen, wieviele Bytes durch die MySQL-Anfrage an RAM benötigt werden, da der Server manchmal Speicher auslagern muss und ich aber nicht sehen kann, bei welcher Abfrage das passiert.
Darum wollte ich gerne jede Abfrage mitloggen, die SQL-Abfrage ist eine Funktion, daher möchte ich die Byteanzahl gerne dort ermitteln können und dann weiterverwenden.
Wie wäre es, wenn du deinen MySQL Server mitloggen lässt, z.B. so wie hier beschrieben:

http://dev.mysql.com/doc/refman/5.0/...query-log.html

Wenn du da an den Parametern für den slow query ein bisschen schraubst, solltest du doch deine langsamen Anfragen rauskriegen...
__________________
mfg louis
louis ist offline  
Alt 03.10.2006, 16:03  
Benutzer
 
Registriert seit: 18.11.2004
Beiträge: 56
Gumfuzi
Standard

Many thanks!!!
Gumfuzi ist offline  
 


Themen-Optionen
Thema bewerten
Thema bewerten:

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 an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
[Erledigt] MySql Frage: Problem mit einer etwas lomplexeren Abfrage tomtaz Datenbanken 5 24.06.2008 22:36
MySQL Abfrage als PHP class d3rbastl3r PHP Tipps 2008 2 11.06.2008 15:41
Frage: richtige SQL Abfrage von einer MySQL Spalte die SET werte besitzt Seb PHP Tipps 2008 2 29.05.2008 11:36
MySQL Abfrage Von / Bis andrew22 Datenbanken 1 02.10.2006 11:04
von mysql tabellen die größe in bytes von bestimmten zeilen Blank Datenbanken 5 07.08.2006 15:40
MySQL - Abfrage: Unterschiedliche Ergebnisse aus PHP/manuell horstenpeter Datenbanken 3 16.07.2006 13:22
mysql abfrage in Schleife havok PHP Tipps 2006 6 09.05.2006 08:39
mysql abfrage mqs PHP Tipps 2006 4 09.04.2006 17:57
Abfrage bei mySQL 4 ApfeL Datenbanken 5 24.03.2006 18:53
[Erledigt] MySQL Server startet nicht mehr richtig... Datenbanken 16 03.03.2006 19:40
Suche Tipps für Persormance-Steigerung (Geld für Nützliches) Beitragsarchiv 18 16.08.2005 10:57
einfache mysql abfrage und mysql update haut nicht ganz hin djrace PHP Tipps 2005-2 6 12.08.2005 15:28
Werte eines Arrays in eine MySQL schreiben PHP Tipps 2004 2 28.06.2004 13:32
komplizierte mySQL Abfrage Datenbanken 6 25.06.2004 15:34
[Erledigt] mysql Abfrage Datenbanken 5 18.06.2004 14:16

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
php array größe ermitteln, php array länge ermitteln, php array speicherbedarf, php array größe bestimmen, mysql abfrage größe, speicherbedarf array, http://www.php.de/php-tipps-2006/42361-groessye-des-arrays-oder-der-mysql-abfrage-bytes.html, php speicherbedarf array, php speicherbedarf eines arrays, array größe ermitteln php, php größe eines array ermitteln, php array speicherverbrauch berechnen, php array größe ermitteln byte, speicherbedarf array php, php array länge bestimmen, byte größe von arrays, php größe in byte eines arrays, php array größe byte, php array größe festlegen, mysql größe ermitteln zelle

Alle Zeitangaben in WEZ +1. Es ist jetzt 18:47 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum

Creative Commons License
Dieser Inhalt ist unter einer Creative Commons-Lizenz lizenziert.