当前位置: 首页 > news >正文

Oracle 死锁、指标汇总

一、Oracle RAC 架构 

       待~

"SYS"."V_$SESSION" 与 "SYS"."GV_$SESSION"的区别
    哪个列可以区分V$和GV$: 添加条件 S.INST_ID = USERENV('INSTANCE')

SELECT * FROM GV$SESSION S WHERE S.USERNAME = 'SCOTT' AND S.INST_ID = USERENV('INSTANCE')

    查看当前是第几个实例

SELECT USERENV('INSTANCE') FROM DUAL;

二、Oracle 死锁的查询与处理

-- 1.查看EVENT字段中是否出现row block,则表示此SQL被阻塞
SELECT'alter system disconnect session ''' || s.sid || ', ' || s.serial# || ''' immediate;'  kill_session,s.inst_id,s.event, --是否含有row blocks.blocking_session, -- 阻塞别人SQL的那条sids.last_call_et,a.sql_text,s.machine,s.osuser,s.program,s.module,s.action,s.username,a.sql_id,a.child_number,s.logon_time,s.service_name,a.sql_fulltext
FROMgv$session s,gv$sql a  
WHEREs.sql_id = a.sql_id (+)AND   s.sql_child_number = a.child_number (+)AND   s.status = 'ACTIVE'AND   s.username <> 'SYS'AND   s.last_call_et > 10AND   s.inst_id = a.inst_id
ORDER BY  s.last_call_et DESC; -- 2.知道堵塞别人的sid后,根据sid和inst_id 查找出serial#
select * from gv$session where sid=1522 and inst_id=2;-- 3.然后去对应的实例上,替换'sid,serial#'的sid与serial#,杀死阻塞别人的session
alter system disconnect session 'sid,serial#' immediate;-- 4.确认有没有杀干净,正常情况下结果为空,否则用步骤3再杀一次
select a.spid,b.sid,b.serial#,b.username,b.osuser,a.program from gv$process a,gv$session b where a.ADDR=b.PADDR and b.STATUS='KILLED'
and a.inst_id = b.inst_id;-- 5.通过步骤1的SQL_ID,确认有没有同一SQL_ID,但status是INACTIVE的,用步骤3杀掉
select * from gv$session a where a.SQL_ID='fmcuc8whh75ys';

三、Oracle查询实时运行语句及时间花费

--查询实时运行的语句
SELECT'ps -ef | grep '|| spid ps,b.sid,b.username,a.sql_id,b.inst_id,b.event,round(b.last_call_et / 3600) "ses_T(小时)",trunc( ( (a.elapsed_time / DECODE(executions,0,1,executions) ) / 1000000),2) "etime(s)",round(a.buffer_gets / DECODE(a.executions,0,1,a.executions) ) per_bu,a.executions,a.sql_fulltext fullsql,a.sql_text,a.disk_reads,a.buffer_gets,b.osuser,b.machine,b.program,a.module,a.cpu_time,a.last_load_time,a.last_active_time
FROMgv$sqlarea a, gv$session b, gv$process p
WHEREexecutions >= 0AND   b.status = 'ACTIVE'AND   a.hash_value = b.sql_hash_valueAND   a.sql_id = b.sql_idAND   b.paddr = p.addrAND   a.inst_id = b.inst_idAND   b.inst_id = p.inst_id
ORDER BY round(b.last_call_et / 3600) desc;--( cpu_time / DECODE(executions,0,1,executions) ) DESC,a.buffer_gets DESC,a.executions DESC,a.sql_id;

四、Oracle各项指标查询

