性能调优步骤

明确问题->收集数据->分析数据->细化、定位问题->优化

环境: db2 9.7, suse linux 

问题:%usr CPU高,大约99%,db2sysc进程使用的最多

收集数据

---系统层面
vmstat > vmstat. ps -elf > pself. ps aux > psaux. iostat > iostat.1 ---数据库层面
db2 connect to <db_name> db2pd -eve > db2pd_eve.out db2pd -edus interval= > db2pd_edu_120.out db2pd -stack all > db2pd_stack.out db2 -v get monitor switches > get_monitor.out #db2 -v update monitor switches using bufferpool on sort on table on uow on statement on sort on lock on db2 -v get snapshot for applications on <db_name> > snap_applications.log db2 -v get snapshot for database on <db_name> > snap_db.log db2 -v get snapshot for all on <db_name> > snap_all.log db2 -v reset monitor all #db2 -v update monitor switches using bufferpool off sort off table off uow off statement off sort off lock off db2 -v terminate

分析数据

对数据的访问是通过SQL语句执行的,绝大数性能问题都是SQL本身问题

动态语句:JDBC、DB2命令行

静态语句:存储过程、嵌入式SQL程序

细化定位查找SQL

1、可以通过mon_get_pkg_cache_stmt(监控数据库包告诉缓存中的动态和静态SQL语句)接口查询
举例:
a)查找平均最消耗CPU时间的前5条SQL语句

db2 -v "select member,section_type,total_cpu_time/num_exec_with_metrics as avg_cpu_time,executable_id from table(mon_get_pkg_cache_stmt('D',null,null,-2) ) as t where t.num_exec_with_metrics <> 0 order by avg_cpu_time fetch first 5 rows only"

total_cpu_time          表示在DB2中耗用的CPU时间总计,单位微秒
num_exec_with_metrics 表示在收集度量值情况下执行的SQL语句次数
executable_id 表示SQL语句的HASH值 之后根据HASH值找到具体的SQL语句 db2 -v "select stmt_text from table(MON_GET_PKG_CACHE_STMT) ( NULL,executable_id,NULL,-2))

#b)查找消耗最多CPU时间的前10条SQL语句

SELECT MEMBER,SECTION_TYPE ,varchar(stmt_text,) as statement,num_exec_with_metricsas numExec, TOTAL_CPU_TIME/NUM_EXEC_WITH_METRICS as AVG_CPU_TIME,TOTAL_CPU_TIMEFROM TABLE(MON_GET_PKG_CACHE_STMT( 'D', NULL, NULL, -)) as T WHERE T.NUM_EXEC_WITH_METRICS <>  ORDER BY AVG_CPU_TIME descfetch first  rows only

c)占用CPU较多的动态SQL语句

db2 "select TOTAL_CPU_TIME/NUM_EXEC_WITH_METRICS as AVG_CPU_TIME, NUM_EXEC_WITH_METRICS, substr(STMT_TEXT,1,100) as STMT_TEXT from table( mon_get_pkg_cache_stmt (null,null,null,null)) as T where T.NUM_EXEC_WITH_METRICS <> 0 order by AVG_CPU_TIME DESC"

2、可以通过db2pd -edus interval=120 来收集120秒之内每个edu占用的CPU时间,结合其他的信息,比如db2pd -eve、application snapshot的输出,来看一下edu对应的应用,以及应用执行的SQL语句是什么,针对这些SQL语句来优化。

3、通过快照查询SQL

收集快照脚本:

db2 connect to <db_name>

db2 -v get snapshot for all on <db_name> > snap.out

db2 -v reset monitor all

db2 -v terminate

找到Application SNAPSHOT显示sort、rows read高的SQL

性能调优

查找PAT树来解决问题

首先使用visual Explain或者db2exfmt来分析这些高代价SQL语句。

随后使用Design Advisor工具来重新设计这些SQL语句。

db2expln和db2advis命令使用举例:

db2expln命令分析SQL性能:

db2iyx@tsywdb:~/sqllib/misc>db2expln -d DB_NAME -q "SQL"-g -o sql01.sql
参数
-g 执行计划图
-d指定数据库名
-q是一个SQL语句,也可以用-f指定某个保存了SQL的文件,
-o可以输出到文件。

db2advis命令优化SQL语句:

db2iyx@tsywdb:~/sqllib/misc> db2 list tables for all|grep EXPLAIN_INSTANCE

db2iyx@tsywdb:~/sqllib/misc> db2 -tvf EXPLAIN.DDL

db2iyx@tsywdb:~/sqllib/misc> db2 list tables for all|grep EXPLAIN_INSTANCE
EXPLAIN_INSTANCE DB2IYX T 2017-02-21-13.26.42.705551

db2advis命令需要创建explain表才能使用,而且DB2对于SQL执行计划的explain表,需要手工创建。

db2iyx@tsywdb:~/sqllib/misc> db2advis -d whsunecm -s "SQL" –g -o sql02.sql

