诊断工具与方法:从OS到数据库

最近在“云和恩墨微信大讲堂”中,有很多朋友遇到性能问题,但是往往没有及时的诊断信息。我将之前书中的一章摘录出来和大家略为分享。

在数据库系统的诊断中,通常须要综合分析两个方面的因素:

  • 主机系统的采样分析数据;
  • 数据库系统的采样分析数据。

其中主机的采样数据可以通过操作系统的相关工具来收集,Nmon(可以用于AIX和Linux)和Oracle的OSWatcher都是很不错的轻量级采样工具;数据库的采样分析数据则可以通过Oracle的AWR采样数据获得,前者需要手工部署,后者自Oracle Database 10g开始,默认即会启用,不间断收集数据库运行状况(默认每小时采样一次,采样数据保留7天)。

Nmon和OSWatcher

对于主机采样工具,Nmon与OSWatcher原理类似,都是通过系统级工具(如iostat、vmstat、netstat、mpstat、top等)进行指定间隔的采样,将采样数据记录到日志文件中,通过分析这些数据得到系统运行的性能曲线。

Nmon既可以独立运行,动态展示当前系统数据,也可以在后台自动收集系统运行数据,图18-1是Nmon直接运行可以看到Logo的展示页面:

图18-1 Nmon直接运行下Logo的展示页面截图

对于Nmon收集的数据,IBM提供了NMON_ANALYSER工具,该工具以Nmon性能工具采样生成的文件作为输入,然后将它们转换为 Microsoft Excel 电子表格,并自动生成相应的图形,非常直观和方便,图18-2是一张Nmon生成的曲线截图,通过概要图可以看到系统整体的CPU、IO等负荷变化情况。

图18-2 一张Nmon生成的曲线截图

而OSWatcher则是Oracle公司出品的一款系统性能监控工具,支持常见主流操作系统(Windows、Linux、AIX、HP-UX、Solaris等),图18-3是其有趣的Logo:

图18-3 OSWatcher的Logo

参考MOS文档:OSWatcher (Includes: [Video]) (Doc ID 301137.1),截止February 27, 2015其版本已经到了 7.3.3

OSWatcher在收集了采样数据之后同样可以生成图表曲线,用于展示系统性能变化,图18-4是使用这款工具生成的系统内存使用变化曲线:

图18-4 OSWatcher生成的图表曲线

这两款工具原理简单,部署方便,对系统性能影响极小,如果没有其他的系统监控工具,完全可以考虑用它们收集至关重要的操作系统性能数据。

AWR采样数据库性能数据

从Oracle Database 10g开始,Oracle将原本由Statspack提供的功能进一步强化,推出了AWR(Automatic Workload Repository,自动工作负载库)功能,AWR默认每小时采样一次性能数据,记录在SYSAUX表空间中,数据默认保留7天。和AWR相辅助的,ASH、ADDM、SQL Monitor都是诊断分析的好助手。

而以AWR为基础推出的Oracle Database/Grid Control则更是从管理、监控工具上更上一层楼,通过Web形式的展现将数据库的运行状况全面展现出来,图18-5就是Grid Control的动态展示之一:

图18-5 Grid Control的动态展示截图

ASH、AWR、ADDM等众多新的特性,结合Database/Grid Control展现出来,为Oracle Database的管理和监控数据库带来了极大的便利。

但是要注意的是Database/Grid Control并不是一个免费的工具,其中的很多功能都须单独付费(要单独付费的组件包括Diagnostics Pack、Tuning Pack、Change Management Pack、ConfigurationManagement Pack、Provisioning Pack for Database、Data Masking Pack等)

Database/Grid Control中最常用的组件是Diagnostics Pack,这个组件提供自动的性能诊断和高级的系统监控功能,包含如下主要特点和功能:

  • Automatic Workload Repository;
  • Automatic Database Diagnostic Monitor(ADDM);
  • Active Session History (ASH);
  • Performance monitoring (database and host);
  • Event notifications: notification methods, rules, and schedules;
  • Event history and metric history (database and host);
  • Blackouts;
  • Dynamic metric baselines;
  • Monitoring templates;
  • Memory-access based performance monitoring;
  • Supporting functionality to perform per stream bottleneck detectionand per component top wait event analysis。

为了使用如上特性或功能,在授权上都须购买Diagnostic Pack,在Oracle Database 11g中,一个新的初始化参数被引入用于控制Diagnostic Pack和Tuning Pack的使用,这个参数是CONTROL_MANAGEMENT_ PACK_ACCESS,该参数有三个可选值。

1. DIAGNOSTIC+TUNING:指DiagnosticPack and Tuning Pack功能均启用;

2. DIAGNOSTIC:仅DiagnosticPack启用;

3. NONE:DiagnosticPack 和 Tuning pack 均被禁止。

这些Pack功能可以通过Enterprise Manager和命令行API调用来访问,当然这些访问同样需要License的授权。

但是存在一些例外,我们知道AWR的很多历史数据通过字典表来记录,可以通过查询这些字典来获得数据库系统运行的性能数据,但是需要了解的是,所有以DBA_HIST_开头的字典都需要License的授权,除了在Oracle Database 11g中,Oracle标识了以下例外:

DBA_HIST_SNAPSHOT,DBA_HIST_DATABASE_INSTANCE; DBA_HIST_SNAP_ERROR, DBA_HIST_SEG_STAT; DBA_HIST_SEG_STAT_OBJ, DBA_HIST_UNDOSTAT。