--1.Oracle正在执行的语句和拼接杀进程
SELECT 'ALTER SYSTEM KILL SESSION ''' || A.SID ||',' ||A.SERIAL#||''' IMMEDIATE;' AS KILL_SESSION,A.SID,A.SERIAL#,A.USERNAME,A.INST_ID,A.MACHINE,A.PADDR,B.SPID,C.SQL_TEXT,C.SQL_FULLTEXT       
FROM GV$SESSION A, GV$PROCESS B, GV$SQLAREA C 
WHERE A.PADDR = B.ADDR AND A.SQL_HASH_VALUE = C.HASH_VALUE --AND A.OSUSER = '系统用户名'AND A.INST_ID = B.INST_ID AND B.INST_ID = C.INST_ID;--1.1 当前用户正在执行的语句
SELECTa.sid,a.serial#,a.paddr,a.username,a.inst_id,a.machine,A.SQL_ID,A.PREV_SQL_ID,nvl(a.sql_id,a.prev_sql_id) sql_id,b.sql_text,b.sql_fulltext,b.executions,b.first_load_time,b.last_load_time,b.last_active_time,b.disk_reads,b.direct_writes,b.buffer_gets
FROM            
gv$session a, gv$sql b
WHERE a.username = sys_context('USERENV','CURRENT_USER') -- 获取当前的用户
AND a.status = 'ACTIVE'
AND nvl(a.sql_id,a.prev_sql_id) = b.sql_id
AND a.inst_id = b.inst_id;--2.锁表语句和拼接杀进程
SELECT 'ALTER SYSTEM KILL SESSION ''' || A.SID ||',' ||A.SERIAL#||''' IMMEDIATE;' AS KILL_SESSION,B.SESSION_ID,A.SERIAL#,A.EVENT,             --是否含有row blockA.BLOCKING_SESSION,  -- 阻塞别人SQL的那条sidB.LOCKED_MODE,B.ORACLE_USERNAME,A.USER#,B.OS_USER_NAME,A.MACHINE,A.TERMINAL,C.SQL_TEXT,C.ACTION
FROM GV$SESSION A, GV$LOCKED_OBJECT B, GV$SQLAREA C 
WHERE A.SID = B.SESSION_ID AND A.PREV_SQL_ADDR = C.ADDRESSAND A.INST_ID = B.INST_ID AND B.INST_ID = C.INST_IDAND A.STATUS = 'ACTIVE' AND A.USERNAME <> 'SYS'
ORDER BY A.SID, A.SERIAL#;--3.最耗费CPU
SELECT  TRUNC(CPU_TIME / 1000000 / decode(executions, 0, 1, executions), 2) CPU_SEC,BUFFER_GETS,DISK_READS,SORTS,EXECUTIONS,SQL_TEXT,ROWS_PROCESSED
FROM GV$SQLSTATS ORDER BY CPU_SEC DESC;--4.汇总指标
SELECTt.inst_id,t.sql_id,t.last_active_time,t.sql_profile,         --如果该字段有值,就是按固化走执行计划t.plan_hash_value,t.child_number      "执行计划版本号",trunc( (t.cpu_time / t.executions / 1000000),4)  "每次cpu时间",trunc( (t.elapsed_time - t.cpu_time) / t.executions / 1000000,4) "每次等待时间",t.executions        "总执行次数",round(t.rows_processed / t.executions,2) "平均返回行数",trunc(t.elapsed_time / t.executions / 1000000,4) "每次执行(秒)",trunc( (t.buffer_gets / t.executions / 1000000),4) "每次逻辑读",trunc( (t.disk_reads / t.executions / 1000000),4) "每次物理读",trunc( (t.cluster_wait_time / t.executions / 1000000),4) "每次集群等待",trunc( (t.user_io_wait_time / t.executions / 1000000),4) "每次io等待",trunc( (t.application_wait_time / t.executions / 1000000),4) "每次应用等待",trunc( (t.concurrency_wait_time / t.executions / 1000000),4) "每次并发等待",t.first_load_time   "首次硬解析时间",t.last_load_time    "上次硬解析时间",t.module,t.action,t.parsing_schema_name,trunc(t.elapsed_time / 1000000,4) "执行时间(秒)",trunc(t.cpu_time / 1000000,4) "cpu时间",t.parse_calls       "总解析次数",t.loads             "硬解析次数",t.buffer_gets,t.cluster_wait_time,t.user_io_wait_time,t.application_wait_time,t.concurrency_wait_time,t.plan_hash_value,t.sql_fulltextFROMgv$sql tWHEREt.executions > 0ORDER BYt.cpu_time DESC;--5.最耗缓存
SELECTsql_fulltext   sql,buffer_gets,executions,buffer_gets / executions "Gets/Exec",hash_value,address,last_active_time
FROMv$sqlarea
WHEREbuffer_gets > 10000
ORDER BYbuffer_gets DESC;--6.最多物理读取
SELECTsql_fulltext   sql,disk_reads,executions,disk_reads / executions "Reads/Exec",hash_value,address,last_active_time
FROMv$sqlarea
WHEREdisk_reads > 1000
ORDER BYdisk_reads DESC;--7.最多执行
SELECTsubstr(sql_text,1,40) sql,sql_fulltext,executions,rows_processed,rows_processed / executions "Rows/Exec",hash_value,address,last_active_time
FROMv$sqlarea
WHEREexecutions > 100
ORDER BYexecutions DESC;-- 8.最耗内存
SELECTsubstr(sql_text,1,40) sql,sharable_mem,executions,hash_value,address,last_active_time
FROMv$sqlarea
WHEREsharable_mem > 1048576
ORDER BYsharable_mem DESC;--9.阻塞等待语句
SELECTblocksession.sid          AS block_session_sid,blocksession.serial#      AS block_session_serial#,blocksession.username     AS block_session_username,blocksession.osuser       AS block_session_osuser,blocksession.machine      AS block_session_machine,blocksession.status       AS block_session_status,blockobject.object_name   AS blocked_table,waitsession.sid           AS wait_session_sid,waitsession.serial#       AS wait_session_serial#,waitsession.username      AS wait_session_username,waitsession.osuser        AS wait_session_osuser,waitsession.machine       AS wait_session_machine,waitsession.status        AS wait_session_status
FROMv$lock blocklock,v$lock waitlock,v$session blocksession,v$session waitsession,v$locked_object lockedobject,dba_objects blockobject
WHEREblocklock.block = 1AND blocklock.sid != waitlock.sidAND blocklock.id1 = waitlock.id1AND blocklock.id2 = waitlock.id2AND blocklock.sid = blocksession.sidAND waitlock.sid = waitsession.sidAND lockedobject.session_id = blocksession.sidAND lockedobject.object_id = blockobject.object_id;    --10.失效索引查询与重建    
SELECT'alter index '|| a.index_name|| ' rebuild online;',a.*
FROMuser_indexes a
WHEREa.status <> 'VALID'AND a.index_name NOT LIKE '%$$';

