จะบันทึก Magento SQL ทั้งหมดได้อย่างไร


23

มีวิธีง่ายๆในการบันทึกแบบสอบถามทั้งหมดที่ดำเนินการโดย Magento หรือไม่

เป้าหมายคือการพิมพ์ SQL ที่ดำเนินการทั้งหมดเช่นระหว่างการโหลดหน้า

คำตอบ:


43

หากคุณต้องการแน่ใจว่า SQL ทั้งหมดเข้าสู่ระบบจริงฉันขอแนะนำให้ใช้ซอฟต์แวร์บุคคลที่สาม:

  • Neon Profile SQLว่างจริง ๆ แล้วใช้งานได้ดี
    (คุณต้องแก้ไข local.xml เพื่อแนบ Magento กับ Neon ... มันทำงานเหมือนกับการบันทึกพร็อกซี SQL ทุกชนิดที่ผ่านเข้ามา)

ในทางเลือกวิธีการดั้งเดิมวีโอไอพี / 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: #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_Abstract วิธีการสืบค้นใน

lib / Zend / Db / อะแดปเตอร์ / Abstract.php

โดยที่ในใจคุณสามารถเพิ่มคำสั่งการดีบักชั่วคราว (ไปยังสำเนาที่คุณทำ

app / รหัส / ท้องถิ่น / 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
ฉันคิดว่าฉันได้ใช้วิธีการที่คล้ายกัน แต่เมื่อผมพบว่ามีความสุขมากขึ้นวิธีการที่แนะนำโดยฉัน :)
Fra

"เพิ่มคำสั่งการแก้ไขข้อบกพร่องบางส่วนเพื่อความปลอดภัย". ไม่มีสิ่งใดปลอดภัยในวิธีการนี้
Kevin Schroeder

2

หากคุณสามารถเข้าถึงเซิร์ฟเวอร์ mysql และคุณไม่มีโครงการอื่น ๆ ที่เรียกใช้คิวรีคุณสามารถลองเพิ่มบันทึกทั่วไปจาก mysql ดูที่นี่เกี่ยวกับวิธีการทำ/programming/6479107/how-to-enable-mysql-query-log เพราะมันเขียนแบบสอบถามทั้งหมดที่ไฟล์บันทึกสามารถมีขนาดใหญ่มากได้อย่างรวดเร็วดังนั้นอย่าลืมเปิด มันออกไปหลังจากที่คุณทำเสร็จแล้ว

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.