php

位置:IT落伍者 >> php >> 浏览文章

高性能MySQL:测量PHP 应用程序


发布日期:2018年05月14日
 
高性能MySQL:测量PHP 应用程序

测量PHP 应用程序

如果不使用New Relic也有其他的选择尤其是对PHP有好几款工具都可以帮助进行性能剖析其中一款叫做xhprof(http://peclphpnet/package/xhprof)这是Facebook开发给内部使用的 年开源了xhprof 有很多高级特性并且易于安装和使用它很轻量级可扩展性也很好可以在生产环境大量部署并全天候使用它还能针对函数调用进行剖析并根据耗费的时间进行排序相比xhprof还有一些更底层的工具比如xdebugValgrind 和cachegrind可以从多个角度对代码进行检测注有些工具会产生大量输出并且开销很大并不适合在生产环境运行但在开发环境却可以发挥很大的作用

下面要讨论的另外一个PHP 性能剖析工具是我们自己写的基于本书第二版的代码和原则扩展而来名叫IfP(instrumentationforphp)代码托管在Goole Code 上(http://codegooglecom/p/instrumentationforphp/)Ifp 并不像xhprof 一样对PHP 做深入的测量而是更关注数据库调用所以当无法在数据库层面进行测量的时候Ifp 可以很好地帮助应用剖析数据库的利用率Ifp 是一个提供了计数器和计时器的单例类很容易部署到生产环境中因为不需要访问PHP 配置的权限(对很多开发人员来说都没有访问PHP配置的权限所以这一点很重要)

Ifp 不会自动剖析所有的PHP 函数而只是针对重要的函数例如对于某些需要剖析的地方要用到自定义的计数器就需要手工启动和停止但Ifp 可以自动对整个页面的执行进行计时这样对自动测量数据库和memcached 的调用就比较简单对于这种情况就无须手工启动或者停止这也意味着Ifp 可以剖析三种情况应用程序的请求(如page view)数据库的查询和缓存的查询Ifp 还可以将计数器和计时器输出到Apache通过Apache 可以将结果写入到日志中这是一种方便且轻量的记录结果的方式Ifp 不会保存其他数据所以也不需要有系统管理员的权限

使用Ifp只需要简单地在页面的开始处调用start_request()理想情况下在程序的一开始就应当调用

require_once(Instrumentationphp

Instrumentation::get_instance()>start_request()

这段代码注册了一个shutdown函数所以在执行结束的地方不需要再做更多的处理

IFP会自动对SQL添加注释便于从数据库的查询日志中更灵活地分析应用的情况通过SHOW PROCESSLIST也可以更清楚地知道性能低的查询出自何处大多数情况下定位性能低下查询的来源都不容易尤其是那些通过字符串拼接出来的查询语句都没有办法在源代码中去搜索那么IFP的这个功能就可以帮助解决这个问题它可以很快定位到查询是从何处而来的即时应用和数据库中间加了代理或者负载均衡层也可以确认是哪个应用的用户是哪个页面请求是源代码中的哪个函数代码行号甚至是所创建的计数器的键值对下面是一个例子

File: indexphp Line: Function: fullCachePage request_id: ABC session_id: XYZ

SELECT * FROM …

如何测量MySQL 的调用取决于连接MySQL 的接口如果使用的是面向对象的mysqli接口则只需要修改一行代码将构造函数从mysqli 改为可以自动测量的mysqli_x 即可mysqli_x 构造函数是由Ifp 提供的子类可以在后台测量并改写查询如果使用的不是面向对象的接口或者是其他的数据库访问层则需要修改更多的代码如果数据库调用不是分散在代码各处还好否则建议使用集成开发环境(IDE)如Eclipse这样修改起来要容易些但不管从哪个方面来看将访问数据库的代码集中到一起都可以说是最佳实践

Ifp 的结果很容易分析Percona Toolkit 中的ptquerydigest 能够很方便地从查询注释中抽取出键值对所以只需要简单的将查询记录到MySQL 的日志文件中再对日志文件进行处理即可Apache 的mod_log_config 模块可以利用Ifp 输出的环境变量来定制日志输出其中的宏%D 还可以以微秒级记录请求时间

也可以通过LOAD DATA INFILE 将Apache 的日志载入到MySQL 数据库中然后通过SQL 进行查询在Ifp 的网站上有一个PDF 的幻灯片详细给出了使用示例包括查询和命令行参数都有

或许你会说不想或者没时间在代码中加入测量的功能其实这事比想象的要容易得多而且花在优化上的时间将会由于性能的优化而加倍地回报给你对应用的测量是不可替代的当然最好是直接使用New RelicxhprofIfp 或者其他已有的优化工具而不必重新去发明轮子

MySQL 企业监控器的查询分析功能

MySQL 的企业监控器(Enterprise Monitor)也是值得考虑的工具之一这是Oracle 提供的MySQL 商业服务支持中的一部分它可以捕获发送给服务器的查询要么是通过应用程序连接MySQL 的库文件实现要么是在代理层实现(我们并不太建议使用代理层)该工具有设计良好的用户界面可以直观地显示查询的剖析结果并且可以根据时间段进行缩放例如可以选择某个异常的性能尖峰时间来查看状态图也可以查看EXPLAIN 出来的执行计划这在故障诊断时非常有用

返回目录高性能MySQL

编辑推荐

ASP NET开发培训视频教程

数据仓库与数据挖掘培训视频教程

Oracle索引技术

上一篇:Linux上安装Apache+Php+Mysql的过程[1]

下一篇:如何安装php+apache 服务器