Как проверить все запросы, выполняемые определенным кодом в Magento

Чтобы проверить все запросы на определенный фрагмент кода, я использую:

  • Измените с защищенного на public значение переменной $_debug в Varien_Db_Adapter_Pdo_Mysql

  • Сделайте то же самое для $_logAllQueries

  • Добавьте это перед выполнением кода:

    $adapter = Mage::getSingleton('core/resource')->getConnection('core_write');
    $adapter->_debug = true;
    $adapter->_logAllQueries = true;
    
  • Добавьте это после кода

    $adapter->_debug = false;
    $adapter->_logAllQueries = false;
    

    поэтому ваш окончательный код будет выглядеть следующим образом:

    $adapter = Mage::getSingleton('core/resource')->getConnection('core_write');
    $adapter->_debug = true;
    $adapter->_logAllQueries = true;
    
    Mage::getModel('catalog/product')->load(1);
    
    $adapter->_debug = false;
    $adapter->_logAllQueries = false;
    

Есть ли еще более элегантное решение?

Ответ 1

Существует расширение для Magento, которое я лично использую с давних времен (работает как для сообщества, так и для EE):

http://www.magentocommerce.com/magento-connect/magneto-debug.html

Это позволит вам - Проверить все запросы - Просмотреть все SQL-запросы, выполненные для запроса - Просмотреть все выполненные макеты - и многое другое

Ответ 2

Вы можете использовать вариант ответа на Как распечатать все запросы в Magento?

Вместо того, чтобы активировать профайлер глобально в local.xml, добавьте их до и после кода, который вы хотите проверить:

$profiler = Mage::getSingleton('core/resource')->getConnection('core_write')->getProfiler();
$profiler->setEnabled(true);

// ...

Mage::log(print_r($profiler->getQueryProfiles(), true), null, 'queries.log', true);
$profiler->setEnabled(false);

Затем вы найдете запросы в var/log/queries.log

Ответ 3

Вы можете просто открыть файл журнала MySQL и контролировать зарегистрированные запросы при запросе страницы. Если вы используете Linux, например, используйте команду tail -F, чтобы просмотреть все изменения в файле журнала в реальном времени.

Попробуйте это, например, на debian: tail-F /var/log/mysql.log