Як увійти в систему Magento SQL?


23

Чи є якийсь простий спосіб увімкнути всі запити, виконані Magento?

Мета - надрукувати всі виконані SQL, наприклад, під час завантаження сторінки

Відповіді:


43

Якщо ви хочете бути впевнені, що всі SQL фактично зареєстровані, я пропоную скористатися стороннім програмним забезпеченням:

  • Neon Profile SQL насправді безкоштовний і працює чудово
    (вам потрібно відредагувати local.xml, щоб приєднати Magento до Neon ... він працює як своєрідний проксі-сервер SQL, що реєструє все, що проходить через нього)

В альтернативному варіанті нативний Magento / Varien може бути наступним:

  1. редагувати lib/Varien/Db/Adapter/Pdo/Mysql.php
  2. змінити наступні властивості на true(рядок 103)
  3. у вас буде створений файл журналу var/debug/pdo_mysql.log

Тут слід змінити рядок: (коментарі не пояснюються)

 /**
     * Write SQL debug data to file
     *
     * @var bool
     */
    protected $_debug               = true;

    /**
     * Minimum query duration time to be logged
     *
     * @var float
     */
    protected $_logQueryTime        = 0.05;

    /**
     * Log all queries (ignored minimum query duration time)
     *
     * @var bool
     */
    protected $_logAllQueries       = true;

    /**
     * Add to log call stack data (backtrace)
     *
     * @var bool
     */
    protected $_logCallStack        = true;

Журнал виготовляється як наступний:

## 2014-06-26 12:18:47
## 10258 ## QUERY
SQL: SELECT `adminnotification_inbox`.* FROM `adminnotification_inbox` WHERE (title = 'Customize your order and invoice numbers to protect your sales using Order Number Customizer by XTENTO.') AND (url = 'http://www.xtento.com/magento-extensions/order-number-customizer.html?utm_source=feed&utm_medium=feed&utm_campaign=order_number_customizer')
AFF: 1
TIME: 0.0008

Якщо ви увімкнули, у $_logCallStackвас також буде парте TRACE

