PHP 的 xdebug 和 qcachegrind 是不是记录/报告等待数据库所花费的时间?
Posted
技术标签:
【中文标题】PHP 的 xdebug 和 qcachegrind 是不是记录/报告等待数据库所花费的时间?【英文标题】:Does PHP's xdebug and qcachegrind record/report on time spent waiting for a database?PHP 的 xdebug 和 qcachegrind 是否记录/报告等待数据库所花费的时间? 【发布时间】:2014-03-26 13:28:56 【问题描述】:在 Amazon GNU/Linux 上使用 php 5.5。
Xdebug 正在记录通过 apache worker MPM 运行的 PHP 应用程序的配置文件数据。
当我使用 qcachegrind(在 OS X 笔记本电脑上运行)查看配置文件数据时,很少有时间归因于 php::mysql_* 函数。
我知道这个应用程序花费了大量时间来运行数据库查询。
Xdebug 是否没有记录等待数据库所花费的时间,或者我可能没有正确使用 qcachegrind 来查看在运行 PHP 内置函数所花费的总时间中花费的时间?
【问题讨论】:
尝试执行一个运行时间较短的查询和另一个返回相同结果但运行时间较长的查询,然后查看配置文件数据。这应该显示是否被记录。还值得牢记的是,应用程序基准测试/分析和数据库基准测试/分析是不同的活动。 【参考方案1】:对我来说,运行mysql_query('SELECT SLEEP(5)')
会导致php::mysql_query
函数的自成本约为5000 毫秒,所以是的——它应该报告等待数据库所花费的时间。
但请记住,使用 xdebug profiler 会增加运行 PHP 的大量开销,因此据报道,等待数据库所花费的时间比例可能与不使用 profiler 时的时间比例不同(因为 PHP 的分析不会'不要给数据库引擎本身增加任何开销)。
【讨论】:
知道“典型”xdebug 开销是多少(如果有“典型”开销之类的东西)? 您必须测试有无它的应用程序(并测量总响应时间)才能确定,但您永远不会知道它为每个数据库查询增加了多少。编辑:有关更多信息,请参阅 these 很棒的 links。以上是关于PHP 的 xdebug 和 qcachegrind 是不是记录/报告等待数据库所花费的时间?的主要内容,如果未能解决你的问题,请参考以下文章