需要收集什么样的数据
现在已经确定了诊断触发器可以开始启动一些进程来收集数据了但需要收集什么样的数据呢?就像前面说的答案是尽可能收集所有能收集的数据但只在需要的时间段内收集包括系统的状态CPU 利用率磁盘使用率和可用空间ps 的输出采样内存利用率以及可以从MySQL 获得的信息如SHOW STATUSSHOW PROCESSLIST 和SHOWINNODB STATUS这些在诊断问题时都需要用到(可能还会有更多)
执行时间包括用于工作的时间和等待的时间当一个未知问题发生时一般来说有两种可能服务器需要做大量的工作从而导致大量消耗CPU ;或者在等待某些资源被释放所以需要用不同的方法收集诊断数据来确认是何种原因剖析报告用于确认是否有太多工作而等待分析则用于确认是否存在大量等待如果是未知的问题怎么知道将精力集中在哪个方面呢?没有更好的办法所以只能两种数据都尽量收集
在GNU/Linux 平台可用于服务器内部诊断的一个重要工具是oprofile后面会展示一些例子也可以使用strace 剖析服务器的系统调用但在生产环境中使用它有一定的风险后面还会继续讨论它如果要剖析查询可以使用tcpdump大多数MySQL 版本无法方便地打开和关闭慢查询日志此时可以通过监听TCP 流量来模拟另外网络流量在其他一些分析中也非常有用
对于等待分析常用的方法是GDB 的堆栈跟蹤注MySQL 内的线程如果卡在一个特定的地方很长时间往往都有相同的堆栈跟蹤信息跟蹤的过程是先启动gdb然后附加(attach)到mysqld 进程将所有线程的堆栈都转储出来然后可以利用一些简短的脚本将类似的堆栈跟蹤信息做汇总再利用sort|uniq|sort 的魔法排序出总计最多的堆栈信息稍后将演示如何用ptpmp 工具来完成这个工作
也可以使用SHOW PROCESSLIST 和SHOW INNODB STATUS 的快照信息观察线程和事务的状态来进行等待分析这些方法都不完美但实践证明还是非常有帮助的
收集所有的数据听起来工作量很大或许读者之前已经做过类似的事情但我们提供的工具可以提供一些帮助这个工具名为ptcollect也是Percona Toolkit 中的一员ptcollect 一般通过ptstalk 来调用因为涉及很多重要数据的收集所以需要用root 权限来运行默认情况下启动后会收集 秒的数据然后退出对于大多数问题的诊断来说这已经足够但如果有误报(false positive)的问题出现则可能收集的信息就不够
这个工具很容易下载到并且不需要任何配置配置都是通过ptstalk 进行的系统中最好安装gdb 和oprofile然后在ptstalk 中配置使用另外mysqld 也需要有调试符号信息注当触发条件满足时ptcollect 会很好地收集完整的数据它也会在目录中创建时间戳文件在本书写作之际这个工具是基于GNU/Linux 的后续会迁移到其他操作系统这是一个好的开始
解释结果数据
如果已经正确地设置好触发条件并且长时间运行ptstalk则只需要等待足够长的时间来捕获几次问题就能够得到大量的数据来进行筛选从哪里开始最好呢?我们建议先根据两个目的来查看一些东西第一检查问题是否真的发生了因为有很多的样本数据需要检查如果是误报就会白白浪费大量的时间第二是否有非常明显的跳跃性变化
在服务器正常运行时捕获一些样本数据也很重要而不只是在有问题时捕获数据这样可以帮助对比确认是否某些样本或者样本中的某部分数据有异常例如在查看进程列表(process list)中查询的状态时可以回答一些诸如大量查询处于正在排序结果的状态是不是正常的的问题
查看异常的查询事务的行业以及异常的服务器内部行业通常都是最有收获的查询或事务的行为可以显示是否是由于使用服务器的方式导致的问题性能低下的SQL查询使用不当的索引设计糟糕的数据库逻辑架构等通过抓取TCP 流量或者SHOWPROCESSLIST 输出可以获得查询和事务出现的地方从而知道用户对数据库进行了什么操作通过服务器的内部行为则可以清楚服务器是否有bug或者内部的性能和扩展性是否有问题这些信息在类似的地方都可以看到包括在oprofile 或者gdb 的输出中但要理解则需要更多的经验
如果遇到无法解释的错误则最好将收集到的所有数据打包提交给技术支持人员进行分析MySQL 的技术支持专家应该能够从数据中分析出原因详细的数据对于支持人员来说非常重要另外也可以将Percona Toolkit 中另外两款工具ptmysqlsummary 和ptsummary 的输出结果打包这两个工具会输出MySQL 的状态和配置信息以及操作系统和硬件的信息
Percona Toolkit 还提供了一款快速检查收集到的样本数据的工具ptsift这个工具会轮流导航到所有的样本数据 得到每个样本的汇总信息如果需要 也可以钻取到详细信息使用此工具至少可以少打很多字少敲很多次键盘
返回目录高性能MySQL
编辑推荐
ASP NET开发培训视频教程
数据仓库与数据挖掘培训视频教程
Oracle索引技术
[] []