在不通过分析器程序的情况下,有啥替代方法来分析您的 Web 应用程序?

Posted

技术标签:

【中文标题】在不通过分析器程序的情况下,有啥替代方法来分析您的 Web 应用程序?【英文标题】:what is an alternative way to profile your web app without going through a a profiler program?在不通过分析器程序的情况下,有什么替代方法来分析您的 Web 应用程序? 【发布时间】:2011-08-14 15:05:43 【问题描述】:

我有一个使用 php - mysql 的网站。我想确定花费最多时间的数据库查询。除了使用分析器,我还可以使用哪些其他方法来查明 QUERY 瓶颈。

【问题讨论】:

你试过randomly-pausing吗?占用时间最多的查询将根据该部分优先显示。 【参考方案1】:

您可以在 MySql 中启用慢查询的日志记录:

http://dev.mysql.com/doc/refman/5.1/en/slow-query-log.html

慢查询日志包含所有执行时间超过long_query_time 秒并且(从 MySQL 5.1.21 开始)至少需要检查 min_examined_row_limit 行的 SQL 语句。获取初始表锁的时间不计入执行时间。 mysqld在执行完并且所有锁都被释放后会向慢查询日志写入一条语句,因此日志顺序可能与执行顺序不同。 long_query_time 的默认值为 10。

【讨论】:

【参考方案2】:

这是一个很大的主题,我只能提出几点建议 - 但我确信 SO 上的其他地方也有很好的覆盖主题

首先分析数据库查询。每个 RDBMS 都有一个长时间运行的查询列表 MySql 使用单个配置标志打开。这将捕获运行很长时间的查询(这可能是几秒钟的数量级,这对于现代 RDBMS 来说是很长的时间)。 此外,每个 RDBMS 都会返回一个使用其记录集执行的时间。我强烈建议您通过一个常用函数“executequery”将所有调用拉到 DNase,然后将 SQL 和执行时间拉到一个文件中以备后用

一般来说,缓慢的查询来自糟糕的表设计和缺乏好的索引。对任何让您担心的查询运行“解释” - dbae 会告诉您它将如何运行该查询 - 任何“表扫描”都表明 RDBMS 无法在表上找到满足查询需求的索引

下一个分析是一个最常用的术语,用于查看执行程序部分所花费的时间,即一直使用的 for 循环,或建立数据库连接所花费的时间

你似乎想要的是性能测试

【讨论】:

【参考方案3】:

只需在执行每个查询之前/之后读取时间。如果您使用任何数据库抽象类/函数,这很容易。

【讨论】:

以上是关于在不通过分析器程序的情况下,有啥替代方法来分析您的 Web 应用程序?的主要内容,如果未能解决你的问题,请参考以下文章

在不使用 Ajax 请求的情况下使用 ExtJS 4.1 将文件下载为 CSV 的替代方法?

如何在不减慢执行速度的情况下分析 Android 应用程序的执行?

有啥方法可以在不使用 XMPP 协议的情况下连接到 Facebook 聊天服务?

在不重新编译主程序的情况下分析共享对象

使用图像映射生成器有啥好的替代方法? [关闭]

有啥方法可以在不重新加载的情况下更改标头 URL? [复制]