也就是说这些视图可以免费使用。当然这些都只是授权上的约束,在初始安装后,这些功能都被启用。

在有了主机系统和数据库的连续采样数据之后,我们就可以对整个系统的运行状况进行全面的分析了,不仅可以更清晰地了解数据库的正常运行指标,更可以在数据库出现问题时快速定位与解决。

诊断案例一则

在一次客户现场服务中,客户报告了一个Weblogic 503错误(503——Service Unavailable),出现这个错误时,客户端新发起的连接会暂时无法得到响应,这极有可能是数据库的响应时间过长,导致weblogic请求超时所致。

首先根据OSWatcher收集的系统信息来生成负荷曲线(如图18-6所示),我们发现在客户报告问题的一段时间内(1:55~2:15),系统的磁盘IO繁忙程度达到了100%。

通过Database Control工具可以清晰地看到(如图18-7所示),在该时段,数据库明显经历了一个读取高峰,User I/O等待显著,这表明数据库在执行大量I/O访问操作。

图18-6 OSWatcher生成的系统负荷曲线

图18-7 Database Control生成的系统负荷图

通过进一步深入,可以发现在这个时段,SQL活动列表中第一个SQL消耗了近50%的资源,如图18-8所示。

图18-8 SQL活动列表截图

捕获系统数据,此时执行的SQL如图18-9所示(这样的SQL在系统中极为常见),而SQL优化往往是数据库优化的核心

图18-9 捕获的高资源消耗的SQL信息

这样我们就可以分析出整个系统性能下降的过程:

查询SQL导致大量IO访问,IO压力升高导致磁盘100% 繁忙,进而使整个系统因为IO响应缓慢出现性能问题,数据库无法及时响应连接请求,进而导致客户端经由中间件报出503错误。

此数据库系统的性能问题就在于大量并发查询的SQL导致IO访问量过高,IO量过高则意味着响应缓慢。为缓解此类系统性能问题,除进一步优化程序和SQL之外,我们可以将IO访问频繁的数据表缓存在内存中,从而降低物理IO访问,提升系统响应速度。这是经过验证的有效手段,我们在多个客户环境通过这一技术大幅度提升了性能。

当然,在今天完备的监控手段之下,能够通过更加直观的手段获取监控信息,但是无论如何,当DBA接手一个数据库系统时,仍然要谨记:记录和获取完整的信息,是性能诊断和分析的基础。

文章来源:《OracleDBA手记1》第18章表碎片及分页查询优化 作者:盖国强

原文发布于微信公众号 - 数据和云(OraNews)

原文发表时间:2015-12-15

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏java一日一条

多种负载均衡算法及其 Java 代码实现

负载均衡 建立在现有网络结构之上,它提供了一种廉价有效透明的方法扩展 网络设备和 服务器的带宽、增加 吞吐量、加强网络数据处理能力、提高网络的灵活性和可用性。

1131
来自专栏腾讯云数据库团队的专栏

Greenplum 简单性能测试与分析

通过TPC-H基准测试,可获得数据库单位时间内的性能处理能力,为评估数据库系统的现有性能服务水平提供有效依据。

1.1K12
来自专栏zhisheng

机器常见需要关注的监控指标

做运维,不怕出问题,怕的是出了问题,抓不到现场,两眼摸黑。所以,依靠强大的监控系统,收集尽可能多的指标,意义重大。但哪些指标才是有意义的呢,本着从实践中来的思想...

1211
来自专栏吉浦迅科技

放下王者农药这锅,玩一把Tensorflow吧

暑期开始了!对于Lady姐来说,如何安排儿子的暑期生活是一件大事,显然是不能沉迷于王者农药, ? 于是Lady姐随手扔了一个教程给他:按照这份教程,在家里Win...

38410
来自专栏小白课代表

无需PS 一键编辑、压缩GIF。

微信公众平台规定GIF图不得超过2M,但是一张清楚的时间长的动图录制出来怎么可能那么小呢!还有聊天的时候,看到好玩的动图想要添加到表情,然后。。。

2791
来自专栏张善友的专栏

[.NET网格计算框架] Alchemi

Alchemi [.NET网格计算框架] 是 一个以使用简易为目的的Windows下的网格计算框架。它提供了:a)开发网格软件的编程环境 和 b)建造网格和运行...

1918
来自专栏FreeBuf

Skype-Type:一款通过声音窃取键盘记录的Keylogger工具

Skype-Type(简称S&T)是一款功能强大的键盘声音窃听器,这款新颖的安全研究工具将允许他人执行键盘声音窃听攻击。简而言之,S&T可以通过窃听目标用户的键...

3694
来自专栏北京马哥教育

浅谈TCP优化

很多人常常对TCP优化有一种雾里看花的感觉,实际上只要理解了TCP的运行方式就能掀开它的神秘面纱。Ilya Grigorik 在「High Performanc...

4275
来自专栏玉树芝兰

如何用 Python 脚本批量下载 Google 图像?

(由于微信公众号外部链接的限制,文中的部分链接可能无法正确打开。如有需要,请点击文末的“阅读原文”按钮,访问可以正常显示外链的版本。)

1122
来自专栏SAP最佳业务实践

想学FM系列(16)-SAP FM模块:预算结构(7)-预算结构操作-多层预算结构维护

3.2.2.3 多层预算结构的维护 ? 1)FMHIE_HIEID- 编辑层次结构标识 功能为多层预算结构备用树定义一相标识ID,并定义相关属性,为之后生成备...

4398

扫码关注云+社区