在不通过分析器程序的情况下,有啥替代方法来分析您的 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 应用程序的执行?