Oracle自动性能统计

Oracle自动性能统计

  高效诊断性能问题,需要提供完整可用的统计信息,好比医生给病人看病的望闻问切,才能够正确的确诊,然后再开出相应的药方。Oracle数据库为系统、会话以及单独的sql语句生成多种类型的累积统计信息。本文主要描述oracle性能统计涉及到的相关概念及统计对象,以更好的利用统计信息为性能调整奠定基础。

一、性能统计信息的几个术语

  • 增量值(delta)

  性能统计信息依赖于delta值的累计,即增量值。增量值反映了在某个特定时段某个特定事件的趋势,或者说波动的幅度。通过对比在开始期间统计的累计值和结尾处的累计值之间的差异,才能够更清晰的了解该项值在系统不同负载时间段所需要的资源开销以及用于定位性能瓶颈。

  在Oracle数据库中,可以通过查询V$SESSTAT和V$SYSSTAT来查询统计值的累计情况。由于这2个视图为动态性能视图,因此,这2个视图的数据收集的仅仅是自实例启动以来的统计数据。如此这般,那数据库关闭后所有的统计信息丢失肿么办,不用着急,有AWR来定期进行保存。

  • 度量(metric)

  度量是Oracle数据库收集的另一种统计类型。一个度量被定义为在一些累积统计信息的变化率。该速率可以对各种单元进行测量,包括时间、事务或数据库调用。例如,每秒的数据库调用是一个度量。度量值可以从动态性能视图查询获得。其中的值是在一个相当小的时间间隔的平均值,通常为60秒。最近的度量值的历史是在V$视图,同时一些数据也由AWR快照进行持久化保持。

  • 采样(sampling)

  Oracle对活动会话过程中出现的相关等待进行采样,并将这些数据收集到内存中,可以用V$视图进行访问,也可以将其生成报告,用于快速或者实时的定位性能问题。那这个部分就是所谓的ASH,活动会话历史。同时这些数据由AWR快照处理也将其写入持久存储。

  • 基线(baseline)

  有数据,能比对,才能够真正反映问题的实质。那么在Oracle数据库里边,我们可以将其业务负载高峰期的活动会话历史数据,更确切的说是AWR持久化的数据贴个标签,这个标签就是所谓的基线。因此基线就是某个特定时段业务高峰期数据库整体性能的一个基准报告,一旦当后续数据库出现性能问题或运行不佳的时候,通过使用基线,与性能问题期间的性能统计数据进行比对,得出两者的差异报告,有助于问题的定位于解决。

