gdufo

 

oracle查用一些命令点滴

     摘要: 1.查看 tablespace存放哪些数据表 select   table_name   from   all_tables   where   tablespace_name   =   'Example' 2.查看 表属于哪个用户 select   owne...  阅读全文

posted @ 2009-11-17 16:17 gdufo| 编辑 收藏

linux 下开放指定端口

安装tomcat后,在客户端输入地址http://serverAddress:8080,发现默认端口8080不能访问。

 

  由于Linux防火墙默认是关闭8080端口。因此,若要能够访问8080端口,可以用两种方式,一个是关闭防火墙,另一个就是让防火墙开放8080端口。

 

  开放8080端口的解决步骤如下:

  1、修改/etc/sysconfig/iptables文件,增加如下一行:

  -A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 8080 -j ACCEPT

       重启        iptables
       service iptables restart

  2、重启防火墙,这里有两种方式重启防火墙

 

  a) 重启后生效
  开启: chkconfig iptables on
  关闭: chkconfig iptables off

 

  b) 即时生效,重启后失效
  开启: service iptables start
  关闭: service iptables stop

 

  再次从客户端访问,成功!

posted @ 2009-11-17 15:47 gdufo| 编辑 收藏

学习动态性能表 第15 篇--V$ROLLSTAT 2007.6.12


