前言:
现在大家对“oracle系统表空间过高会影响查询吗”大致比较讲究,兄弟们都需要学习一些“oracle系统表空间过高会影响查询吗”的相关内容。那么小编在网络上汇集了一些有关“oracle系统表空间过高会影响查询吗””的相关知识,希望朋友们能喜欢,小伙伴们快快来学习一下吧!概述
Oracle DB性能检查有即时观察和长期观察两种方式,即时观察是利用各种SQL查询数据库在当前时间的各个性能指标;长期观察是看各个时期的AWR报告。里面有各种性能指标,按执行时间或资源排列的SQL,各种等待时间的排名。从这里面可以掌握数据库的长期的性能变化。
今天主要讲解即时观察的方式。
1、获取数据库等待事件
select sid, event, p1, p2, p3, WAIT_TIME, SECONDS_IN_WAITfrom v$session_waitwhere event not like 'SQL%'and event not like 'rdbms%';
解析:
如果数据库长时间持续出现大量像latch free,enqueue,buffer busy waits,db file sequential read,db file scattered read等待事件时,需要对其进行分析,可能存在问题的语句。
2、获取磁盘读最高的五条SQL
SELECT SQL_TEXTFROM (SELECT * FROM V$SQLAREA ORDER BY DISK_READS)WHERE ROWNUM <= 5;
3、获取前十条性能差的SQL
SELECT *FROM (SELECT PARSING_USER_ID EXECUTIONS,SORTS,COMMAND_TYPE,DISK_READS, SQL_TEXTFROM V$SQLAREAORDER BY DISK_READS DESC)WHERE ROWNUM < 10;
4、获取等待时间最多的5个系统事件
SELECT * FROM (SELECT * FROM V$SYSTEM_EVENT WHERE EVENT NOT LIKE 'SQL%' ORDER BY TOTAL_WAITS DESC) WHERE ROWNUM <= 5;
5、获取运行很久的SQL
SELECT USERNAME, SID, OPNAME, ROUND(SOFAR * 100 / TOTALWORK, 0) || '%' AS PROGRESS, TIME_REMAINING, SQL_TEXT FROM V$SESSION_LONGOPS, V$SQL WHERE TIME_REMAINING <> 0 AND SQL_ADDRESS = ADDRESS AND SQL_HASH_VALUE = HASH_VALUE;
6、获取消耗CPU最高的进程
SELECT P.PID PID, S.SID SID, P.SPID SPID, S.USERNAME USERNAME, S.OSUSER OSNAME, P.SERIAL# S_#, P.TERMINAL, P.PROGRAM PROGRAM, P.BACKGROUND, S.STATUS, RTRIM(SUBSTR(A.SQL_TEXT, 1, 80)) SQLFROM V$PROCESS P, V$SESSION S, V$SQLAREA A WHERE P.ADDR = S.PADDR AND S.SQL_ADDRESS = A.ADDRESS(+) AND P.SPID LIKE '%&1%';
7、获取碎片程度高的表
SELECT segment_name table_name, COUNT(*) extentsFROM dba_segmentsWHERE owner NOT IN ('SYS', 'SYSTEM')GROUP BY segment_nameHAVING COUNT(*) = (SELECT MAX(COUNT(*)) FROM dba_segments GROUP BY segment_name);
8、获取表空间的I/O比例
SELECT DF.TABLESPACE_NAME NAME, DF.FILE_NAME "FILE", F.PHYRDS PYR, F.PHYBLKRD PBR, F.PHYWRTS PYW, F.PHYBLKWRT PBWFROM V$FILESTAT F, DBA_DATA_FILES DFWHERE F.FILE# = DF.FILE_IDORDER BY DF.TABLESPACE_NAME;
9、获取文件系统的I/O比例
SELECT SUBSTR(A.FILE#, 1, 2) "#", SUBSTR(A.NAME, 1, 30) "NAME", A.STATUS, A.BYTES, B.PHYRDS, B.PHYWRTSFROM V$DATAFILE A, V$FILESTAT BWHERE A.FILE# = B.FILE#;
10、查询目前锁对象信息:
select sid, serial#, username, SCHEMANAME, osuser, MACHINE, terminal, PROGRAM, owner, object_name, object_type, o.object_id from dba_objects o, v$locked_object l, v$session s where o.object_id = l.object_id and s.sid = l.session_id;
11、查询僵死进程
select spid from v$process where addr not in (select paddr from v$session);
12、统计缓冲区命中率
SELECT a.VALUE + b.VALUE logical_reads, c.VALUE phys_reads, round(100 * (1 - c.value / (a.value + b.value)), 4) hit_ratioFROM v$sysstat a, v$sysstat b, v$sysstat cWHERE a.NAME = 'db block gets' AND b.NAME = 'consistent gets' AND c.NAME = 'physical reads';
解析:
如果命中率低于90%则需加大数据库参数db_cache_size。
13、统计共享池命中率
select sum(pinhits) / sum(pins) * 100 from v$librarycache;
解析:
如低于95%,则需要调整应用程序使用绑定变量,或者调整数据库参数shared pool的大小。
14、检查排序区
select name, valuefrom v$sysstatwhere name like '%sort%';
解析:
如果disk/(memoty+row)的比例过高,则需要调整sort_area_size(workarea_size_policy=false)或pga_aggregate_target(workarea_size_policy=true)。
15、检查日志缓冲区
select name, valuefrom v$sysstatwhere name in ('redo entries','redo buffer allocation retries');
解析:
如果redo buffer allocation retries/redo entries超过1%,则需要增大log_buffer。
喜欢的可以点关注,我将分享更多的Oracle实战项目经验,谢谢。
标签: #oracle系统表空间过高会影响查询吗