二、系统级别性能统计

  操作系统基本性能统计提供了系统主要硬件部件的使用和性能的信息,以及操作系统本身的性能。这些信息对于检测潜在的资源消耗,如CPU周期和物理内存,以及检测外设性能不良,如磁盘驱动器是至关重要的。 操作系统统计是硬件和操作系统工作状况的重要的指标。主要包括以下重要信息。

  • CPU统计信息

  CPU利用率是调优过程中最重要的操作系统统计。应获取整个系统和多处理器系统中单个CPU的利用率。每个CPU的利用率可以检测单线程和可扩展性问题。大多数操作系统在用户空间或内核空间显示CPU时间开销,这些额外的统计数据可以更好地分析CPU实际执行情况。

  在仅仅单个应用程序运行的Oracle数据库系统中,通常情况下,该业务系统在用户空间中运行数据库活动。服务于数据库的活动请求(如调度、同步、I/O、内存管理、进程/线程创建和删除)则在内核模式(空间)下运行。在一个CPU充分利用的系统中,一个健康的Oracle数据库在用户空间CPU的开销通常在运行65%到95%之间。

  可以通过查询V$osstat视图捕获硬件和操作系统级别的相关信息,使得判定硬件级资源存在的问题更容易。V$sysmetric_history视图保留主机一小时内CPU使用度量,以每一分钟时间间隔来表示的CPU使用率。V$ sys_time_model视图提供了有多少CPU被Oracle数据库使用。这两组统计数据更能够确定Oracle数据库或其他系统活动是否是CPU问题的原因。

  • 虚拟内存统计信息

  虚拟内存统计主要用于判断系统上是否存在大量分页或交换活动。当大量分页和交换时,系统性能会迅速下降。单个进程的内存统计数据可以检测内存泄漏是否是由于某个进程释放内存失败而导致。

  • 磁盘I/O统计信息

  I/O子系统的性能决定或影响着数据库的性能。大多数操作系统对磁盘提供一些扩展的统计信息。最重要的磁盘统计信息是当前的响应时间和磁盘队列的长度。这些统计数据显示磁盘是否处于最佳状态,或者磁盘是否正在超负荷工作。

  测量I/O系统的正常性能;取决于所使用的硬件,单个块读取范围的典型值从5到20毫秒。如果硬件显示的响应时间远高于正常的性能值,那么它表现不佳或超负荷工作。这就是瓶颈。如果磁盘队列开始超过两个,那么磁盘是一个潜在的瓶颈系统。

  Oracle数据库提供了一些在I/O调用时的I/O统计信息。这些统计数据在以下视图获取。

  v$iostat_consumer_group :

    在启用资源计划后,该视图捕获I/O相关信息,是所有资源消费群组统计。数据库样本统计每小时累积并将它们存储在AWR中。

  v$iostat_file :

    该视图是基于磁盘文件I/O的统计,主要用于以文件级别展现文件访问频度。

  v$iostat_function:

    该视图是基于I/O数据库功能(如LGWR和DBWR)的统计数据。

  • 网络统计信息

  用于确定网络或网络接口是否过载或没有最佳执行。在今天的网络应用中,网络延迟可以是实际用户响应时间的很大一部分。出于这个原因,这些统计是一个关键的调试工具。

  v$IOSTAT_NETWORK:

    该视图提供网络相关统计信息查询

三、数据库统计信息

  数据库统计提供数据库上的负载类型以及数据库使用的内部和外部资源的信息。

  • 等待事件

  等待事件是由服务器进程或线程递增的统计数据,也就是说在继续处理当前某项任务之前,它必须等待某个事件完成才能继续处理。等待事件数据揭示了可能影响性能的问题的各种症状,如锁存争用、缓冲区争用和I/O争用。

  为了更好的分析不同等待事件,Oracle将等待事件进行了分类。等待事件分类包括:管理,应用程序,集群,提交,并发,配置,空闲,网络,其他,调度,系统I/O,和用户I/O。

   Author : Leshami

   Blog : http://blog.csdn.net/leshami

  下面的列表包括一些类中的等待的常见示例:

     1. 应用程序:由行级锁定或显式锁命令所引起的锁等待

     2. 提交:提交后等待重做日志写入确认

     3. 空闲:表示会话不活动的等待事件,例如来自客户端的sql*net消息

     4. 网络:等待数据通过网络发送

     5. 用户I/O:等待块被读取磁盘

  • 时间模型统计

   基于时间模型统计,主要是基于操作类型测量在数据库中花费的时间的统计信息。最重要的时间模型统计是数据库时间,即DB Time。数据库时间表示在数据库调用中所花费的总时间,是实例工作负载量的总指示器。

   在Oracle数控中,每个组件都有自己的统计数据。因此通过该组件与整体DB Time进行比对,可以很好地衡量这个组件的性能,或者说这个组件占据整个DB Time的百分比。如果能够基于这些开销过大的组件来进行调整,也即是整个DB Time开销的时间更少。

DB Time:

  即所有花费在数据库层面调用时间的总和,包括所有会话(前台进程)以及非空闲等待,CPU时间等

   DB Time 是从实例启动以来时间的累计测量。由于DB时间是由所有非空闲用户会话的时间组合来计算的,所以DB时间可能超过实例开始后所经过的实际时间。例如,已经运行了30分钟的实例可能有四个活动用户会话,其累积DB Time大约为120分钟。