一个回滚段可以存放多个事务的回滚信息。
回滚段的作用
1。事务回滚:当事务修改表中数据的时候,该数据修改前的值(即前影像)会存放在
回滚段中,当用户回滚事务(ROLLBACK)时,ORACLE 将会利用回滚段中的数据前影像
来将修改的数据恢复到原来的值。
2。事务恢复:当事务正在处理的时候,例程失败,回滚段的信息保存在重做日志文件
中,ORACLE 将在下次打开数据库时利用回滚来恢复未提交的数据。
3。读一致性:当一个会话正在修改数据时,其他的会话将看不到该会话未提交的修改。
而且,当一个语句正在执行时,该语句将看不到从该语句开始执行后的未提交的修改(语句
级读一致性)。当ORACLE 执行SELECT 语句时,ORACLE 依照当前的系统改变号(SYSTEM
CHANGE NUMBER-SCN)来保证任何前于当前SCN 的未提交的改变不被该语句处理。可
以想象:当一个长时间的查询正在执行时,若其他会话改变了该查询要查询的某个数据块,
ORACLE 将利用回滚段的数据前影像来构造一个读一致性视图。
事务级的读一致性
ORACLE 一般提供SQL 语句级(SQL STATEMENT LEVEL)的读一致性,可以用以下
语句来实现事务级的读一致性。
SET TRANSACTION READ ONLY;
或:
SET TANNSACTION SERIALIZABLE;
以上两个语句都将在事务开始后提供读一致性。需要注意的是,使用第二个语句对数据
库的并发性和性能将带来影响。
回滚段的种类
1。系统回滚段:当数据库创建后,将自动创建一个系统回滚段,该回滚段只用于存放
系统表空间中对象的前影像。
2。非系统回滚段:拥有多个表空间的数据库至少应该有一个非系统回滚段,用于存放
非系统表空间中对象的数据前影像。非系统回滚段又分为私有回滚段和公有回滚段,私有回
滚段应在参数文件的ROLLBACK SEGMENTS 参数中列出,以便例程启动时自动使其在线
(ONLINE)。公有回滚段一般在OPS(ORACLE 并行服务器)中出现,将在例程启动时自
动在线。
3。DEFERED 回滚段:该回滚段在表空间离线(OFFLINE)时由系统自动创建,当表
空间再次在线(ONLINE)时由系统自动删除,用于存放表空间离线时产生的回滚信息。
回滚段的使用
分配回滚段:当事务开始时,ORACLE 将为该事务分配回滚段,并将拥有最少事务的
回滚段分配给该事务。事务可以用以下语句申请指定的回滚段:
SET TRANSTRACTION USE ROLLBACK SEGMENT rollback_segment
事务将以顺序,循环的方式使用回滚段的区(EXTENTS),当当前区用满后移到下一个
区。几个事务可以写在回滚段的同一个区,但每个回滚段的块只能包含一个事务的信息。
例如(两个事务使用同一个回滚段,该回滚段有四个区):
1、事务在进行中,它们正在使用回滚段的第三个区;
2、当两个事务产生更多的回滚信息,它们将继续使用第三个区;
3、当第三个区满后,事务将写到第四个区,当事务开始写到一个新的区时,称为翻转
(WRAP);
4、当第四个区用满时,如果第一个区是空闲或非活动(使用该区的所有事务完成而没
有活动的事务)的,事务将接着使用第一个区。
回滚段的扩张(EXTEND)
当当前回滚段区的所有块用完而事务还需要更多的回滚空间时,回滚段的指针将移到下
一个区。当最后一个区用完,指针将移到第一个区的前面。回滚段指针移到下一个区的前提
是下一个区没有活动的事务,同时指针不能跨区。当下一个区正在使用时,事务将为回滚段
分配一个新的区,这种分配称为回滚段的扩展。回滚段将一直扩展到该回滚段区的个数到达
回滚段的参数MAXEXTENTS 的值时为止。
回滚段的回收和OPTIMAL 参数
OPTIMAL 参数指明回滚段空闲时收缩到的位置,指明回滚段的OPTIMAL 参数可以减
少回滚段空间的浪费。
V$ROLLSTAT 中的常用列
􀁺 USN:回滚段标识
􀁺 RSSIZE:回滚段默认大小
􀁺 XACTS:活动事务数
在一段时间内增量用到的列
􀁺 WRITES:回滚段写入数(单位:bytes)
􀁺 SHRINKS:回滚段收缩次数
􀁺 EXTENDS:回滚段扩展次数
􀁺 WRAPS:回滚段翻转(wrap)次数
􀁺 GETS:获取回滚段头次数
􀁺 WAITS:回滚段头等待次数
V$ROLLSTAT 中的连接列
Column View Joined Column(s)
-------------- ----------------------- ------------------------
USN V$ROLLNAME USN
注意:
通过花费时间除以翻转次数,你可以得到一次回滚段翻转(wrap)的平均用时。此方法常
用于在长查询中指定合适的回滚段大小以避免'Snapshot Too Old'错误。同时,通过查看
extends 和shrinks 列可以看出optimal 是否需要增加。
示例:
1.查询回滚段的信息。所用数据字典:DBA_ROLLBACK_SEGS,可以查询的信息:回滚段
的标识(SEGMENT_ID)、名称(SEGMENT_NAME)、所在表空间(TABLESPACE_NAME)、类
型(OWNER)、状态(STATUS)。
select * from DBA_ROLLBACK_SEGS
􀁺 查看回滚段的统计信息:
SELECT n.name, s.extents, s.rssize, s.optsize, s.hwmsize, s.xacts,
s.status
FROM v$rollname n, v$rollstat s
WHERE n.usn = s.usn;
3.查看回滚段的使用情况,哪个用户正在使用回滚段的资源:
select s.username, u.name
from v$transaction t, v$rollstat r, v$rollname u, v$session s
where s.taddr = t.addr
and t.xidusn = r.usn
and r.usn = u.usn
order by s.username;
学习动态性能表
第16 篇--V$ROWCACHE 2007.6.12
本视图显示数据字典缓存(也叫rowcache)的各项统计。每一条记录包含不同类型的数据
字典缓存数据统计,注意数据字典缓存有层次差别,因此同样的缓存名称可能不止一次出现。
V$ROWCACHE 常用列
􀁺 PARAMETER:缓存名
􀁺 COUNT:缓存项总数
􀁺 USAGE:包含有效数据的缓存项数
􀁺 GETS:请求总数
􀁺 GETMISSES:请求失败数
􀁺 SCANS:扫描请求数
􀁺 SCANMISSES:扫描请求失败次数
􀁺 MODIFICATIONS:添加、修改、删除操作数
􀁺 DLM_REQUESTS:DLM 请求数
􀁺 DLM_CONFLICTS:DLM 冲突数
􀁺 DLM_RELEASES:DLM 释放数
使用 V$ROWCACHE 数据
1>.确认数据字典缓存是否拥有适当的大小。如果shared pool 过小,那数据字典缓存就
不足以拥有合适的大小以缓存请求信息。
2>.确认应用是否有效访问缓存。如果应用设计未能有效使用数据字典缓存(比如,大数
据字典缓存并不有助于解决性能问题)。例如,DC_USERS 缓存在过去某段时期内出现
大量GETS,看起来像是数据库中创建了大量的不同用户,并且应用记录下用户频繁登
陆和注销。通过检查logon 比率以及系统用户数可以验证上述数据。同时解析比率也会
很高,如果这是一个大型的OLTP 系统的中间层,它可能在中间层更有效的管理个别帐
户,允许中间层以单用户登陆成为应用所有者。通过保持活动连接来减少logon/logoff
比率也同样有效。
3>. 确认是否发生动态空间分配。DC_SEGMENTS, DC_USED_EXTENTS, 以及
DC_FREE_EXTENTS 大量的类似大小修改将指出存在大量动态空间分配。可行的解决
方案包括指定下一个区大小或者使用本地管理表空间。如果发生空间分配的是临时的表
空间,则可以为其指定真正的临时表空间(If the space allocation is occurring on the temp
tablespace, then use a true temporary tablespace for the temp. )。
4>.dc_sequences 值的变化指出是否大量sequence 号正在产生。
5>.搜集硬解析的证据。硬解析常表现为大量向DC_COLUMNS, DC_VIEWS 以及
DC_OBJECTS caches 的gets。
示例:
1.分组统计数据字典统计项
SELECT parameter,sum("COUNT"),sum(usage),sum(gets),sum(getmisses),
sum(scans),sum(scanmisses),sum(modifications),
sum(dlm_requests),sum(dlm_conflicts),sum(dlm_releases)
FROM V$ROWCACHE
GROUP BY parameter;
2.检查数据字典的命中率
select 1 - sum(getmisses) / sum(gets) "data dictionary hitratio" from
v$rowcache;
学习动态性能表
第17 篇-(1)-V$SEGSTAT 2007.6.13
本视图实时监控段级(segment-level)统计项,支持oracle9ir2 及更高版本
V$SEGSTAT 中的常用列
􀁺 TS#:表空间标识
􀁺 OBJ#:字典对象标识
􀁺 DATAOBJ#:数据对象标识
􀁺 STATISTIC_NAME:统计项名称
􀁺 STATISTIC#:统计项标识
􀁺 VALUE:统计项值
V$SEGSTAT 中的连接列
Column View Joined Column(s)
-------------- ----------------------- ------------------------
TS# V$TABLESPACE TS#
OBJ# ALL_OBJECTS OBJECT_ID
示例:
9. 查询指定对象的统计
select * from v$segstat where ts# = 11
and obj# = (select object_id from user_objects
where object_name = 'TMPTABLE1' and owner = 'JSS')
第 17 篇-(2)-V$SEGMENT_STATISTICS 2007.6.13
这是一个友好的视图,支持Oracle9ir2 及更高版本。实时监测段级(segment-level)统计项,
可用于鉴定性能问题源于表或索引
V$SEGMENT_STATISTICS 中的列
􀁺 OWNER:对象所有者
􀁺 OBJECT_NAME:对象名称
􀁺 SUBOBJECT_NAME:子对象名称
􀁺 TABLESPACE_NAME:对象所在表空间
􀁺 TS#:表空间标识
􀁺 OBJ#:字典对象标识
􀁺 DATAOBJ#:数据对象标识
􀁺 OBJECT_TYPE:对象类型
􀁺 STATISTIC_NAME:统计项名称
􀁺 STATISTIC#:统计项标识
􀁺 VALUE:统计项值
基本与上相同,只是信息更加详细,不再赘述。
学习动态性能表
第18 篇--V$SYSTEM_EVENT 2007.6.13
本视图概括了实例各项事件的等待信息。v$session_wait 显示了系统的当前等待项,
v$system_event 则提供了自实例启动后各个等待事件的概括。常用于获取系统等待信息的历
史影象。而通过两个snapshot 获取等待项增量,则可以确定这段时间内系统的等待项。
V$SYSTEM_EVENT 中的常用列
1. EVENT:等待事件名称
2. TOTAL_WAITS:此项事件总等待次数
3. TIME_WAITED:此项事件的总等待时间(单位:百分之一秒)
4. AVERAGE_WAIT : 此项事件的平均等待用时( 单位: 百分之一
秒)(time_waited/total_waits)
5. TOTAL_TIMEOUTS:此项事情总等待超时次数
示例:
1.查看系统的各项等待,按总耗时排序
SELECT event,total_waits waits,total_timeouts timeouts,
time_waited total_time,average_wait avg
FROM V$SYSTEM_EVENT
ORDER BY 4 DESC;
比如,通过checkpoint completed、log file switch(checkpoint incomplete)可以查看检查点进
程的性能。通过log file parallel write、log file switch completed 可以查看联机重做日志文件的
性能。通过log file switch(archiving needed)事件可以检查归档进程的性能。
找出瓶颈:
1。通过Statspack 列出空闲事件。
2。检查不同事件的等待时间开销。
3。检查每条等待记录的平均用时,因为某些等待事件(比较log file switch completion)可能周
期性地发生,但发生时却造成了严重的性能损耗。
学习动态性能表
第19 篇--V$UNDOSTAT 2007.6.14
本视图监控当前实例中undo 空间以及事务如何运行。并统计undo 空间开销,事务开销
以及实例可用的查询长度。
V$UNDOSTAT 中的常用列
􀁺 Endtime:以10 分钟为间隔的结束时间
􀁺 UndoBlocksUsed:使用的undo 块总数
􀁺 TxnConcurrency:事务并发执行的最大数
􀁺 TxnTotal:在时间段内事务执行总数
􀁺 QueryLength:查询长度的最大值
􀁺 ExtentsStolen:在时间段内undo 区必须从一个undo 段转到另一个的次数
􀁺 SSTooOldError:在时间段内'Snapshot Too Old'错误发生的次数
􀁺 UNDOTSN:这段时间内最后活动的undo 表空间ID
视图的第一行显示了当前时间段的统计,其它的每一条记录分别以每10 分钟一个区间。
24 小时循环,一天最多144 条记录。
示例:
1.本例显示undo 空间从16:27 到之前24 小时内的各项统计。
SQL>select * from v$undostat;
End-Time UndoBlocks TxnConcrcy TxnTotal QueryLen ExtentsStolen SSTooOldError
-------- ---------- ---------- -------- -------- ------------- -------------
16:07 252 15 1511 25 2 0
16:00 752 16 1467 150 0 0
15:50 873 21 1954 45 4 0
15:40 1187 45 3210 633 20 1
15:30 1120 28 2498 1202 5 0
15:20 882 22 2002 55 0 0
在统计项收集过程中,undo 消耗最高发生在15:30-15:40 这个时间段。10 分钟内有1187 个
undo 块被占用(基本上每秒钟2 个块)。同时,最高事务并发也是在相同的时间段,45 个事
务被并发执行。执行的最长查询(1202 秒)是在15:20-15:30 之间,需要注意的是查询实际上
是15:00-15:10 段即开始并直到15:20 这个时间段。
学习动态性能表
第20 篇--V$WAITSTAT 2007.6.15
本视图保持自实例启动所有的等待事件统计信息。常用于当你发现系统存在大量的
"buffer busy waits"时据此做出适当调整。
V$WAITSTAT 中的常用列
􀁺 CLASS:块类别
􀁺 WAITS:本类块的等待次数
􀁺 TIME:本类块的总等待时间
等待发生的原因:
1.undo 段头部:没有足够的回滚段
2.数据段头部/数据段空闲列:空闲列争夺
3.数据块冲突
4.缓存存在大量的CR 复制
5.range 检索时,索引列存在大量不连续
6.全表检索的表有大量被删除记录
7.高并发的读写块

