2010-02-09 4 views
3

Est-il possible d'obtenir la taille du result -set lors d'une requête?Obtenir la taille de l'ensemble de résultats MySql à partir de la requête en utilisant PHP

J'ai besoin de définir un bon MySQL cache_limit (Mo) et donc j'essaie quelques requêtes, mais j'ai besoin de connaître les tailles des result pour régler les configurations de mon cache.

Que signifie exactement query_cache_limit Lors de la mesure de la taille d'une requête (ou résultat) ...

Toute aide appréciée!

Merci

+0

Vous souhaitez donc dimensionner en octets un résultat de requête mysql? Et quelle fonction mysql_fetch utilisez-vous? – Petah

Répondre

2

Comme une estimation de rouph vous coud essayez

<?php 
// This is only an example, the numbers below will 
// differ depending on your system 

echo memory_get_usage() . "\n"; // 36640 

$a = mysql_fetch_assoc($result); 

echo memory_get_usage() . "\n"; // 57960 

unset($a); 

echo memory_get_usage() . "\n"; // 36744 

?> 

ou

echo strlen(serialize(mysql_fetch_assoc($result)));

+0

strlen ne sera pas toujours indicatif de la longueur des octets, car il peut y avoir des choses comme des chaînes multi-octets dans la réponse (qui prennent un caractère mais plusieurs octets) –

+0

Très vrai, comme je l'ai dit ce serait seulement une estimation. Considérant le problème, Camran sait certainement s'il y a un problème avec les chaînes multi-octets. Considérez également que la chaîne sérialisée peut ne pas représenter une taille précise par rapport à un tableau – Petah

0

Je crois que la méthode de Petah d'utiliser memory_get_usage avant et après est probablement la meilleure façon. Pour obtenir un résultat plus précis, vous pouvez utiliser mb_strlen mais vous devez parcourir chaque ligne du résultat et chaque champ de chaque ligne, en additionnant le total au fur et à mesure. Vous devez également utiliser le codage correct.

http://us3.php.net/manual/en/function.mb-strlen.php

4

Il existe plusieurs façons de mesurer la taille des données envoyées à partir de votre serveur mysql à votre processus de php:

SQL pur

Faites votre requête et exécuter SHOW SESSION STATUS directement après. Vous obtiendrez plusieurs statistiques, y compris les octets envoyés et reçus:

Bytes_received 191 
Bytes_sent  120 

les octets Soustraire à partir d'une seule requête SHOW SESSION STATUS, et vous avez les valeurs exactes.

mysqlnd

PHP 5.3 offre le "pilote natif MySQL", ce qui vous donne quelques bonnes options pour déboguer votre connexion.

Faites votre requête, puis appelez mysqli_get_connection_stats. Il renvoie les statistiques du réseau aussi:

Array 
(
    [bytes_sent] => 43 
    [bytes_received] => 80 
    ... 

Vous devez utiliser mysqli et mysqlnd, mais vous obtenez des chiffres plus précis qu'avec la solution pure SQL.

Questions connexes