参考资料:

https://www.cnblogs.com/shouke/p/17437893.html

https://docs.oracle.com/database/121/REFRN/GUID-2B9340D7-4AA8-4894-94C0-D5990F67BE75.htm#REFRN30246

https://docs.oracle.com/database/121/REFRN/GUID-09D5169F-EE9E-4297-8E01-8D191D87BDF7.htm#REFRN30259

https://docs.oracle.com/en/database/oracle/oracle-database/21/refrn/V-SESSION.html

https://docs.oracle.com/en/database/oracle/oracle-database/21/refrn/V-LOCKED_OBJECT.html#GUID-3F9F26AA-197F-4D36-939E-FAF1EFD8C0DD

相关文章:

  • 有点NB的免费wordpress主题模板
  • Neo4j 批量导入数据 从官方文档学习LOAD CSV 命令 小白可食用版
  • PHP+Lunix+GIT 如何快速使用宝塔WebHook快速自动化部署
  • C++训练营:引用传递
  • 计算机服务器中了devos勒索病毒怎么解密,devos勒索病毒解密工具流程
  • 【计算机网络教程】第一章课后习题答案
  • Websocket在Asp.net webApi(.net framework)上的应用
  • JAVA后端开发面试基础知识(九)——SpringBoot
  • 机器学习模型—逻辑回归
  • Win11系统启动VMware上虚拟机蓝屏解决办法
  • 十步打造JAVA应用服务器
  • go docker sdk 使用 第二章
  • ubuntu 23.04 安装 中文输入法
  • Unity3d Shader篇(十四)— 卡通着色
  • GPT与R 在生态环境领域数据统计分析
  • [数据结构]链表的实现在PHP中
  • 【comparator, comparable】小总结
  • 【许晓笛】 EOS 智能合约案例解析(3)
  • Django 博客开发教程 8 - 博客文章详情页
  • iOS仿今日头条、壁纸应用、筛选分类、三方微博、颜色填充等源码
  • JavaScript新鲜事·第5期
  • Linux CTF 逆向入门
  • linux安装openssl、swoole等扩展的具体步骤
  • MySQL-事务管理(基础)
  • React组件设计模式(一)
  • Spark VS Hadoop:两大大数据分析系统深度解读
  • Spring核心 Bean的高级装配
  • Traffic-Sign Detection and Classification in the Wild 论文笔记
  • Webpack入门之遇到的那些坑,系列示例Demo
  • 包装类对象
  • 创建一个Struts2项目maven 方式
  • 翻译 | 老司机带你秒懂内存管理 - 第一部(共三部)
  • 看域名解析域名安全对SEO的影响
  • 面试总结JavaScript篇
  • 如何编写一个可升级的智能合约
  • 如何设计一个比特币钱包服务
  • 实习面试笔记
  • 我有几个粽子,和一个故事
  • 线上 python http server profile 实践
  • 详解NodeJs流之一
  • 想使用 MongoDB ,你应该了解这8个方面!
  • 一些关于Rust在2019年的思考
  • 以太坊客户端Geth命令参数详解
  • 走向全栈之MongoDB的使用
  • Python 之网络式编程
  • 阿里云服务器如何修改远程端口?
  • 容器镜像
  • ​TypeScript都不会用,也敢说会前端?
  • #中国IT界的第一本漂流日记 传递IT正能量# 【分享得“IT漂友”勋章】
  • $ is not function   和JQUERY 命名 冲突的解说 Jquer问题 (
  • (02)Hive SQL编译成MapReduce任务的过程
  • (NO.00004)iOS实现打砖块游戏(九):游戏中小球与反弹棒的碰撞
  • (九)c52学习之旅-定时器
  • (十五)Flask覆写wsgi_app函数实现自定义中间件
  • (转)程序员疫苗:代码注入