如何检查Magento中特定代码执行的所有查询

时间:2015-05-22 21:55:59

标签: php magento

按我正在使用的特定代码检查所有查询:

  1. 在Varien_Db_Adapter_Pdo_Mysql中将变量$ _debug从protected修改为public

  2. 对$ _logAllQueries

  3. 执行相同的操作
  4. 在代码执行之前添加:

    $adapter = Mage::getSingleton('core/resource')->getConnection('core_write');
    $adapter->_debug = true;
    $adapter->_logAllQueries = true;
    
  5. 在代码

    之后添加此内容
    $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;
    
  6. 还有其他更优雅的解决方案吗?

3 个答案:

答案 0 :(得分:1)

Magento有一个扩展,我个人长期使用(适用于社区和EE):

https://github.com/madalinoprea/magneto-debug

这会让你 - 检查所有请求 - 查看为请求执行的所有SQL查询 - 查看执行的所有布局句柄 - 还有更多

答案 1 :(得分:1)

您可以在How do I print all the queries in Magento?

使用我的答案的变体

不是在import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; class Prog1 { public static void stop() throws IOException { BufferedReader br=new BufferedReader(new InputStreamReader(System.in)); String s1=br.readLine(); int x=Integer.parseInt(s1); int ar[]=new int[x]; int k=0; for(int i=0;i<x;i++) { BufferedReader br1=new BufferedReader(new InputStreamReader(System.in)); String s2=br1.readLine(); int p=Integer.parseInt(s2); ar[k++]=p; } for(int m=0;m<x;m++) { System.out.println(ar[m]); } for(int y=0;y<x;) { if(ar[y]!=42) { System.out.println(ar[y]); y++; } else { break; } } } public static void main(String s[]) throws IOException { stop(); } } 中全局激活探查器,而是在要测试的代码之前和之后添加这些:

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);

中找到查询

答案 2 :(得分:0)

您可以在请求页面时打开MySQL日志文件并监视已记录的查询。例如,如果您使用的是Linux,请使用命令tail -F以实时方式查看日志文件中的所有更改。 / p>

以debian:tail-F /var/log/mysql.log

为例