TRACE: #1 Varien_Db_Adapter_Pdo_Mysql#00000000644036ff00007f14137095e6#->_debugStat(2, 'SELECT `adminnot...', array(), &Varien_Db_Statement_Pdo_Mysql#000000006440371700007f14137095e6#) called at [lib/Varien/Db/Adapter/Pdo/Mysql.php:424]
#2 Varien_Db_Adapter_Pdo_Mysql#00000000644036ff00007f14137095e6#->query(&Varien_Db_Select#000000006440371800007f14137095e6#, array()) called at [lib/Zend/Db/Adapter/Abstract.php:753]
#3 Varien_Db_Adapter_Pdo_Mysql[Zend_Db_Adapter_Abstract]#00000000644036ff00007f14137095e6#->fetchRow(&Varien_Db_Select#000000006440371800007f14137095e6#) called at [app/code/core/Mage/AdminNotification/Model/Resource/Inbox.php:116]
#4 Mage_AdminNotification_Model_Resource_Inbox#00000000644034c500007f14137095e6#->parse(&Mage_AdminNotification_Model_Inbox#00000000644034e900007f14137095e6#, array(array('severity' => 4, 'date_added' => '2013-10-23 13:00...', 'title' => 'Customizing your...', 'description' => 'Easily add new c...', 'url' => 'http://www.xtent...'), array('severity' => 4, 'date_added' => '2014-04-09 17:00...', 'title' => 'Customize your o...', 'description' => 'Customize your M...', 'url' => 'http://www.xtent...'), array('severity' => 4, 'date_added' => '2014-05-06 17:00...', 'title' => 'Process orders i...', 'description' => 'Process all your...', 'url' => 'http://www.xtent...'))) called at [app/code/core/Mage/AdminNotification/Model/Inbox.php:118]
#5 Mage_AdminNotification_Model_Inbox#00000000644034e900007f14137095e6#->parse(array(array('severity' => 4, 'date_added' => '2013-10-23 13:00...', 'title' => 'Customizing your...', 'description' => 'Easily add new c...', 'url' => 'http://www.xtent...'), array('severity' => 4, 'date_added' => '2014-04-09 17:00...', 'title' => 'Customize your o...', 'description' => 'Customize your M...', 'url' => 'http://www.xtent...'), array('severity' => 4, 'date_added' => '2014-05-06 17:00...', 'title' => 'Process orders i...', 'description' => 'Process all your...', 'url' => 'http://www.xtent...'))) called at [app/code/local/Xtento/XtCore/Model/Feed.php:57]
#6 Xtento_XtCore_Model_Feed#000000006440348500007f14137095e6#->checkUpdate(&Varien_Event_Observer#00000000644034d900007f14137095e6#) called at [app/code/core/Mage/Core/Model/App.php:1338]
#7 Mage_Core_Model_App#00000000644036ef00007f14137095e6#->_callObserverMethod(&Xtento_XtCore_Model_Feed#000000006440348500007f14137095e6#, 'checkUpdate', &Varien_Event_Observer#00000000644034d900007f14137095e6#) called at [app/code/core/Mage/Core/Model/App.php:1317]
#8 Mage_Core_Model_App#00000000644036ef00007f14137095e6#->dispatchEvent('controller_actio...', array('controller_actio...' => &Fishpig_Wordpress_Adminhtml_WordpressController#000000006440364a00007f14137095e6#)) called at [app/Mage.php:451]
#9 Mage::dispatchEvent('controller_actio...', array('controller_actio...' => &Fishpig_Wordpress_Adminhtml_WordpressController#000000006440364a00007f14137095e6#)) called at [app/code/core/Mage/Core/Controller/Varien/Action.php:528]
#10 Fishpig_Wordpress_Adminhtml_WordpressController[Mage_Core_Controller_Varien_Action]#000000006440364a00007f14137095e6#->preDispatch() called at [app/code/core/Mage/Adminhtml/Controller/Action.php:160]
#11 Fishpig_Wordpress_Adminhtml_WordpressController[Mage_Adminhtml_Controller_Action]#000000006440364a00007f14137095e6#->preDispatch() called at [app/code/core/Mage/Core/Controller/Varien/Action.php:408]
#12 Fishpig_Wordpress_Adminhtml_WordpressController[Mage_Core_Controller_Varien_Action]#000000006440364a00007f14137095e6#->dispatch('checkVersion') called at [app/code/core/Mage/Core/Controller/Varien/Router/Standard.php:250]
#13 Mage_Core_Controller_Varien_Router_Admin[Mage_Core_Controller_Varien_Router_Standard]#00000000644036ae00007f14137095e6#->match(&Mage_Core_Controller_Request_Http#000000006440365c00007f14137095e6#) called at [app/code/core/Mage/Core/Controller/Varien/Front.php:176]
#14 Mage_Core_Controller_Varien_Front#000000006440365700007f14137095e6#->dispatch() called at [app/code/core/Mage/Core/Model/App.php:354]
#15 Mage_Core_Model_App#00000000644036ef00007f14137095e6#->run(array('scope_code' => '', 'scope_type' => 'store', 'options' => array())) called at [app/Mage.php:687]
#16 Mage::run('', 'store') called at [index.php:87]

15

Активуйте Zend SQL Profiler за допомогою наступного вузла у вашому app/etc/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

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


2

Я не на 100% впевнений, що це зачепить кожен запит, але більшість запускається через метод запиту Zend_Db_Adapter_Ab абстрактний метод запиту в

lib / Zend / Db / Adapter / Abstract.php

Зважаючи на це, ви можете тимчасово додати деякі заяви про налагодження (до копії, яку ви робите

додаток / код / ​​локальний / 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);

2
Я думаю, що колись я використовував подібний підхід, але я знайшов більш приємний метод, запропонований мною :)
Фра

"тимчасово додайте деякі заяви про налагодження, щоб бути безпечними". У цьому підході немає нічого безпечного.
Кевін Шрьодер

2

Якщо у вас є доступ до сервера mysql і у вас немає інших проектів, які виконують запити, ви можете спробувати додати загальний журнал з mysql. Подивіться тут, як це зробити /programming/6479107/how-to-enable-mysql-query-log, оскільки він записує всі запити, що файл журналу може отримати великий дуже швидко, тому обов'язково зверніть увагу це вимкнено, коли ви закінчите з цим.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.