posted @ 2009-11-17 14:43 gdufo| 编辑 收藏

学习动态性能表 第13篇--V$OPEN_CURSOR 2007.6.8

 

本视图列出session打开的所有cursors,很多时候都将被用到,比如:你可以通过它查看各个session打开的cursor数。

 

  当诊断系统资源占用时,它常被用于联接v$sqlareav$sql查询出特定SQL(高逻辑或物理I/O)。然后,下一步就是找出源头。在应用环境,基本都是同一类用户登陆到数据库(V$SQLAREA中拥有相同的PARSING_USER_ID),而通过这个就可以找出它们的不同。V$SQLAREA中的统计项在语句完全执行后被更新(并且从V$SESSION.SQL_HASH_VALUE中消失)。因此,你不能直接找到session除非语句被再次执行。不过如果sessioncursor仍然打开着,你可以通过v$open_cursor找出执行这个语句的session

 

V$OPEN_CURSOR中的连接列

 

Column                              View                                                 Joined Column(s)

-----------------------------             ----------------------------------------             -----------------------------

HASH_VALUE, ADDRESS           V$SQLAREA, V$SQL, V$SQLTEXT             HASH_VALUE, ADDRESS

SID                                                 V$SESSION                                                      SID

 

示例:

1.找出执行某语句的session

