Получить размер набора результатов MySql из запроса с использованием PHP - PullRequest
3 голосов
/ 09 февраля 2010

Можно ли получить размер набора result при выполнении запроса?

Мне нужно установить правильный MySql cache_limit (МБ), и поэтому я пытаюсь выполнить некоторые запросы, но мне нужно знать размеры result -наборов для точной настройки конфигурации моего кэша.

Что именно делает query_cache_limit при измерении размера запроса (или результата) ...

Любая помощь приветствуется!

Спасибо

Ответы [ 3 ]

4 голосов
/ 14 июля 2011

Есть несколько способов измерить размер данных, отправляемых с вашего сервера mysql в ваш процесс php:

Pure SQL

Выполните запрос и выполните SHOW SESSION STATUS сразу после него.Вы получите несколько статистических данных, включая отправленные и полученные байты:

Bytes_received  191
Bytes_sent      120

Вычтите байты только из запроса SHOW SESSION STATUS, и у вас есть точные значения.

mysqlnd

PHP 5.3 предлагает «Собственный драйвер MySQL», который предоставляет несколько полезных опций для отладки вашего соединения.

Сделайте запрос и затем вызовите mysqli_get_connection_stats.Он также возвращает статистику сети:

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

Вам необходимо использовать mysqli и mysqlnd здесь, но вы получите более точные числа, как в случае решения на чистом SQL.

2 голосов
/ 09 февраля 2010

Как пример, вы можете попробовать

<?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

?>

или

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

0 голосов
/ 09 февраля 2010

Я полагаю, что метод Петы по использованию memory_get_usage до и после, вероятно, самый простой. Чтобы получить более точный результат, вы могли бы использовать mb_strlen, но вам нужно было бы перебирать каждую строку в результате и каждое поле каждой строки, суммируя итоговую сумму по мере продвижения. Вам также необходимо использовать правильную кодировку.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...