数据库统计数据提供了关于数据库负载和资源使用情况的信息。为了有效的度量数据库的性能,统计数据是非常关键的。

v$sesstat

v$sesstat展示了用户会话的统计数据,可以通过关联v$statname的statistics#来找到statname。

实例:通过sid关联v$sesstat和v$session找到会话的用户,event等信息,通过statistics#关联v$sesstat和v$statname找到statname和class。

col name for a20
col EVENT for a25
select c.username,c.program,c.event,c.blocking_session,b.NAME,b.class,a.value
from v$sesstat a,v$statname b,v$session c
where a.STATISTIC#=b.STATISTIC# and a.sid=(select sid from v$mystat where rownum<=1) and b.name='physical read bytes'
and a.sid=c.sid;

v$sysstat

V$SYSSTAT展示system级的统计数据。同样的可以通过关联v$statname的statistics#来找到statname。V$sysstat比sesstat多了两个字段:NAME,CLASS,stat_id。这3个字段其实就在v$statname中,也就是说v$sysstat其实是v$sesstat的汇总,并关联了v$statname记录了stat name,class,stat_id。

v$statname

v$statname展示了所有统计数据,在某些平台,会有额外的关于OS的统计数据。在11.2.0.3中有638个统计项,11.2.0.4中有679个统计项,12.1.0.2中高达1178个统计项。

我们着重看下Class列:

每个统计项都可以分类class,比如physical reads的class为8,代表他是cache类。72=64+8,也就是既属于SQL也属于Cache.

不通版本class也会有所不同

11.2.0.3

11.2.0.4

12.1.0.2

DBA_HIST_SYSSTAT

dba_hist_sysstat展示了历史的系统统计数据,是v$sysstat的快照。dba_hist_sysstat比v$sysstat少了class字段,而且v$sysstat与v$statname通过STATISTIC#关联,dba_hist_sysstat与v$statname通过STAT_ID关联。dba_hist_sysstat的value是一个累积值,在看快照内的生成统计数据的value时,应该是当前快照value减去前一个快照的value

示例1:找到历史db time的值

set pagesize 2000
select b.snap_id,a.stat_name,TO_CHAR(b.end_interval_time, 'yyyy-mm-dd hh24:mi:ss') end_time,(a.value - lag(a.value, 1) over(order by a.snap_id)) value
from  dba_hist_sysstat a,dba_hist_snapshot b
where a.snap_id = b.snap_id and a.stat_name = 'DB time' order by end_time;

再把value转到excel中做成趋势图,从一定程度上反应了数据库的负载走势,方便找到数据库负载的规律和关键点。逻辑读物理读等同理,在此不赘述。DB time图如下:

示例2:找到load profile中的逻辑读和物理读

awr中的load profile展示了快照内的一下统计数据,我们可以通过dba_hist_sysstat手动的去找到这些信息。Load profel中per second都是以秒为单位,在计算的时候需要注意时间差的转换:interval->second,可以用一下函数

EXTRACT(HOUR FROM lag_time) * 60 * 60 +EXTRACT(MINUTE FROM lag_time) * 60 + EXTRACT(SECOND FROM lag_time)

logical read(blocks):

跟逻辑读类似的有两个指标,session logical reads和logical read bytes from cache。那么到底哪个是logical read(blocks)呢?

先看看官方文档定义:

官方文档Statistics Descriptions中只有session logical reads的描述,没有logical read bytes from cache的描述。

SQL> select stat_name,lag_value from (2  select b.snap_id,a.stat_name,((a.value - lag(a.value, 1) over(order by a.snap_id)))/
(EXTRACT(HOUR FROM (b.end_interval_time - lag(b.end_interval_time, 1) over(order by b.snap_id)))*60*603    4  +EXTRACT(MINUTE FROM (b.end_interval_time - lag(b.end_interval_time, 1) over(order by b.snap_id)))*605  +EXTRACT(SECOND FROM (b.end_interval_time - lag(b.end_interval_time, 1) over(order by b.snap_id)))) lag_value6  from  dba_hist_sysstat a,dba_hist_snapshot b 7  where a.snap_id = b.snap_id and a.stat_name = 'session logical reads')8  where snap_id=3795;STAT_NAME                       LAG_VALUE
------------------------------ ----------
session logical reads          116800.108