SELECT hash_value, buffer_gets, disk_reads

FROM V$SQLAREA

WHERE disk_reads > 1000000

ORDER BY buffer_gets DESC;

 

HASH_VALUE BUFFER_GETS DISK_READS

---------- ----------- ----------

1514306888   177649108    3897402

 478652562    63168944    2532721

 360282550    14158750    2482065

 

3 rows selected.

SQL> SELECT sid FROM V$SESSION WHERE sql_hash_value = 1514306888 ;

no rows selected

--直接通过hash_value查找v$session,没有记录

 

SQL> SELECT sid FROM V$OPEN_CURSOR WHERE hash_Value = 1514306888 ;

 

  SID

-----

 1125

  233

  935

 1693

  531

 

5 rows selected.

--通过hash_valuev$open_cursor中查找sid(只有在sessioncursor仍然打开的情况下才有可能找到)

 

2.列出拥有超过400cursorsessionID

SQL> SELECT sid, count(0) ct FROM v$open_cursor

GROUP BY sid HAVING COUNT(0) > 400 ORDER BY ct desc;

 

事实上,v$open_cursor是一个相当常用的视图,特别是web开发应用的时候。仅通过它一个视图你就能分析出当前的连接情况,主要执行语句等。

posted @ 2009-11-17 14:37 gdufo| 编辑 收藏