更多关于时间统计模型可以参考:Oracle Time Model Statistics(时间模型统计)

  • 活动会话历史(ASH)

  Oracle对当前数据库活动会话,每秒进行采样,并将其最近10次的等待信息保存到v$session_wait,同时将其归档到活动会话历史表v$session_wait_history。这即是活动会话历史(ASH)。这些数据被保留在从SGA分配的特定内存中,并且采用循环写的方式,即采取LRU算法定期清理该部分缓存。说简单一点,ASH采用的策略是:保存处于等待状态的活动session的信息,每秒从v$session_wait中采样一次,并将采样信息保存在内存中。由于SGA中的活动会话信息存储在循环缓冲区中,系统活动越大,可以在循环缓冲区中存储的会话活动的秒数越小。因此这些数据就需要定期将其写入到磁盘,那就是由MMON进程定期将部分数据写入到AWR。AWR采用的策略是:每小时对v$active_session_history进行采样一次,并将信息保存到磁盘中,并且保留8天(11g缺省值),8天后旧的记录才会被覆盖。这些采样信息被保存在视图wrh$_active_session_history中。而这个采样频率(1小时)和保留时间(8天)可以根据实际情况进行调整。

  活动会话历史通常包括以下数据:

    SQL语句及SQLID

    用于执行sql语句的sql计划的sql计划标识符和哈希值

    SQL执行计划信息

    对象编号、文件号和块号

    等待事件标识符和参数

    会话标识符和会话序列号

    模块和动作名称

    会话的客户端标识符

    服务散列标识符

    消费组标识符

  • 系统和会话统计信息

  可以从V$SYSSTAT和V$SESSTAT两个视图获取大量系统级别以及会话级别的统计信息。

转载于:https://www.cnblogs.com/timlong/p/7475470.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/391461.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

numpy2

1、通用函数,是一种在ndarray数据中进行逐元素操作的函数。某些函数接受一个或多个标量数值,并产生一个或多个标量结果,通用函数就是对这些函数的封装。 1、常用的一元通用函数有:abs\fabs  sqrt   square  exp  log\log2…

Apache Prefork、Worker和Event三种MPM简单分析

(1) Prefork MPM (优点) :使用多个子进程,每个子进程只有一个线程来处理一个 http 连接,不用担心线程安全问题缺点:内存消耗大,不擅长处理高并发环境,使用keep-alive长连接时要等到超…

grasshopper_如何使用Google的Grasshopper编码应用程序来学习手机上的编码基础知识...

grasshopper什么是蚱hopper? (What is Grasshopper?) Grasshopper is an interactive education app for learning about coding. It began at Google as an experimental project created by a group called Area 120. Grasshopper是一个用于学习编码的交互式教育…

机器学习 量子_量子机器学习:神经网络学习

