本文章为网络笔记,看了warehouse老师的视频受益匪浅,更是感觉自己技术太过初级,特写了本笔记,方便以后反复学习!
如有任何不妥,请发邮件至102448567@qq.com删除文章!
关于warehouse:
http://blog.itpub.net/19602/viewspace-1059211/
11gR2视频第四版 7_06_statistics
statistics:
在session
或者instance
级别衡量数据库性能的一些指标
session
级别
v$sesstat
session
的sid
、统计信息的编号、值
v$statname
数据库中有哪些统计信息,也就是从哪些方面去衡量数据库的性能
以statistic
中的redo size
为例,模拟statistics
的用途
SELECT b.STATISTIC#,
b.name,
a.value
FROM v$sesstat a,v$statname b
WHERE A.STATISTIC# = b.STATISTIC#
AND b.statistic# = 194
AND a.sid = (SELECT distinct sid FROM v$mystat)
STATISTIC# NAME VALUE
---------- -------------------- ----------
194 redo size 0
SQL> insert into t1 values(5,'sunqi',20);
1 row created.
SELECT b.STATISTIC#,
b.name,
a.value
FROM v$sesstat a,v$statname b
WHERE A.STATISTIC# = b.STATISTIC#
AND b.statistic# = 194
AND a.sid = (SELECT distinct sid FROM v$mystat);
STATISTIC# NAME VALUE
---------- -------------------- ----------
194 redo size 304
衡量一个sessoin
中 不管你做什么动作,Oracle
总会从一个角度去判断这个session
及数据库造成了多大的负载,用统计信息来表现出来
session logical reads
会话逻辑读,要读一个表中的数据,数据在数据块中放着,首先要看这个块在不在内存要是不在就把块从数据文件中读到内存中,读一个块叫物理读,这个块在内存(buffer
)中之后访问内存中的块每访问一次就是一次逻辑读,当一个session
的逻辑读很大的时候意味着这个session
执行过的sql
语句非常大,这个时候负载就比较大了
实验模拟逻辑读增大
SELECT b.STATISTIC#,
b.name,
a.value
FROM v$sesstat a,v$statname b
WHERE A.STATISTIC# = b.STATISTIC#
AND b.statistic# = 14
AND a.sid = (SELECT distinct sid FROM v$mystat);
STATISTIC# NAME VALUE
---------- -------------------------------------------------- ----------
14 session logical reads 58
SQL> select * from t1;
ID NAME AGE
---------- -------------------------------------------------- ----------
11 erha 31
2 lisi 22
3 bb 20
4 zhaoliu 20
5 sunqi 20
5 sunqi 20
5 sunqi 20
5 sunqi 20
5 sunqi 20
9 rows selected.
SELECT b.STATISTIC#,
b.name,
a.value
FROM v$sesstat a,v$statname b
WHERE A.STATISTIC# = b.STATISTIC#
AND b.statistic# = 14
AND a.sid = (SELECT distinct sid FROM v$mystat);
STATISTIC# NAME VALUE
---------- -------------------------------------------------- ----------
14 session logical reads 66
自从这个instance
起来之后所有session
的statistics
会汇总到instance
上的statistics
可以查这个视图
v$sysstat
value
降序排序关注排在最前边比较大的
看这个v$sysstat
可以了解系统哪些资源消耗比较大,这样哪些资源就有可能比较紧张
v$filestat
基于文件级别的statistic
自从instance
起来以来数据文件读了PHYRDS
次,写了PHYWRTS
次,物理读了PHYBLKRD
个块,写了PHYBLKWRT
个块,SINGLEBLKRDS
单块读(一次读一个块)一共读了多少次
v$
开头的这些视图基本上都是在内存中的,重启之后就没有了所以有性能问题谨慎重启,重启之后就没有这些统计信息了
关于buffer
的统计信息
v$buffer_pool_statistics
计算一下buffer cache
的命中率
DB_BLOCK_GETS
+CONSISTENT_GETS
是在内存中命中的块
PHYSICAL_READS
是在磁盘上命中的块
SELECT 100 * round ((DB_BLOCK_GETS+CONSISTENT_GETS)/(DB_BLOCK_GETS+CONSISTENT_GETS+PHYSICAL_READS),4)
FROM dual
看sga
的统计信息
v$sga_target_advice
segment
的统计信息,表、索引等等都是segment
v$segment_statistics
value
比较多的一般就是大表或者是核心业务表,statistic_name
是logical reads
就说明这个表访问的很频繁
segment
的statistics
Oracle
一共提供了19
个(Oracle11204
)
SELECT *
FROM v$segstat_name
内存够用的情况下一般衡量单个sql
要是logical reads
很低的话那这个sql
性能就不会太差,消耗CPU
的资源也不会太多
统计信息就是记录的实例的活动情况