学习动态性能表第14篇--V$PARAMETER&V$SYSTEM_PARAMETER 2007.6.11

 

 这两个视图列出的各参数项名称以及参数值。V$PARAMETER显示执行查询的session的参数值。V$SYSTEM_PARAMETER视图则列出实例的参数值。

 

例如,下列查询显示执行查询的sessionSORT_AREA_SIZE参数值:

SELECT value

  FROM V$PARAMETER

 WHERE name = 'sort_area_size';

呵呵,可能有朋友还是不明白v$parameterv$system_parameter的区别,我再举个例子,相信你马上就明白了。

SQL>select value from v$parameter where name = 'global_names';

 

VALUE

------------------------------------------------------------------------------------------------

TRUE

 

1 row selected.

 

SQL> alter session set global_names = false;

 

Session altered.

 

SQL> select value from v$parameter where name = 'global_names';

 

VALUE

------------------------------------------------------------------------------------------------

FALSE

 

1 row selected.

 

SQL> select value from v$system_parameter where name = 'global_names';

 

VALUE

------------------------------------------------------------------------------------------------

TRUE

 

1 row selected.

 

 

V$PARAMETER中的常用列:

l         NAME:参名

l         VALUE:参值(session或实例)

l         ISDEFAULT:参值是否默认值

l         ISSES_MODIFIABLE:此参数是否session级可修改

l         ISSYS_MODIFIABLE:此参数在实例启动后是否可由实例修改

l         ISMODIFIED:自实例启动起,参值是否被修改,如果被修改,session级或是实例(系统)级修改(如果执行一条alter session,则值将被MODIFIED,如果执行的是alter system,则值为SYS_MODIFIED)

l         ISADJUSTED

l         DESCRIPTION:参数简要描述

l         UPDATE_COMMENT:由dba提供的参数说明

 

使用v$parameter以及v$system_parameter数据:

 

  在调优期间通过查询v$parameter以确认当前参数设置。例如,如果buffer cache hit ratio较低,那么通过查询DB_BLOCK_BUFFERS(DB_CACHE_SIZE)可以明确当前的buffer cache大小。

 

SELECT name, value, isdefault, isses_modifiable, issys_modifiable, ismodified

  FROM V$PARAMETER

 WHERE name = 'sort_area_size';

 

NAME                 VALUE      ISDEF ISSES ISSYS_MOD ISMODIFIED

-------------------- ---------- ----- ----- --------- ----------

sort_area_size       1048576    TRUE  TRUE  DEFERRED  MODIFIED

 

 

前例显示了SORT_AREA_SIZE初始参数在实例启动时并非初始值,不过被session修改回了初始值。

注意:当查询v$parameter时要注意,如果你想查看实例参数,要查询v$system_parameter

 

posted @ 2009-11-17 14:37 gdufo| 编辑 收藏

学习动态性能表 第十一篇-(1)-V$LATCH 2007.6.7

 

Oracle Rdbms应用了各种不同类型的锁定机制,latch即是其中的一种。Latch是用于保护SGA区中共享数据结构的一种串行化锁定机制。Latch的实现是与操作系统相关的,尤其和一个进程是否需要等待一个latch、需要等待多长时间有关。Latch是一种能够极快地被获取和释放的锁,它通常用于保护描述buffer cacheblock的数据结构。与每个latch相联系的还有一个清除过程,当持有latch的进程成为死进程时,该清除过程就会被调用。Latch还具有相关级别,用于防止死锁,一旦一个进程在某个级别上得到一个latch,它就不可能再获得等同或低于该级别的latch

 

  本视图保存自实例启动各类栓锁的统计信息。常用于当v$session_wait中发现栓锁竞争时鉴别SGA区中问题所在区域。

 

  v$latch表的每一行包括了对不同类型latch的统计,每一列反映了不同类型的latch请求的活动情况。不同类型的latch请求之间的区别在于,当latch不可立即获得时,请求进程是否继续进行。按此分类,latch请求的类型可分为两类:willing-to-waitimmediate

 

l         Willing-to-wait:是指如果所请求的latch不能立即得到,请求进程将等待一很短的时间后再次发出请求。进程一直重复此过程直到得到latch

