Как регистрировать медленные запросы на виртуальном хостинге MySQL? - PullRequest
6 голосов
/ 17 апреля 2010

У меня есть общий хостинг, где у меня есть мой веб-сайт и база данных MySQL. Я установил скрипт с открытым исходным кодом для статистики (phpMyVisites), и в последнее время он начал работать очень медленно. Он написан с использованием какого-то фреймворка и имеет много PHP-файлов. Я знаю, что для поиска медленных запросов я могу использовать функцию медленного журнала запросов в MySQL. Но на этом виртуальном хостинге я не могу использовать этот метод, потому что я не могу изменить my.cnf. Я не хочу менять свой статистический скрипт на другой, и я не хочу возиться со всеми файлами этого скрипта, чтобы выяснить, куда поместить диагностический код для регистрации запросов вручную. Я хотел бы сделать это без изменений в коде PHP.

Итак, мой вопрос:

Как регистрировать медленные запросы в этих кодировках?:

  • Невозможно изменить my.cnf, чтобы включить медленный журнал запросов
  • Невозможно изменить скрипт статистики на другой
  • Не знаю, как написан scrpt и где выполняются команды mysql
  • Не могу запросить у моего провайдера медленный журнал запросов

Есть ли способ сделать это простым, легким и быстрым способом?

Ответы [ 4 ]

4 голосов
/ 17 апреля 2010

Хм, возможно, создайте функцию, которая проверяет, сколько времени потребовался sql-запрос, прежде чем он вернул значение? Затем, если он превысил указанное количество, зарегистрируйте его ... например, в php, я бы сделал это так

$before = time();
//run your query
$after = time();
$difference = $after - $before
if($difference > 5000)
   //Log query

Это эмулирует регистратор запросов slog, я не думаю, что есть способ включить его на виртуальном хостинге.

Надеюсь, это поможет:)

3 голосов
/ 17 апреля 2010

Я быстро взглянул на phpMyVisites. В config.inc.php я нашел следующее:

// Other
if(!defined('DEBUG')) define('DEBUG', false);
define('DEFAULT_ACTION', false);

error_reporting( E_ALL );

if(DEBUG)
{
    define('PRINT_TIME', false);
    define('PRINT_QUERY_COUNT', true);
    define('SAVE_DB_LOG', true);
    define('PRINT_QUERY', true);
} 

Я подозреваю, что SAVE_DB_LOG может быть хорошей отправной точкой, поэтому я попытался бы включить режим DEBUG.

2 голосов
/ 18 апреля 2010

Передает ли дамп данных в локальную тестовую систему, где вы можете активировать журнал медленных запросов, параметр?

0 голосов
/ 17 апреля 2010

Вы можете написать скрипт, который отслеживает mysql processlist во время работы медленного скрипта.

...