我们有一个大型的php应用程序,并试图调试缓慢的sql查询,我们希望能够自动注释实际调用sql查询的文件,如下所示:
"select /* filename.php line 234*/ `ID`,`Email`, `NickName`, `AlertBusiness`,`City` from People where ?=? and limit ?,?"其中动态插入/* filename.php行234*/。很可能
在php中有一个debug_backtrace,http://php.net/manual/en/function.debug-print-backtrace.php
它可以手动完成此操作:
<?php
$query = sprintf("INSERT INTO EventLog (Trace) VALUES ('%s')",
mysql_real_escape_string(join("\n", debug_backtrace())) );
mysql_query($query);
?>但希望有更核心的东西,比如数据库驱动程序。
MediaWiki也有类似的功能。http://www.mediawiki.org/wiki/Manual:How_to_debug
You can also enable backtrace on SQL error by setting $wgShowDBErrorBacktrace:
$wgShowDBErrorBacktrace = true;"PDO驱动程序有一个转储语句,但这只是一个查询,而不是谁称它为http://php.net/manual/en/pdostatement.debugdumpparams.php
如何在运行sql的php页面上下文中调试sql?
发布于 2014-08-21 00:23:41
这可能太简单了,但你可以在MySQL中打开slow query log,找到最慢的10-25个查询。
有了慢查询列表之后,您可以使用Percona Toolkit来分析它们。
我会使用ack/ack-grep来找到罪魁祸首以及它所在的地方。如果您有大量直接调用MySQL的文件,那么通过一个将MySQL注释附加到查询的方法来路由这些文件将是非常痛苦的,而且可能不是最有效的方法。
如果您有多个应用程序连接到同一个数据库,那么最好也将用户分开,这样您就可以确定哪些用户/应用程序正在消耗数据库资源。
https://stackoverflow.com/questions/25208149
复制相似问题