l         Immediate:是指如果所请求的latch不能立即得到,请求进程就不再等待,而是继续执行下去。

 

V$LATCH中的常用列:

l         NAMElatch名称

l         IMMEDIATE_GETS:以Immediate模式latch请求数

l         IMMEDIATE_MISSES:请求失败数

l         GETS:以Willing to wait请求模式latch的请求数

l         MISSES:初次尝试请求不成功次数

l         SPIN_GETS:第一次尝试失败,但在以后的轮次中成功

l         SLEEP[x]:成功获取前sleeping次数

l         WAIT_TIME:花费在等待latch的时间

 

V$LATCH中的连接列

Column                              View                                          Joined Column(s)

---------------------                ------------------------------                   ------------------------

NAME/LATCH#                   V$LATCH_CHILDREN         NAME/LATCH#

NAME                                V$LATCHHOLDER                     NAME

NAME/LATCH#                  V$LATCHNAME                         NAME/LATCH#

NAME                                V$LATCH_MISSES                     PARENT_NAME

 

示例:
下列的示例中,创建一个表存储查询自v$latch的数据:

CREATE TABLE snap_latch as SELECT 0 snap_id, sysdate snap_date, a.* FROM V$LATCH a;

ALTER TABLE snap_latch add  (constraint snap_filestat primary key (snap_id, name));

 

最初,snap_id被置为0,稍后,snap_latch表的snap_id列被更新为1

INSERT INTO snap_latch SELECT 1, sysdate, a.* FROM V$LATCH a;

注意你通过sql语句插入记录时必须增加snap_id的值。

 

在你连续插入记录之后,使用下列的select语句列出统计。注意0不能成为被除数。

 

SELECT SUBSTR(a.name,1,20) NAME, (a.gets-b.gets)/1000 "Gets(K)",

       (a.gets-b.gets)/(86400*(a.snap_date-b.snap_date)) "Get/s",

       DECODE ((a.gets-b.gets), 0, 0, (100*(a.misses-b.misses)/(a.gets-b.gets))) MISS,

       DECODE ((a.misses-b.misses), 0, 0,

              (100*(a.spin_gets-b.spin_gets)/(a.misses-b.misses))) SPIN,

       (a.immediate_gets-b.immediate_gets)/1000 "Iget(K)",

       (a.immediate_gets-b.immediate_gets)/ (86400*(a.snap_date-b.snap_date)) "IGet/s",

       DECODE ((a.immediate_gets-b.immediate_gets), 0, 0,

       (100*(a.immediate_misses-b.immediate_misses)/ (a.immediate_gets-b.immediate_gets)))

 

IMISS

  FROM snap_latch a, snap_latch b

 WHERE a.name = b.name

   AND a.snap_id = b.snap_id + 1

   AND ( (a.misses-b.misses) > 0.001*(a.gets-b.gets)

       or (a.immediate_misses-b.immediate_misses) >

       0.001*(a.immediate_gets-b.immediate_gets))

ORDER BY 2 DESC;

 

下例列出latch统计项,miss列小于0.1%的记录已经被过滤。

NAME                Gets(K)   Get/s  MISS   SPIN IGets(K)  IGet/s IMISS

------------------ -------- ------- ----- ------ -------- ------- -----

cache buffers chai  255,272  69,938   0.4   99.9    3,902   1,069   0.0

library cache       229,405  62,851   9.1   96.9   51,653  14,151   3.7

shared pool          24,206   6,632  14.1   72.1        0       0   0.0

latch wait list       1,828     501   0.4   99.9    1,836     503   0.5

row cache objects     1,703     467   0.7   98.9    1,509     413   0.2

redo allocation         984     270   0.2   99.7        0       0   0.0

messages                116      32   0.2  100.0        0       0   0.0

cache buffers lru        91      25   0.3   99.0    7,214   1,976   0.3

modify parameter v        2       0   0.1  100.0        0       0   0.0

redo copy                 0       0  92.3   99.3    1,460     400   0.0

 

什么时候需要检查latch统计呢?看下列项:

 

l         misses/gets的比率是多少

l         获自spinningmisses的百分比是多少

l         latch请求了多少次

l         latch休眠了多少次

 

  Redo copy latch看起来有很高的的失误率,高达92.3%。不过,我们再仔细看的话,Redo copy latches是获自immediate模式。immediate模式的数值看起来还不错,并且immediate模式只有个别数大于willing to wait模式。所以Redo copy latch其实并不存在竞争。不过,看起来shared poollibrary cache latches可能存在竞争。考虑执行一条查询检查latchessleeps以确认是否确实存在问题。

 

    latch40余种,但作为DBA关心的主要应有以下几种:

l         Cache buffers chains latch:当用户进程搜索SGA寻找database cache buffers时需要使用此latch

l         Cache buffers LRU chain latch:当用户进程要搜索buffer cache中包括所有 dirty blocksLRU (least recently used) 链时使用该种latch

l         Redo log buffer latch:这种latch控制redo log buffer中每条redo entries的空间分配。

l         Row cache objects latch:当用户进程访问缓存的数据字典数值时,将使用Row cache objects latch

 

Latches调优

 

不要调整latches。如果你发现latch存在竞争,它可能是部分SGA资源使用反常的征兆。要修正问题所在,你更多的是去检查那部分SGA资源使用的竞争情况。仅仅从v$latch是无法定位问题所在的。

 

关于latches的更多信息可以浏览Oracle Database Concepts

 

 

 

第十一篇-(2)-V$LATCH_CHILDREN  2007.6.6

 

  数据库中有些类别的latches拥有多个。V$LATCH中提供了每个类别的总计信息。如果想看到单个latch,你可以通过查询本视图。

 

例如:

select name,count(*) ct from v$Latch_children group by name order by ct desc;

 

v$latch相比,除多child#列外,其余列与之同,不详述~~

posted @ 2009-11-17 14:36 gdufo| 编辑 收藏

学习动态性能表 第12篇--V$DB_OBJECT_CACHE 2007.6.4

 

本视图提供对象在library cache(shared pool)中对象统计,提供比v$librarycache更多的细节,并且常用于找出shared pool中的活动对象。

 

v$db_object_cache中的常用列:

l         OWNER:对象拥有者

l         NAME:对象名称

l         TYPE:对象类型(如,sequence,procedure,function,package,package body,trigger)

l         KEPT:告知是否对象常驻shared pool(yes/no),有赖于这个对象是否已经利用PL/SQL 过程DBMS_SHARED_POOL.KEEP“保持(永久固定在内存中)

l         SHARABLE_MEM:共享内存占用

l         PINS:当前执行对象的session

l         LOCKS:当前锁定对象的session

 

瞬间状态列:

下列列保持对象自初次加载起的统计信息:

l         LOADS:对象被加载次数。

 

示例:

1.shared pool执行以及内存使用总计

下列查询显示出shared pool内存对不同类别的对象

同时也显示是否有对象通过DBMS_SHARED_POOL.KEEP()过程常驻shared pool

SELECT type, kept, COUNT(*), SUM(sharable_mem)

  FROM V$DB_OBJECT_CACHE

 GROUP BY type, kept;

 

2.通过载入次数找出对象

SELECT owner, name sharable_mem, kept, loads

  FROM V$DB_OBJECT_CACHE

 WHERE loads > 1 ORDER BY loads DESC;

 

3.找出使用的内存超过10M并且不在常驻内存的对象。

SELECT owner, name, sharable_mem, kept

  FROM V$DB_OBJECT_CACHE

 WHERE sharable_mem > 102400 AND kept = 'NO'

 ORDER BY sharable_mem DESC;

posted @ 2009-11-17 14:36 gdufo| 编辑 收藏

学习动态性能表 第九篇--V$FILESTAT 2007.6.5

 

本视图记录各文件物理I/O信息。如果瓶颈与I/O相关,可用于分析发生的活动I/O事件。V$FILESTAT显示出数据库I/O的下列信息(不包括日志文件)

 

l         物理读写数

l         块读写数

l         I/O读写总耗时

 

  以上数值自实例启动即开始记录。如果获取了两个快照,那么二者之间的差异即是这一时间段内活动I/O统计。

 

V$FILESTAT中的常用列:

 

l         FILE#:文件序号;

l         PHYRDS:已完成的物理读次数;

l         PHYBLKRD:块读取数;

l         PHYWRTSDBWR完成的物理写次数;

l         PHYBLKWRT:写入磁盘的块数;

 

V$FILESTAT注意项:

 

l         因为multiblock读调用,物理读数和数据块读数有可能不同;

l         因为进程直写,物理写和数据块写也可能不一致;

l         Sum(physical blocks read) 近似于v$sysstat中的physical reads

l         Sum(physical blocks written) 近似于v$sysstat中的physical writes

l         数据读(由缓存读比直读好)由服务进程处理。从buffer cache写只能由DBWR进行,直写由服务进程处理。

 

V$FILESTAT中的连接列

Column                              View                                          Joined Column(s)

-----------                                   -------------------------                  -------------------------

FILE#                                 DBA_DATA_FILES                     FILE_ID

FILE#                                 V$DATAFILE                             FILE#

 