db2 cpu使用率高问题分析处理的更多相关文章

  1. 服务器CPU使用率高的原因分析与解决办法

    我们的服务器在使用操作系统的时候,用着用着系统就变慢了,打开“ 任务管理器 ”一看,才发现CPU使用率达到80%以上.这是怎么回事情呢?遇到病毒了吗?硬件有问题?还是系统设置有问题呢?在本文中将从硬件 ...

  2. Java进程CPU使用率高排查

    Java进程CPU使用率高排查 生产java应用,CPU使用率一直很高,经常达到100%,通过以下步骤完美解决,分享一下.1.jps 获取Java进程的PID.2.jstack pid >> ...

  3. 排查MongoDB CPU使用率高的问题

    1.公司业务调整,把一部分数据由Redis转至MongoDB,业务在测试环境正常,生产环境上线后发现压力一上来MongoDB的服务直接把CPU占满了,和开发的同学分析了一下也参考了一下百度上类似的问题 ...

  4. MySQL CPU 使用率高的原因和解决方法

    用户在使用 MySQL 实例时,会遇到 CPU 使用率过高甚至达到 100% 的情况.本文将介绍造成该状况的常见原因以及解决方法,并通过 CPU 使用率为 100% 的典型场景,来分析引起该状况的原因 ...

  5. 查询执行成本高(查询访问表数据行数多)而导致实例 CPU 使用率高是 MySQL 非常常见的问题

    MySQL CPU 使用率高的原因和解决方法_产品性能_常见问题_云数据库 RDS 版-阿里云 https://help.aliyun.com/knowledge_detail/51587.html ...

  6. (原创)性能测试中,Oracle服务器定位CPU使用率高的瓶颈(SQL)

    本篇博客记录一次性能测试过程中,定位对CPU使用率高的瓶颈问题,主要定位SQL为准 一.用SQL命令定位1.首先用TOP命令监控系统资源,如果是AIX系统,就用topas,进入TOP命令的滚动刷新数据 ...

  7. 交换机CPU使用率高的原因

    交换机CPU的功能 1.管理已配置的软件协议,例如: – 生成树协议(STP) – 路由协议,例如OSPF和EIGRP – 热备路由协议(HSRP) – 思科发现协议(CDP) – 端口聚合协议(PA ...

  8. 寻找CPU使用率高的进程方法

    寻找CPU使用率高的进程方法 发布时间:  2017-07-13 浏览次数:  1362 下载次数:  0 问题描述 节点报CPU使用率高,甚至出现"ALM-12016 CPU使用率超过阈值 ...

  9. 性能测试 | 服务器CPU使用率高分析实例

    前面我们讨论系统调用的时候结论是耗时200ns-15us不等.不过我今天说的我的这个遭遇可能会让你进一步认识系统调用的真正开销.在本节里你会看到一个耗时2.5ms的connect系统调用,注意是毫秒, ...

随机推荐

  1. PRTG安装

    1.去官网下载,记录下试用秘钥,然后执行安装 2. 3. 4.输入秘钥 5. 6.安装完成后自动转到如下页面,点击启动Guru 7. 8. 9. 10.输入prtgadmin,密码prtgadmin ...

  2. PL/SQL学习笔记之异常

    一:异常 程序执行过程中出现错误情况被称为异常,主要有两种类型的异常: 系统定义的异常 用户定义的异常 二:系统定义的异常 Exception Oracle Error SQLCODE 描述 ACCE ...

  3. Script Browser & Script Analyzer 1.3更新发布

    感谢Windows PowerShell MVP Kirk Munro.Laurent Dardenne在过去三个星期内为我们提出的各种想法和建议.针对这些的建议,我们对Script Browser ...

  4. 【PMP】项目和运营的区别

    运营管理关注产品的持续性生产和服务的持续运作. 项目与运营会存在产品生命周期的不同时点交叉,例如: 在产品开发.产品升级或提高产量时: 在改进运营或产品开发流程时: 在产品生命周期结束阶段: 在每个收 ...

  5. Java实现 SSL双向认证

    我们常见的SSL验证较多的只是验证我们的服务器是否是真实正确的,当然如果你访问的URL压根就错了,那谁也没有办法.这个就是所谓的SSL单向认证. 但是实际中,我们有可能还会验证客户端是否符合要求,也就 ...

  6. CentOS---网络配置详解 (转)

    一.配置文件详解在RHEL或者CentOS等Redhat系的Linux系统里,跟网络有关的主要设置文件如下: /etc/host.conf         配置域名服务客户端的控制文件/etc/hos ...

  7. C++ 匿名namespace的作用以及与static的区别

    匿名namespace的作用以及它与static的区别 一.匿名namespace的作用 在C语言中,如果我们在多个tu(translation unit)中使用了同一个名字做 为函数名或者全局变量名 ...

  8. zabbix server is not running,the information dispalyed may not be current

    查看zabbix服务器和客户端的端口及进程都是正常启动,打印的日志也没什么异常,但是就是在主页提示zabbix server is not running 不防尝试改一下zabbix_server的配 ...

  9. 物联网架构成长之路(9)-双机热备Keepalived了解

    1. 前言 负载均衡LB,高可用HA,这一小结主要讲双机热备方案保证高可用.这里选择Keepalived作为双机热备方案,下面就对具体的配置进行了解.2. 下载Keepalived wget http ...

  10. SAP BW 数据库表命名规则

    SAP BW 数据库表命名规则 已有 315 次阅读2012/6/8 15:55 |系统分类:专业内容| SAP, 命名, 数据库表 Namings for Cube: /BI<C OR DIG ...