深入理解Oracle Ash视图(oracle ash视图)
深入理解Oracle Ash视图
Oracle Active Session History (ASH) 视图是一种强大的工具,可以帮助数据库管理员和开发人员监视数据库的性能和活动。ASH是Oracle数据库自动收集的一组数据,包括每个活跃用户的活动、等待事件和资源使用情况,可以通过访问ASH视图来分析这些数据。
ASH视图提供了详细的实时性能数据,以便诊断和解决各种性能问题。ASH数据可以用于查找诸如死锁、长时间等待、数据库连接池过载等问题。在分析问题时,ASH数据还可以用于确定性能问题是由高CPU使用率还是由等待事件(例如IO、网络、锁等)造成的。
以下是ASH视图常用的查询:
1.查找活动用户:
SELECT DISTINCT s.username, s.sid, s.serial#, s.program
FROM v$active_session_history h, v$session s
WHERE h.session_id = s.sid
AND h.session_serial# = s.serial#
AND h.sample_time BETWEEN SYSDATE-1/24 AND SYSDATE
ORDER BY 1,2;
2.查找等待事件:
SELECT event||’-‘||wt_class AS event, COUNT(*) AS wts
FROM v$active_session_history
WHERE sample_time BETWEEN SYSDATE-1/24 AND SYSDATE
GROUP BY event,wt_class;
3.查找锁等待:
SELECT owner||’.’||OBJECT_NAME AS object_name, count(*) as wt_count
FROM v$session a, v$active_session_history b, dba_objects c
WHERE a.sid = b.session_id
AND a.last_call_et >= 60 and b.wt_class = ‘Application’
AND b.sample_id = c.data_object_id
GROUP BY a.username,c.owner,c.object_name
HAVING count(*) >=5
ORDER BY count(*) DESC;
以上查询只是ASH视图使用的冰山一角,ASH视图还包含许多其他的有用信息,例如等待类别、等待时间、事件计数等。而且,我们还可以使用ASH数据提供的详细信息来创建各种自定义报告和图表。
以下是一个基于Ash数据的简单演示,它可用于监视数据库中当前运行的用户和事务数量:
插入当前时间和会话信息:
INSERT INTO ash_demo
(sample_time, username, sid, serial#, program)
SELECT SYSDATE, s.username, s.sid, s.serial#, s.program
FROM v$session s
WHERE s.STATUS = ‘ACTIVE’;
计算每秒的会话活动数:
SELECT COUNT(*) / (COUNT(DISTINCT TRUNC(sample_time, ‘MI’))*60)
FROM ash_demo
WHERE sample_time > SYSDATE – 1/24;
计算每秒的用户数量:
SELECT COUNT(DISTINCT username) / (COUNT(DISTINCT TRUNC(sample_time, ‘MI’))*60)
FROM ash_demo
WHERE sample_time > SYSDATE – 1/24;
ASH视图是Oracle数据库中强大的性能监测工具之一。ASH数据可用于查找,调试和解决各种性能问题。在使用ASH视图时,务必了解所需的数据类型,并选择正确的查询以满足您的需求。通过合理的利用ASH视图,您可以获得更好的工作效率和性能。