机器学习 量子My last articles tackled Bayes nets on quantum computers (read it here!), and k-means clustering, our first steps into the weird and wonderful world of quantum machine learning.我的最后一篇文章讨论了量子计算机上的贝叶斯网络( 在这里阅读&#xf…

leetcode 179. 最大数(排序)

给定一组非负整数 nums,重新排列每个数的顺序(每个数不可拆分)使之组成一个最大的整数。 注意:输出结果可能非常大,所以你需要返回一个字符串而不是整数。 示例 1: 输入:nums [10,2] 输出&a…

test3

test3 转载于:https://www.cnblogs.com/Forever77/p/11441068.html

linux渗透测试_渗透测试:选择正确的(Linux)工具栈来修复损坏的IT安全性

linux渗透测试Got IT infrastructure? Do you know how secure it is? The answer will probably hurt, but this is the kind of bad news you’re better off getting sooner rather than later.有IT基础架构吗? 你知道它有多安全吗? 答案可能会很痛…

BZOJ 1176: [Balkan2007]Mokia

一道CDQ分治的模板题,然而我De了一上午Bug...... 按时间分成左右两半,按x坐标排序然后把y坐标丢到树状数组里,扫一遍遇到左边的就add,遇到右边的query 几个弱智出了bug的点, 一是先分了左右两半再排序,保证的是这次的左…

深入理解InnoDB(1)—行的存储结构

1.InnoDB页的简介 页(Page)是 Innodb 存储引擎用于管理数据的最小磁盘单位。常见的页类型有数据页、Undo 页、系统页、事务数据页等 2.InnoDB行的存储格式 我们插入MySQL的记录在InnoDB中可能以4中行格式存储,分别是Compact、Redundant、D…

做嵌入式的必须学Android吗

做嵌入式的必须学Android吗Android方向适合哪些人呢?适合那些已经在自己领域有了一定的工作经验的人,适合作为自己的拓展,适合提升自己的能力,譬如说已经做三年Linux驱动,就可以尝试拓展去做Android驱动首先从技术角度…

test4

test4 转载于:https://www.cnblogs.com/Forever77/p/11441980.html

boltzmann_推荐系统系列第7部分:用于协同过滤的Boltzmann机器的3个变体

boltzmannRecSys系列 (RecSys Series) Update: This article is part of a series where I explore recommendation systems in academia and industry. Check out the full series: Part 1, Part 2, Part 3, Part 4, Part 5, Part 6, and Part 7.更新: 本文是我探索…

.net 初学者_在此初学者课程中学习使用TensorFlow 2.0开发神经网络

.net 初学者Learn how to use TensorFlow 2.0 in this full video course from Tech with Tim. This course will show you how to create neural networks with Python and TensorFlow 2.0.在Tech与Tim的完整视频课程中,学习如何使用TensorFlow 2.0。 本课程将向您…

AndroidStudio怎样导入library项目开源库 - 转

https://jingyan.baidu.com/article/1974b2898917aff4b1f77415.html转载于:https://www.cnblogs.com/EasyLive2006/p/7477719.html

深入理解InnoDB(2)—页的存储结构

1. 记录头信息 上一篇博客说到每行记录都会有记录头信息,用来记录每一行的一些属性 Compact行记录的记录头信息为例 1.1 delete_mask 这个属性标记着当前记录是否被删除,占用1个二进制位,值为0的时候代表记录并没有被删除,为1的…

PHP中的命名空间

1. PHP中的命名空间是什么? 官方解释在此: 命名空间概述 命名空间用一句话说,就是:把 类、函数、变量 等放到逻辑子文件夹中去,以避免命名冲突。 注:命名空间跟实际代码文件在文件系统中的路径没有任何关系…

pandas 入门

pandas简介:pandas包含的数据结构和数据处理工具的设计使得利用进行数据清洗和数据分析非常快捷;与numpy的区别,pandas用来处理表格型或异质型数据的,而numpy更适合处理同质型的数值类数据。 1、Series简介 1、Series是一种一维的…

传智播客软件测试第一期_播客:冒险如何推动一位软件工程师的职业发展

传智播客软件测试第一期On this weeks episode of the freeCodeCamp podcast, Abbey chats with developer and wearer of many hats Princiya about how she changed careers, moved to Berlin, and worked her way up to a lead role.在本周的freeCodeCamp播客节目中&#xf…

爬虫神经网络_股市筛选和分析:在投资中使用网络爬虫,神经网络和回归分析...

爬虫神经网络与AI交易 (Trading with AI) Stock markets tend to react very quickly to a variety of factors such as news, earnings reports, etc. While it may be prudent to develop trading strategies based on fundamental data, the rapid changes in the stock mar…

Promise 原理解析与实现(遵循Promise/A+规范)

1.什么是Promise? Promise是JS异步编程中的重要概念,异步抽象处理对象,是目前比较流行Javascript异步编程解决方案之一 2.对于几种常见异步编程方案 回调函数事件监听发布/订阅Promise对象这里就拿回调函数说说 1.对于回调函数 我们用Jquery的ajax获取数…