基准测试与性能分析
benchmarking and profiling

基准测试
    测试指标:时间单位的事务处理量(吞吐量)、响应时间或时延、扩展性、并发性。p52
    这里的指标只作为参考,具体的性能测试要按用户类型和对其真正重要的。
  设计和规划
    标准基准测试(选择合适的测试方法)、设计专用。
    设计专用:
        s1:获取生产数据集的快照。
        s2:针对这些数据运行相关查询。
    记录基准测试规划。tips:规划中应该包括测试数据、设置系统的步骤、以及“暖机”计划。
    设计方法来归档测试和测试结果。(应该写脚本来分析测试结果。结果集可保存再表格或文本)
    建立基准测试目录,并为每次运行建立相关子目录。也可以记录额外信息。比如CPU利用率、磁盘I\O信息、网络流量统计信息。

  获得准确测试结果
    t1:
     *是否选择正确基准测试?
     *是否搜集了相关数据?
    t2:测试结果是否可重复?
    t3:为测试过程可能改变数据或架构的测试保留全新的数据快照重置系统状态。
    t4:额外负载
    t5:配置参数。尽量少改变相关参数(“隔离可变因子”)。如果必须修改采用方法:对参数迭代修改(分治法)。
    tips extra:对测试异常应格外注意。

  运行基准测试和分析测试结果

基准测试工具(*****)
    集成式测试工具:
        *ab.可测试HTTP服务器每秒最多处理多少web请求。缺点:一次只能测试一个url链接。
        *http_load.与ab相似,但更加灵活。可测试多个url。并且可按定时比率(time rate)测试相关请求,而不只是最多处理能力。(*****)
        *JMeter.一java应用。

    单组件测试工具:
        *mysqlslap.可仿真服务器负载,并报告相关计时信息。
        *sysbench.可实现各种类型的基准测试(“完整测试”)。测试数据库性能:测试CPU、测试I/O、测试OLTP联机事务处理系统等。测试其他:内存、线程(*****)
        *Database Test Suite. dbt2(*****)测试工具是一款免费的TPC-C OLTP(on-line transaction processing)测试工具。
        *MySQL Benchmarking Suite.MySQL自己的基准测试工具,可用于在不同数据库服务器上进行比较测试。

性能分析
    1、对应用进行分析。p66
    2、MySQL分析
        *记录查询
            查询日志:普通日志和慢速日志。普通日志记录了服务器接收到的每一个查询,包括未被执行的。慢速日志包含已经执行过的查询,它记录了执行时间超过特定长度(可配置long_query_time)的查询,缺点:粒度只能到秒,如需将粒度精确到毫秒,下载补丁。p75
        *日志分析
            用EXPLAIN检查查询的执行计划,按需要进行调优,调优后重新分析过程。通常在日志查找3个信息:长查询、影响很大的查询、新查询。
        工具
            #Mysqldumpslow。不能理解毫秒精度,不灵活。
            #Mysql_slow_log_filter。能理解毫秒精度。
            #Mysql_slow_log_parser。对毫秒精度慢速日志聚合,产生规范报告。
            #Mysqlsla。
        *分析MySQL服务器
            SHOW PROCESSLIST
        *使用SHOW STATUS分析查询
        *使用SHOW PROFILE
        *其他工具
    3、分析操作系统(UNIX)
        工具vmstat、iostat、mpstat和strace.