Как мне распечатать все запросы в Magento? - PullRequest
17 голосов
/ 24 марта 2010

Можно ли отобразить все строки запроса в Magento? Мне очень нравится видеть, какие запросы выполняются.

Спасибо

Ответы [ 6 ]

53 голосов
/ 16 декабря 2010

In Varien_Db_Adapter_Pdo_Mysql

Magento 1.4 : lib/varien/Db/Adapter/Pdo/Mysql.php

набор

protected $_debug               = true;
protected $_logAllQueries       = true;

и (если не существует) создать папку, определенную в

protected $_debugFile           = 'var/debug/sql.txt';

Дать разрешение на чтение / запись

26 голосов
/ 24 марта 2010

Я не уверен на 100%, что он будет перехватывать каждый запрос, но большинство из них выполняется методом Zend_Db_Adapter_Abstract query в

.
lib/Zend/Db/Adapter/Abstract.php

Имея это в виду, вы можете временно добавить некоторые операторы отладки (к копии, которую вы делаете в app/code/local/Mage, чтобы быть в безопасности)

public function query($sql, $bind = array())
{
    // connect to the database if needed
    $this->_connect();

    // is the $sql a Zend_Db_Select object?
    if ($sql instanceof Zend_Db_Select) {
        if (empty($bind)) {
            $bind = $sql->getBind();
        }

        $sql = $sql->assemble();
    }
    echo "{$sql}\n<br />\n";
    var_dump($bind);

Если вам нужно поймать их всех, лучше сделать это на уровне MySQL (что не всегда возможно в зависимости от ситуации с вашим хостом / ИТ)

22 голосов
/ 04 августа 2011

Активируйте Zend SQL Profiler со следующим узлом в вашем local.xml

<resources>
 <default_setup>
  <connection>
   <profiler>1</profiler>

Затем вы можете получить доступ к профилировщику где-нибудь в вашем коде и получить много информации обо всех выполненных запросах:

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

Чтобы просто вывести все запросы:

print_r($profiler->getQueryProfiles());

Вы можете добавить эти две строки в конце index.php, чтобы увидеть все запросы внизу каждой страницы. Имейте в виду, что это нарушит запросы AJAX, которые возвращают ответ JSON, поэтому вы можете рассмотреть возможность регистрации запросов вместо их печати с этим кодом (снова добавьте его в конце index.php):

$profiler = Mage::getSingleton('core/resource')->getConnection('core_write')->getProfiler();
Mage::log(print_r($profiler->getQueryProfiles(), true), null, 'queries.log', true);

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

Не забудьте снова удалить строки после завершения отладки!

6 голосов
/ 24 марта 2010

Запросы будут значительно различаться в зависимости от вашей деятельности. Если у вас есть контроль над сервером MySQL, попробуйте включить ведение журнала запросов:

set global general_log = on

Затем вы можете получить журнал SQL для просмотра запросов. В качестве слова или предупреждения Magento имеет тенденцию выполнять десятки запросов при каждой загрузке страницы и сотни для сохранения объекта.

Спасибо, Джо

5 голосов
/ 13 января 2011
$collection->printLogQuery(true);
1 голос
/ 01 февраля 2014

Включите ведение журнала MySQL, чтобы обязательно регистрировать все запросы транзакций. Вот как вы можете включить ведение журнала. Чтобы включить ведение журнала в файл. Поместите следующее в файл my.cnf или my.ini, если в Windows, и перезапустите MySQL.

log = /path/to/your/logfile.log

Затем, если вы хотите войти в таблицу mysql.general_log , выполните следующие запросы:

SET GLOBAL log_output = 'TABLE';
SET GLOBAL general_log = 'ON';

Запустите их, если хотите войти в файл:

SET GLOBAL log_output = "FILE"; 
SET GLOBAL general_log = 'ON';
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...