通过session logical reads查到value为116800.108,刚好与load profile中的116800.1对应。那么刚才的问题就解答了,logical read(blocks)对应的是session logical reads。

Physical read (blocks):

相关物理读的指标有两个physical reads和physical read bytes

physical read bytes是应用活动所有磁盘读的总大小,physical reads是磁盘读的块数。

SQL> select stat_name,lag_value from (2  select b.snap_id,a.stat_name,((a.value - lag(a.value, 1) over(order by a.snap_id)))/ 3  (EXTRACT(HOUR FROM (b.end_interval_time - lag(b.end_interval_time, 1) over(order by b.snap_id)))*60*604  +EXTRACT(MINUTE FROM (b.end_interval_time - lag(b.end_interval_time, 1) over(order by b.snap_id)))*605  +EXTRACT(SECOND FROM (b.end_interval_time - lag(b.end_interval_time, 1) over(order by b.snap_id)))) lag_value6  from  dba_hist_sysstat a,dba_hist_snapshot b 7  where a.snap_id = b.snap_id and a.stat_name = 'physical read bytes')8  where snap_id=3795;STAT_NAME                       LAG_VALUE
------------------------------ ----------
physical read bytes             7191965.3SQL> select stat_name,lag_value from (2  select b.snap_id,a.stat_name,((a.value - lag(a.value, 1) over(order by a.snap_id)))/ 3  (EXTRACT(HOUR FROM (b.end_interval_time - lag(b.end_interval_time, 1) over(order by b.snap_id)))*60*604  +EXTRACT(MINUTE FROM (b.end_interval_time - lag(b.end_interval_time, 1) over(order by b.snap_id)))*605  +EXTRACT(SECOND FROM (b.end_interval_time - lag(b.end_interval_time, 1) over(order by b.snap_id)))) lag_value6  from  dba_hist_sysstat a,dba_hist_snapshot b 7  where a.snap_id = b.snap_id and a.stat_name = 'physical reads')8  where snap_id=3795;STAT_NAME                       LAG_VALUE
------------------------------ ----------
physical reads                 877.925451

physical reads的877.925451对应了load profile中的877.9。physical read bytes的7191965.3/8=898995.663,比physical reads还多。

其他相关视图

V$px_sesstat记录了session级并行执行的统计数据,px>parallel execution。

V$pq_sesstat记录了session级并行查询的统计数据,pq>parallel queries。

V$pq_sysstat记录了system级并行查询的统计数据。

V$PX_PROCESS_SYSSTAT:

先看看V$PX_PROCESS_SYSSTAT的定义

官方文档对V$PX_PROCESS_SYSSTAT描述为记录了session级并行执行的统计数据。这跟V$PX_SESSTAT在官方文档中的描述是一模一样的。

那他们的区别在哪?

先看看字段的区别

字段差距很大,V$PX_SESSTAT记录了session id,SERIAL#,QCSID并行会话session id,QCSERIAL#并行会话的serial#,QCINST_ID并行会话的instance number等关于会话的信息。V$PX_PROCESS_SYSSTAT只记录了一些维度的统计数据的值

severs%类的统计数据是属于系统维度的。

我们再看看V$PX_PROCESS_SYSSTAT和V$PQ_SYSSTAT的相似之处

(11.2.0.4)

(11.2.0.3)

如果V$PX_PROCESS_SYSSTAT是记录的session级的统计数据的话,那么它记录的值应该跟system级别记录的值是有差距的。

从上面的视图的字母意思,视图字段,统计数据维度,统计数据值的情况和横向对比其他视图来看,基本可以确定V$PX_PROCESS_SYSSTAT是记录的system级别的统计数据。可惜这个描述在12c的官方文档中也没有修复。