示例:

1.获得数据文件物理读写和数据块读写信息:

select df.tablespace_name name,

       df.file_name       "file",

       f.phyrds           pyr,

       f.phyblkrd         pbr,

       f.phywrts          pyw,

       f.phyblkwrt        pbw

  from v$filestat f, dba_data_files df where f.file# = df.file_id

 order by df.tablespace_name;

注意:尽管oracle记录的读写次数非常精确,但如果数据库运行在Unix文件系统(UFS)有可能不能表现真实的磁盘读写,例如,读次数可能并非真实的磁盘读,而是UFS缓存。不过裸设备的读写次数应该是比较精准的。

posted @ 2009-11-17 14:34 gdufo| 编辑 收藏

学习动态性能表 第十篇--V$SESSION_LONGOPS 2007.6.7

 

本视图显示运行超过6秒的操作的状态。包括备份,恢复,统计信息收集,查询等等。

 

要监控查询执行进展状况,你必须使用cost-based优化方式,并且:

l         设置TIMED_STATISTICSSQL_TRACE参数值为true

l         通过ANALYZEDBMS_STATS数据包收集对象统计信息。

 

你可以通过DBMS_APPLICATION_INFO.SET_SESSION_LONGOPS过程添加application-specific长运行操作信息到本视图。关于DBMS_APPLICATION_INFO.SET_SESSION_LONGOPS的更多信息可以浏览:Oracle Supplied PL/SQL Packages and Types Reference

 

V$SESSION_LONGOPS列说明

 

l         SIDSession标识

l         SERIAL#Session串号

l         OPNAME:操作简要说明

l         TARGET:操作运行所在的对象

l         TARGET_DESC:目标对象说明

l         SOFAR:至今为止完成的工作量

l         TOTALWORK:总工作量

l         UNITS:工作量单位

l         START_TIME:操作开始时间

l         LAST_UPDATE_TIME:统计项最后更新时间

l         TIME_REMAINING:预计完成操作的剩余时间()

l         ELAPSED_SECONDS:从操作开始总花费时间()

l         CONTEXT:前后关系

l         MESSAGE:统计项的完整描述

l         USERNAME:执行操作的用户ID

l         SQL_ADDRESS:用于连接查询的列

l         SQL_HASH_VALUE:用于连接查询的列

l         QCSID

 

示例:

找一较大表,确认该表查询将超过6秒,哎呀让它快咱没把握,让它慢这可是我的强项啊~~

SQL> set timing on

SQL> create table ttt as select level lv,rownum rn from dual connect by level<10000000;   --创建一个临时表

Table created

Executed in 19.5 seconds

SQL> commit;

Commit complete

Executed in 0 seconds

SQL> select * from (select * from ttt order by lv desc) where rownum<2;    --执行一个费时的查询

 

        LV         RN

---------- ----------

   9999999    9999999

Executed in 9.766 seconds   --哈哈,成功超过6

SQL> select sid,opname,sofar,totalwork,units,sql_hash_value from v$session_longops;      ----看看v$session_longops中是不是已经有记录了

 

       SID OPNAME                                                                SOFAR  TOTALWORK UNITS                            SQL_HASH_VALUE

---------- ---------------------------------------------------------------- ---------- ---------- -------------------------------- --------------

        10 Table Scan                                                            47276      47276 Blocks                               2583310173

Executed in 0.047 seconds

 

SQL> select a.sql_text from v$sqlarea a,v$session_longops b where a.HASH_VALUE=b.SQL_HASH_VALUE;   --通过hash_value联系查询出刚执行的查询语句。

 

SQL_TEXT

--------------------------------------------------------------------------------

 select * from (select * from ttt order by lv desc) where rownum<2

Executed in 0.063 seconds

 

posted @ 2009-11-17 14:34 gdufo| 编辑 收藏

学习动态性能表 第八篇-(1)-V$LOCK 2007.5.31

     摘要:   这个视图列出Oracle 服务器当前拥有的锁以及未完成的锁或栓锁请求。如果你觉着session在等待等待事件队列那你应该检查本视图。如果你发现session在等待一个锁。那么按如下先后顺序: 1.         使用V$LOCK找出session持有的锁。 2.   ...  阅读全文

posted @ 2009-11-17 14:33 gdufo| 编辑 收藏

仅列出标题
共19页: First 上一页 7 8 9 10 11 12 13 14 15 下一页 Last 

导航

统计

常用链接

留言簿(6)

随笔分类

随笔档案

文章分类

文章档案

收藏夹

Hibernate

友情链接

搜索

最新评论

阅读排行榜

评论排行榜