oracle-故障处理-如何通过相关视图分析数据库实时性能问题

简介:

排查思路

1. 查看数据库active session 的等待事件

  SELECT s.inst_id,s.wait_class, s.event, COUNT (*)
    FROM gv$session s
   WHERE status = 'ACTIVE'
GROUP BY s.inst_id,s.wait_class, s.event
ORDER BY 4 DESC;

2.查看active session 正在执行的sql

SELECT q.sql_text,
       q.sql_fulltext,
       s.sql_exec_start,
       s.sql_exec_id,
       s.sql_id,
       s.*
  FROM gv$session s, v$sql q
 WHERE s.sql_id = q.sql_id AND s.status = 'ACTIVE' AND s.TYPE = 'USER';

3.查看是否有锁等待

col sql_id for a20
col status for a10
col event for a40
col wait_class for a20
col program for a30

WITH s AS
 (SELECT * FROM gv$session)
SELECT LEVEL,
       lpad(' ', (LEVEL - 1) * 5, ' ') || nvl(s.username, '(oracle)') AS username,
       s.inst_id,
       s.sid,
       s.serial#,
       s.sql_id,
       s.status,
       s.event,
       s.blocking_session,
       s.wait_class,
       s.seconds_in_wait,
       --s.machine,
       --s.module,
       s.program 
       --,to_char(s.logon_time, 'YYYY-MM-DD HH24:MI:SS') AS logon_time
  FROM s
 WHERE LEVEL > 1
    OR EXISTS (SELECT 1 FROM s s2 WHERE s2.blocking_session = s.sid)
CONNECT BY PRIOR s.sid = s.blocking_session
 START WITH s.blocking_session IS NULL; 

4. 查看那些对象被锁住,被哪个session锁住,锁的类型,session正在执行的sql

  SELECT p.inst_id,
         p.spid,
         p.BACKGROUND,
         l.session_id sid,
         s.serial#,
         s.username,
         s.osuser,
         s.status,
         s.event,
         o.object_name,
         l.locked_mode,
         s.program,
         s.logon_time,
         s.sql_id
    FROM gv$process p,
         gv$locked_object l,
         dba_objects o,
         gv$session s
   WHERE     l.object_id = o.object_id
         AND l.session_id = s.sid
         AND p.addr = s.paddr
ORDER BY sid, s.serial#;

5. 查看访问某个对象(表、存储过程等)的Session:

select /*+rule+*/ s.inst_id,s.username,s.sid,s.serial#,s.event,s.sql_id,
 'alter system kill session ''' || s.sid || ',' || s.serial# || ',@' ||s.inst_id || ''' immediate;' kill_script  from gv$session s
 where s.sid in (select /*+rule */ SID  from  gv$access where object =upper('tableA')) and type='USER'; 

SELECT /*+ rule */
       DISTINCT
       s.inst_id,
       s.username,
       s.sid,
       s.serial#,
       s.status,
       s.event,
       s.sql_id,
       s.sql_exec_id,
       s.sql_exec_start,
        s.blocking_session,
       s.wait_class,
       s.seconds_in_wait,
       s.machine,
       s.module,
       s.program 
       ,to_char(s.logon_time, 'YYYY-MM-DD HH24:MI:SS') AS logon_time
       'alter system kill session ''' || s.sid || ',' || s.serial# || ',@' ||s.inst_id || ''' immediate;' kill_session_script,
       'kill -9 ' || p.spid kill_process_script
  FROM gv$session s, gv$access a, gv$process p
 WHERE     s.inst_id = a.inst_id
       AND s.sid = a.sid
       AND p.addr = s.paddr
       AND s.TYPE = 'USER'
       and a.object =upper('tableA')
       --  AND s.status = 'KILLED'
       -- AND s.username = 'userA'; 
<!-- 获得表、索引、视图、存储过程、函数的DDL

select dbms_metadata.get_ddl('TABLE','TABLE_NAME','TABLE_OWNER') from dual;
select dbms_metadata.get_ddl('INDEX','INDEX_NAME','INDEX_OWNER') from dual;
select dbms_metadata.get_ddl('VIEW','VIEW_NAME','VIEW_OWNER') from dual;
select dbms_metadata.get_ddl('PROCEDURE','PROCEDURE_NAME','PROCEDURE_OWNER') from dual;
select dbms_metadata.get_ddl('FUNCTION','FUNCTION_NAME','FUNCTION_OWNER') from dual;  -->

6. kill session