数据库的统计数据——sysstat相关推荐

  1. oracle stalestats_深入理解oracle优化器统计数据(Optimizer Statistics)

    理解oracle优化器统计数据 首先来介绍oracle数据库使用基于规则优化器(RBO)来决定如何执行一个sql语句.基于规则优化器顾名思义,它是遵循一组规则来判断一个sql语句的执行计划.这组规则是 ...

  2. c# mysql executescalar_C# 操作MySQL数据库, ExecuteScalar()方法执行T-SQL语句, COUNT(*), 统计数据...

    C# 操作My SQL数据库需要引用"MySql.Data", 可通过两种方式获取. 1.从NuGet下载"Install-Package MySql.Data -Ver ...

  3. 数据库笔记02:查询与统计数据

    /***************************  第二单元:查询与统计数据 ***************************/ /* SELECT [DISTINCT][TOP n [ ...

  4. python excel模板 生成excel表格_python制作简单excel统计报表3之将mysql数据库中的数据导入excel模板并生成统计图...

    python制作简单excel统计报表3之将mysql数据库中的数据导入excel模板并生成统计图 #coding=utf-8 from openpyxl importload_workbookfro ...

  5. mysql数据库 SELECT COUNT(1) FROM new_comps WHERE deleted = 0 统计数据太慢了二十多秒

    @TOC使用mybatis-puls分页查询数据量大很慢,怎么处理 mysql数据库 SELECT COUNT(1) FROM new_comps WHERE deleted = 0 统计数据太慢了二 ...

  6. executescalar mysql_C# 操作MySQL数据库, ExecuteScalar()方法执行T-SQL语句, COUNT(*), 统计数据...

    C# 操作My SQL数据库需要引用"MySql.Data", 可通过两种方式获取. 1.从NuGet下载"Install-Package MySql.Data -Ver ...

  7. mysql数据库获得时间段内数据_mysql 获取规定时间段内的统计数据

    mysql 获取规定时间段内的统计数据 按年统计SELECT count(*), DATE_FORMAT(order_info.create_time, '%Y-%m-%d') AS count_by ...

  8. PostgreSQL数据库统计信息——compute_scalar_stats计算统计数据

    如果列类型指定的是std_typanalyze函数决定compute_stats的取值: 如果列数据类型支持默认的等于(eqopr equals operator)和小于(ltopr less tha ...

  9. 2.0中获取数据库连接统计数据

    作者: http://blog.joycode.com/liuhuimiao/ .NET 2.0中的SqlConnection多了一个StatisticsEnabled属性和ResetStatisti ...

最新文章

  1. python创建一个类初始化两个变量name、age_Python小白入门:第八讲||类
  2. oracle取两条sql查询结果的差集,并集,交集
  3. (2,1,3)卷积码与一种QC-LDPC码的译码性能对比
  4. [html] HTML5的触屏事件有哪些?
  5. 什么样的程序员会让人讨厌?大家注意,千万不要成为这种程序员!
  6. Monthly Expense( POJ-3273 )
  7. SVN 服务器的安装和配置(Gentoo)
  8. 插件代码_我们开源了一款 SonarQube iOS 代码扫描插件
  9. Linux kernel进行编译时提示No rule to make target `menconfig'
  10. Visual Studio Node.js工具1.1
  11. JQuery canvas 验证码
  12. Cocos2d-x-使用脚本概述
  13. Javascript This 机制
  14. 苏宁收购天天快递,海航哭晕,申通老板怒赚20亿
  15. java栅格化,UI设计要不要用栅格化布局?
  16. 检测android 小米 系统更新,小米健康重磅更新!系统级心率检测功能来了
  17. linux防火墙放开pptpd端口号,centos7 安装pptpd(使用iptbales防火墙)
  18. Android通过蓝牙获取设备的通讯录、通话记录等
  19. 由access key泄露浅谈云安全
  20. groovy if 判断字符串_Groovy语法

热门文章

  1. 疫情过后,哪些互联网行业将迎来发展机遇
  2. cv2安装与基本函数
  3. docker疑难杂症:docker命令Tab无法自动补全
  4. SQL 行转列 列转行 case when 写法
  5. 网络安全基础知识---nginx安全配置
  6. Java遍历指定目录或当前目录
  7. 开机自动拔号上网(无路由器)
  8. 输入框中-------禁止输入表情
  9. opensuse安装中文输入法
  10. 【DDD落地实践系列】DDD 领域驱动设计落地实践:六步拆解 DDD