如何查看oracle性能 oracle性能测试

九大Oracle性能优化基本方法详解 Oracle性能优化基本方法包括一下几个步骤 包括
)设立合理如何查看oracle性能的Oracle性能优化目标
)测量并记录当前如何查看oracle性能的Oracle性能
)确定当前Oracle性能瓶颈(Oracle等待什么 哪些SQL语句是该等待事件如何查看oracle性能的成分)
)把等待事件记入跟踪文件
)确定当前的OS瓶颈
)优化所需的成分(应用程序 数据库 I/O 争用 OS等)
)跟踪并实施更改控制过程
)测量并记录当前性能
)重复步骤 到 直到满足优化目标
下面来一一详述
设立合理的Oracle性能优化目标
重点 关于设立目标的最重要的一点是它们必须是可量化和可达到的
方法 目标必须是当前性能和所需性能的的陈述形式的语句
测量并记录当前Oracle性能重点
)需要在峰值活动时间获得当前系统性能快照
)关键是要在出现性能问题的时间段内采集信息
)必须在合理的时间段上采集 一般在峰值期间照几个为期 分钟的快照
确定当前Oracle性能瓶颈重点 从Oracle 等待接口v$system_event v$session_event和v$session_wait中获得等待事件 进而找出影响性能的对象和sql语句 方法如下
)首先 利用v$system_event视图执行下面的查询查看数据库中某些常见的等待事件
select * from v$system_event
where event in ( buffer busy waits
db file sequential read
db file scattered read
enqueue
free buffer waits
latch free
log file parallel write
log file sync );
)接着 利用下面对v$session_event和v$session视图进行的查询 研究具有对上面显示的内容有贡献的等待事件的会话
select se sid s username se event se total_waits se time_waited se average_wait
from v$session s v$session_event se
where s sid = se sid
and se event not like SQL*Net%
and s status = ACTIVE
and s username is not null;
)使用下面查询找到与所连接的会话有关的当前等待事件 这些信息是动态的 为如何查看oracle性能了查看一个会话的等待最多的事件是什么 需要多次执行此查询
select sw sid s username sw event sw wait_time sw state sw seconds_in_wait SEC_IN_WAIT
from v$session s v$session_wait sw
where s sid = sw sid
and sw event not like SQL*Net%
and s username is not null
order by sw wait_time desc;
)查询会话等待事件的详细信息
select sid event p text p p text p p text p
from v$session_wait
where sid beeenand
and event not like %SQL%
and event not like %rdbms% ;
)利用P P 的信息 找出等待事件的相关的段
select owner segment_name segment_type tablespace_name
from dba_extents
where file_id = fileid_in
and blockid_in beeen block_id and block_idblocks ;
)获得操作该段的sql语句
select sid getsqltxt(sql_hash_value sql_address)
from v$session
where sid = sid_in;
)getsqltxt函数
)至此已经找到影响性能的对象和sql语句 可以有针对性地优化
把等待事件记入跟踪文件
重点 如果在跟踪系统上的等待事件时 由于某种原因遇到如何查看oracle性能了麻烦 则可以将这些等待事件记入一个跟踪文件 方法如下
)对于当前会话
alter session set timed_statistics=true;
alter session set max_dump_file_size=unlimited;
alter session set events trace name context forever level ;
)执行应用程序 然后在USER_DUMP_DEST指出的目录中找到跟踪文件
)查看文件中以词WAIT开始的所有行
)对于其它的会话
)确定会话的进程ID(SPID) 下面的查询识别出名称以A开始的所有用户的会话进程ID
select S Username P Spid from V$SESSION S V$PROCESS P
where S PADDR = P ADDR and S Username like A% ;
)以sysdba进入sqlplus执行
alter session set timed_statistics=true;
alter session set max_dump_file_size=unlimited;
oradebug setospid
oradebug unlimit
oradebug event trace name context forever level X /* Where X = ( ) */
)跟踪某个时间间隔得会话应用程序
)在USER_DUMP_DEST 的值指出的目录中利用SPID查看跟踪文件
)查看文件中以词WAIT开始的所有行
确定当前OS瓶颈 )Windows NT上的监控
使用控制面板 〉管理工具 〉性能即可
)UNIX上的监控
使用通用性的工具 包括sar iostat cpustat mpstat netstat top osview等
.Oracle性能优化所需的成分(应用程序 数据库 I/O 争用 OS等)
.跟踪并实施更改控制过程
.测量并记录当前Oracle性能
lishixinzhi/Article/program/Oracle/201311/18709
如何检查oracle数据库性能这种问题要回答好要求知识比较全面 。
1 从操作系统层次上看
看CPU内存swqp(交换分区)等使用率
2从磁盘上看
主要看磁盘读写 。可以用dd测磁盘读写的速度 也可以在业务高峰期检测磁盘的速率 。
3 从数据库本身来看 。
先要看数据库各个参数的值。如sga的大小,process的大小,redo日志的个数与大小等这些关系到性能的参数是否设置合理 。
长期观察的方式就是看各个时期的AWR报告 。里面有各种性能指标,以及按执行时间或资源排列的sql ,以及各种等待时间的排名 。从这里面可以掌握数据库的长期的性能变化 。
即时观察的方式就是利用各种sql 查询 数据库在当前时间的各个性能指标(AWR报告里面的各种指标也都是通过sql查询出来的)
还有对数据库整体的一个检查:
如 表的大?。硎欠裥枰智挥蟹智?索引是否创建,索引是否失效,开发人员写的sql是否正确使用到了索引 , 频繁使用的sql是否有绑定变量 , 有频繁大批量增删改的表是否存在高水位 。。。
额总之,这个话题涉及的知识非常多,尽可能多的学习一些东西,祝你好运 。
oracle性能检测sql语句监控事例如何查看oracle性能的等待
select event sum(decode(wait_Time )) Prev
sum(decode(wait_Time )) Curr count(*) Tot
from v$session_Wait
group by event order by ;
回滚段如何查看oracle性能的争用情况
select name waits gets waits/gets Ratio
from v$rollstat a v$rollname b
where a usn = b usn;
监控表空间如何查看oracle性能的 I/O 比例
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性能的 I/O 比例
select substr(a file# ) # substr(a name ) Name
a status a bytes b phyrds b phywrts
from v$datafile a v$filestat b
where a file# = b file#;
在某个用户下找所有的索引
select user_indexes table_name user_indexes index_name uniqueness column_name
from user_ind_columns user_indexes
where user_ind_columns index_name = user_indexes index_name
【如何查看oracle性能 oracle性能测试】 and user_ind_columns table_name = user_indexes table_name
order by user_indexes table_type user_indexes table_name
user_indexes index_name column_position;
监控 SGA 的命中率
select a valueb value logical_reads c value phys_reads
round( * ((a value b value) c value) / (a value b value)) BUFFER HIT RATIO
from v$sysstat a v$sysstat b v$sysstat c
where a statistic# = and b statistic# =
and c statistic# = ;
监控 SGA 中字典缓冲区的命中率
select parameter gets Getmisses getmisses/(gets getmisses)* miss ratio
( (sum(getmisses)/ (sum(gets) sum(getmisses))))* Hit ratio
from v$rowcache
where gets getmisses
group by parameter gets getmisses;
监控 SGA *** 享缓存区的命中率 应该小于 %
select sum(pins) Total Pins sum(reloads) Total Reloads
sum(reloads)/sum(pins) * libcache
from v$librarycache;
select sum(pinhits reloads)/sum(pins) hit radio sum(reloads)/sum(pins) reload percent
from v$librarycache;
显示所有数据库对象的类别和大小
select count(name) num_instances type sum(source_size) source_size
sum(parsed_size) parsed_size sum(code_size) code_size sum(error_size) error_size
sum(source_size)sum(parsed_size)sum(code_size)sum(error_size) size_required
from dba_object_size
group by type order by ;
监控 SGA 中重做日志缓存区的命中率 应该小于 %
SELECT name gets misses immediate_gets immediate_misses
Decode(gets misses/gets* ) ratio
Decode(immediate_gets immediate_misses
immediate_misses/(immediate_gets immediate_misses)* ) ratio
FROM v$latch WHERE name IN ( redo allocation redo copy );
监控内存和硬盘的排序比率 最好使它小于 增加 sort_area_size
SELECT name value FROM v$sysstat WHERE name IN ( sorts (memory) sorts (disk) );
监控当前数据库谁在运行什么SQL语句
SELECT osuser username sql_text from v$session a v$sqltext b
where a sql_address =b address order by address piece;
监控字典缓冲区
SELECT (SUM(PINS RELOADS)) / SUM(PINS) LIB CACHE FROM V$LIBRARYCACHE;
SELECT (SUM(GETS GETMISSES USAGE FIXED)) / SUM(GETS) ROW CACHE FROM V$ROWCACHE;
SELECT SUM(PINS) EXECUTIONS SUM(RELOADS) CACHE MISSES WHILE EXECUTING FROM V$LIBRARYCACHE;
后者除以前者 此比率小于 % 接近 %为好
SELECT SUM(GETS) DICTIONARY GETS SUM(GETMISSES) DICTIONARY CACHE GET MISSES
FROM V$ROWCACHE
找ORACLE字符集
select * from sys props$ where name= NLS_CHARACTERSET ;
监控 MTS
select busy/(busy idle) shared servers busy from v$dispatcher;
此值大于 时 参数需加大
select sum(wait)/sum(totalq) dispatcher waits from v$queue where type= dispatcher ;
select count(*) from v$dispatcher;
select servers_highwater from v$mts;
servers_highwater接近mts_max_servers时 参数需加大
碎片程度
select tablespace_name count(tablespace_name) from dba_free_space group by tablespace_name
having count(tablespace_name) ;
alter tablespace name coalesce;
alter table name deallocate unused;
create or replace view ts_blocks_v as
select tablespace_name block_id bytes blocks free space segment_name from dba_free_space
union all
select tablespace_name block_id bytes blocks segment_name from dba_extents;
select * from ts_blocks_v;
select tablespace_name sum(bytes) max(bytes) count(block_id) from dba_free_space
group by tablespace_name;
查看碎片程度高的表
SELECT segment_name table_name COUNT(*) extents
FROM dba_segments WHERE owner NOT IN ( SYS SYSTEM ) GROUP BY segment_name
HAVING COUNT(*) = (SELECT MAX( COUNT(*) ) FROM dba_segments GROUP BY segment_name);
表 索引的存储情况检查
select segment_name sum(bytes) count(*) ext_quan from dba_extents where
tablespace_name= tablespace_name and segment_type= TABLE group by tablespace_name segment_name;
select segment_name count(*) from dba_extents where segment_type= INDEX and owner= owner
group by segment_name;
找使用CPU多的用户session
是cpu used by this session
select a sid spid status substr(a program ) prog a terminal osuser value/ / value
from v$session a v$process b v$sesstat c
where c statistic#= and c sid=a sid and a paddr=b addr order by value desc;
lishixinzhi/Article/program/Oracle/201311/17800
如何查询oracle 数据库性能,sql资源占用作为一个开发/测试人员,或多或少都得和数据库打交道 , 而对数据库的操作归根到底都是SQL语句 , 所有操作到最后都是操作数据,那么对sql性能的掌控又成了我们工作中一件非常重要的工作 。下面简单介绍下一些查看oracle性能的一些实用方法:
1、查询每台机器的连接数
select t.MACHINE,count(*) from v$session t group by t.MACHINE
这里所说的每台机器是指每个连接oracle数据库的服务器,每个服务器都有配置连接数据库的连接数 , 以websphere为例,在数据源中 , 每个数据源都有配置其最大/最小连接数 。
执行SQL后,可以看到每个服务器连接oracle数据库的连接数 , 若某个服务器的连接数非常大 , 或者已经达到其最大连接数,那么这台服务器上的应用可能有问题导致其连接不能正常释放 。
2、查询每个连接数的sql_text
v$session表里存在的连接不是一直都在执行操作,如果sql_hash_value为空或者0,则该连接是空闲的 , 可以查询哪些连接非空闲,web3 是机器名,就是WebSphere Application Server 的主机名 。
select t.sql_hash_value,t.*from v$session t where t.MACHINE='web3' and t.sql_hash_value!=0
这个SQL查询出来的结果不能看到具体的SQL语句 , 需要看具体SQL语句的执行下面的方法 。
3、查询每个活动的连接执行什么sql
select sid,username,sql_hash_value,b.sql_text
from v$session a,v$sqltext b
where a.sql_hash_value = https://www.04ip.com/post/b.HASH_VALUE and a.MACHINE='web3'
order by sid,username,sql_hash_value,b.piece
order by这句话的作用在于,sql_text每条记录不是保存一个完整的sql,需要以sql_hash_value为关键id,以piece排序,如图
Username是执行SQL的数据库用户名,一个sql_hash_value下的SQL_TEXT组合成一个完整的SQL语句 。这样就可以看到一个连接执行了哪些SQL 。
4、.从V$SQLAREA中查询最占用资源的查询
select b.username username,a.disk_reads reads, a.executions exec,
a.disk_reads/decode(a.executions,0,1,a.executions) rds_exec_ratio,
a.sql_text Statement
fromv$sqlarea a,dba_users b
where a.parsing_user_id=b.user_id
and a.disk_reads100000
order by a.disk_reads desc;
用buffer_gets列来替换disk_reads列可以得到占用最多内存的sql语句的相关信息 。
V$SQL是内存共享SQL区域中已经解析的SQL语句 。
该表在SQL性能查看操作中用的比较频繁的一张表,关于这个表的详细信息大家可以去 上学习,介绍得比较详细 。我这里主要就将该表的常用几个操作简单介绍一下:
1、列出使用频率最高的5个查询:
select sql_text,executions
from (select sql_text,executions,
rank() over
(order by executions desc) exec_rank
from v$sql)
where exec_rank =5;
该查询结果列出的是执行最频繁的5个SQL语句 。对于这种实用非常频繁的SQL语句 , 我们需要对其进行持续的优化以达到最佳执行性能 。
2、找出需要大量缓冲读?。呒粒┎僮鞯牟檠?
select buffer_gets,sql_text
from (select sql_text,buffer_gets,
dense_rank() over
(order by buffer_gets desc) buffer_gets_rank
from v$sql)
where buffer_gets_rank=5;
这种需要大量缓冲读?。呒粒┎僮鞯腟QL基本是大数据量且逻辑复杂的查询中会遇到,对于这样的大数据量查询SQL语句更加需要持续的关注,并进行优化 。
3、持续跟踪有性能影响的SQL 。
SELECT * FROM (
SELECT PARSING_USER_ID,EXECUTIONS,SORTS,
COMMAND_TYPE,DISK_READS,sql_text FROM v$sqlarea
ORDER BY disk_reads DESC
)
WHERE ROWNUM10
这个语句在SQL性能查看中用的比较多 , 可以明显的看出哪些SQL会影响到数据库性能 。
本文主要介绍了使用SQL查询方式查看oracle数据库SQL性能的部分常用方法 。此外还有许多工具也能实现SQL性能监控,大家可以在网上搜索相关知识进行学习 。
转载仅供参考 , 版权属于原作者
如何查询Oracle性能监控分类: Oracle
1.查看临时表空间使用情况
Select
f.tablespace_name
,sum(f.bytes_freef.bytes_used)
/1024/1024/1024 "total GB"
,sum((f.bytes_freef.bytes_used) - nvl(p.bytes_used, 0))
/1024/1024/1024 "Free GB"
,sum(nvl(p.bytes_used, 0))
/1024/1024/1024 "Used GB"
from sys.v_$temp_space_header f, dba_temp_files d, sys.v_$temp_extent_pool p
where f.tablespace_name( ) = d.tablespace_name
and f.file_id( ) = d.file_id
and p.file_id( ) = d.file_id
group by
f.tablespace_name
2.查看使用临时表空间的SQL
Select se.username,
se.sid,
su.extents,
su.blocks * to_number(rtrim(p.value)) as Space,
tablespace,
segtype,
sql_text
from v$sort_usage su, v$parameter p, v$session se, v$sql s
where p.name = 'db_block_size'
and su.session_addr = se.saddr
and s.hash_value = https://www.04ip.com/post/su.sqlhash
and s.address = su.sqladdr
order by se.username, se.sid
3.收缩临时表空间
alter tablespace temp shrink space;
alter tablespace temp shrink tempfile ''
4.重建索引
alter index PK_CROSSRELATION rebuild;
5.查看表空间使用情况
SELECT UPPER(F.TABLESPACE_NAME) "表空间名",
D.TOT_GROOTTE_MB "表空间大小(M)",
D.TOT_GROOTTE_MB - F.TOTAL_BYTES "已使用空间(M)",
TO_CHAR(ROUND((D.TOT_GROOTTE_MB - F.TOTAL_BYTES) / D.TOT_GROOTTE_MB * 100,2),'990.99') || '%' "使用比",
F.TOTAL_BYTES "空闲空间(M)",
F.MAX_BYTES "最大块(M)"
FROM (SELECT TABLESPACE_NAME,
ROUND(SUM(BYTES) / (1024 * 1024), 2) TOTAL_BYTES,
ROUND(MAX(BYTES) / (1024 * 1024), 2) MAX_BYTES
FROM SYS.DBA_FREE_SPACE
GROUP BY TABLESPACE_NAME) F,
(SELECT DD.TABLESPACE_NAME,
ROUND(SUM(DD.BYTES) / (1024 * 1024), 2) TOT_GROOTTE_MB
FROM SYS.DBA_DATA_FILES DD
GROUP BY DD.TABLESPACE_NAME) D
WHERE D.TABLESPACE_NAME = F.TABLESPACE_NAME
ORDER BY 1;
6.查询表空间的总容量
select tablespace_name, sum(bytes) / 1024 / 1024 as MB
from dba_data_files
group by tablespace_name;
7. 查询表空间使用率
select total.tablespace_name,
round(total.MB, 2) as Total_MB,考试大论坛
round(total.MB - free.MB, 2) as Used_MB,
round((1 - free.MB / total.MB) * 100, 2) || '%' as Used_Pct
from (select tablespace_name, sum(bytes) / 1024 / 1024 as MB
from dba_free_space
group by tablespace_name) free,
(select tablespace_name, sum(bytes) / 1024 / 1024 as MB
from dba_data_files
group by tablespace_name) total
where free.tablespace_name = total.tablespace_name;
8. 查找当前表级锁的SQL如下:
select sess.sid,
sess.serial#,
lo.oracle_username,
lo.os_user_name,
ao.object_name,
lo.locked_mode
from v$locked_object lo,
dba_objects ao,
v$session sess
where ao.object_id = lo.object_id and lo.session_id = sess.sid;
杀掉锁表进程:
alter system kill session '436,35123';
9.监控当前数据库谁在运行什么SQL语句
select osuser, username, sql_text
fromv$session a, v$sqltext b
wherea.sql_address =b.address order by address, piece;
10.找使用CPU多的用户session
select a.sid,spid,status,substr(a.program,1,40) prog, a.terminal,osuser,value/60/100 value
fromv$session a,v$process b,v$sesstat c
wherec.statistic#=12 and
c.sid=a.sid and
a.paddr=b.addr
order by value desc;
11.查看死锁信息
SELECT (SELECT username
FROM v$session
WHERE SID = a.SID) blocker, a.SID, 'is blocking',
(SELECT username
FROM v$session
WHERE SID = b.SID) blockee, b.SID
FROM v$lock a, v$lock b
WHERE a.BLOCK = 1 AND b.request0 AND a.id1 = b.id1 AND a.id2 = b.id2;
12.具有最高等待的对象
SELECTo.OWNER,o.object_name, o.object_type, a.event,
SUM (a.wait_timea.time_waited) total_wait_time
FROM v$active_session_history a, dba_objects o
WHERE a.sample_time BETWEEN SYSDATE - 30 / 2880 AND SYSDATE
AND a.current_obj# = o.object_id
GROUP BY o.OWNER,o.object_name, o.object_type, a.event
ORDER BY total_wait_time DESC;
13.查看具有最高等待的对象
SELECTa.session_id, s.osuser, s.machine, s.program, o.owner, o.object_name,
o.object_type, a.event,
SUM (a.wait_timea.time_waited) total_wait_time
FROM v$active_session_history a, dba_objects o, v$session s
WHERE a.sample_time BETWEEN SYSDATE - 30 / 2880 AND SYSDATE
AND a.current_obj# = o.object_id
AND a.session_id = s.SID
GROUP BY o.owner,
o.object_name,
o.object_type,
a.event,
a.session_id,
s.program,
s.machine,
s.osuser
ORDER BY total_wait_time DESC;
14.查看等待最多的SQL
SELECTa.program, a.session_id, a.user_id, d.username, s.sql_text,
SUM (a.wait_timea.time_waited) total_wait_time
FROM v$active_session_history a, v$sqlarea s, dba_users d
WHERE a.sample_time BETWEEN SYSDATE - 30 / 2880 AND SYSDATE
AND a.sql_id = s.sql_id
AND a.user_id = d.user_id
GROUP BY a.program, a.session_id, a.user_id, s.sql_text, d.username;
15.显示正在等待锁的所有会话
SELECT * FROM DBA_WAITERS;
oracle性能查询select rownum as rank, a.*
from (select PARSING_SCHEMA_NAME RUN_USER, --执行用户
SQL_FULLTEXT, --SQL文本,全如何查看oracle性能 , 带格式
sql_text, --SQL文本前面部分
elapsed_Time , --单位是微秒如何查看oracle性能,语句执行完如何查看oracle性能的总时间,包括CPU时间和等待时间
cpu_time , --CPU时间 , 语句运行如何查看oracle性能的时间
elapsed_Time - cpu_time wait_time,
trunc((elapsed_Time - cpu_time)*100/elapsed_Time,2) "wait_time_per%",--等待时间所占百分比
executions, --执行次数
elapsed_Time/(executions 1) Per_Time, --每次执行平均时间,
buffer_gets, --
disk_reads, --磁盘读
hash_value, --SQL的hash_value,以备获取完整SQL
USER_IO_WAIT_TIME,
SORTS --排序次数
from v$sqlarea t
where elapsed_time20000 and PARSING_SCHEMA_NAME'SYS'
order by elapsed_time desc) a
where rownum21
order by elapsed_time desc
关于如何查看oracle性能和oracle性能测试的介绍到此就结束了 , 不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站 。

    推荐阅读