SELECT /*+ rule */
       DISTINCT
       s.inst_id,
       s.username,
       s.sid,
       s.serial#,
       s.status,
       s.event,
       s.sql_id,
       s.sql_exec_id,
       s.sql_exec_start,
       s.PLSQL_OBJECT_ID,
       s.PREV_EXEC_ID,
       s.PREV_EXEC_START,
       s.blocking_session,
       s.BLOCKING_INSTANCE,
       s.BLOCKING_SESSION_STATUS,    
       s.wait_class,
       s.seconds_in_wait,
       s.machine,
       s.module,
       s.program,
       p.spid,
       p.PGA_USED_MEM/1024/1024,
       p.PGA_ALLOC_MEM/1024/1024,
       p.PGA_MAX_MEM/1024/1024
       ,to_char(s.logon_time, 'YYYY-MM-DD HH24:MI:SS') AS logon_time,
       'alter system kill session ''' || s.sid || ',' || s.serial# || ',@' ||s.inst_id || ''' immediate;' kill_session_script,
       'kill -9 ' || p.spid kill_process_script
  FROM gv$session s,  gv$process p
 WHERE     s.inst_id = a.inst_id
       AND s.sid in (select /*+rule */ SID  from  gv$access where object =upper('tableA'))
       AND p.addr = s.paddr
       AND s.TYPE = 'USER'
       --  AND s.status = 'KILLED'
        AND s.username = 'userA';
目录
相关文章
|
4月前
|
Oracle 关系型数据库 Linux
【赵渝强老师】Oracle数据库配置助手:DBCA
Oracle数据库配置助手(DBCA)是用于创建和配置Oracle数据库的工具,支持图形界面和静默执行模式。本文介绍了使用DBCA在Linux环境下创建数据库的完整步骤,包括选择数据库操作类型、配置存储与网络选项、设置管理密码等,并提供了界面截图与视频讲解,帮助用户快速掌握数据库创建流程。
415 93
|
3月前
|
Oracle 关系型数据库 Linux
【赵渝强老师】使用NetManager创建Oracle数据库的监听器
Oracle NetManager是数据库网络配置工具,用于创建监听器、配置服务命名与网络连接,支持多数据库共享监听,确保客户端与服务器通信顺畅。
240 0
|
4月前
|
缓存 关系型数据库 BI
使用MYSQL Report分析数据库性能(下)
使用MYSQL Report分析数据库性能
173 3
|
6月前
|
存储 Oracle 关系型数据库
服务器数据恢复—光纤存储上oracle数据库数据恢复案例
一台光纤服务器存储上有16块FC硬盘,上层部署了Oracle数据库。服务器存储前面板2个硬盘指示灯显示异常,存储映射到linux操作系统上的卷挂载不上,业务中断。 通过storage manager查看存储状态,发现逻辑卷状态失败。再查看物理磁盘状态,发现其中一块盘报告“警告”,硬盘指示灯显示异常的2块盘报告“失败”。 将当前存储的完整日志状态备份下来,解析备份出来的存储日志并获得了关于逻辑卷结构的部分信息。
|
8月前
|
负载均衡 算法 关系型数据库
大数据大厂之MySQL数据库课程设计:揭秘MySQL集群架构负载均衡核心算法:从理论到Java代码实战,让你的数据库性能飙升!
本文聚焦 MySQL 集群架构中的负载均衡算法,阐述其重要性。详细介绍轮询、加权轮询、最少连接、加权最少连接、随机、源地址哈希等常用算法,分析各自优缺点及适用场景。并提供 Java 语言代码实现示例,助力直观理解。文章结构清晰,语言通俗易懂,对理解和应用负载均衡算法具有实用价值和参考价值。
大数据大厂之MySQL数据库课程设计:揭秘MySQL集群架构负载均衡核心算法:从理论到Java代码实战,让你的数据库性能飙升!
|
4月前
|
缓存 监控 关系型数据库
使用MYSQL Report分析数据库性能(上)
最终建议:当前系统是完美的读密集型负载模型,优化重点应放在减少行读取量和提高数据定位效率。通过索引优化、分区策略和内存缓存,预期可降低30%的CPU负载,同时保持100%的缓冲池命中率。建议每百万次查询后刷新统计信息以持续优化
259 6
|
4月前
|
缓存 监控 关系型数据库
使用MYSQL Report分析数据库性能(中)
使用MYSQL Report分析数据库性能
177 1
|
4月前
|
SQL Oracle 关系型数据库
Oracle数据库创建表空间和索引的SQL语法示例
以上SQL语法提供了一种标准方式去组织Oracle数据库内部结构,并且通过合理使用可以显著改善查询速度及整体性能。需要注意,在实际应用过程当中应该根据具体业务需求、系统资源状况以及预期目标去合理规划并调整参数设置以达到最佳效果。
352 8
|
6月前
|
SQL Oracle 关系型数据库
比较MySQL和Oracle数据库系统,特别是在进行分页查询的方法上的不同
两者的性能差异将取决于数据量大小、索引优化、查询设计以及具体版本的数据库服务器。考虑硬件资源、数据库设计和具体需求对于实现优化的分页查询至关重要。开发者和数据库管理员需要根据自身使用的具体数据库系统版本和环境,选择最合适的分页机制,并进行必要的性能调优来满足应用需求。
303 11
|
5月前
|
缓存 关系型数据库 MySQL
MySQL数据库性能调优:实用技术与策略
通过秉持以上的策略实施具体的优化措施,可以确保MySQL数据库的高效稳定运行。务必结合具体情况,动态调整优化策略,才能充分发挥数据库的性能潜力。
229 0

推荐镜像

更多