Oracle一条资源消耗较高但是Executions=0的问题排查

简介: 日常巡检某客户生产环境数据库时,发现AWR报告中有资源消耗较高但是Executions=0的现象

日常巡检某客户生产环境数据库时,发现AWR报告中有资源消耗较高但是Executions=0的现象:
image
这个现象可以解释为在这一个小时的快照周期内SQL一次都没执行完成。
(一)
对第一条 SQLID=1cc0y3fyndjcv

UPDATE User1.Tab1 A SET (col1, col2, col3, col4, col5, col6, col7) = (SELECT UTL_RAW.CAST_TO_VARCHAR2(colx) col1, col2, col3, col4, col5, col6, col7 FROM User2.Tab2@DBLink1 B WHERE A.col1=B.col1 AND 1=1) WHERE col8 = '01'

可以看到有DBLINK1,经排查是跨实例的更新操作;两张表的数据量相同,进一步分析,B是一张视图

SQL> select count(*) from User1.Tab1;

  COUNT(*)
----------
    160366

SQL> select count(*) from User2.Tab2@DBLink1;

  COUNT(*)
----------
    160366
 
SQL> col object_name for a30
SQL> select object_name,object_type from dba_objects@DBLink1 where object_name = upper('Tab2');

OBJECT_NAME                    OBJECT_TYPE
------------------------------ -------------------
Tab2                  VIEW

(二)
查看SQL的执行计划,全表扫描;在分析col8的选择性,整张表就一个值,没有选择性

SQL> select  col1, col2, col3, col4, col5, col6, col7 from   User1.Tab1 where  col8 = '01'   ;

160366 rows selected.


Execution Plan
----------------------------------------------------------
Plan hash value: 156998718

-------------------------------------------------------------------------------
| Id  | Operation         | Name      | Rows  | Bytes | Cost (%CPU)| Time     |
-------------------------------------------------------------------------------
|   0 | SELECT STATEMENT  |           |   160K|  5480K|   473   (1)| 00:00:06 |
|*  1 |  TABLE ACCESS FULL| Tab1 |   160K|  5480K|   473   (1)| 00:00:06 |
-------------------------------------------------------------------------------

Predicate Information (identified by operation id):
---------------------------------------------------

   1 - filter("col8"='01')


Statistics
----------------------------------------------------------
          1  recursive calls
          0  db block gets
     329996  consistent gets
          0  physical reads
     106944  redo size
    4647458  bytes sent via SQL*Net to client
     118125  bytes received via SQL*Net from client
      10693  SQL*Net roundtrips to/from client
          0  sorts (memory)
          0  sorts (disk)
     160366  rows processed
    
 SQL> select count(*),col from User1.Tab1 group by col8;

  COUNT(*) MFMANAUNIT
---------- --------------------
    160366 01

(三)
从实例级别进行分析,脚本运行在当前数据库服务器host1上;查看服务器进程,ora_j000 是Oracle JOB进程;再看当前正在运行的JOB

 SQL> @sql_now

 SID STATUS   PROCESS    SCHEMANAME       OSUSER           SQL QUERY   PROGRAM
---- -------- ---------- ---------------- ---------------- ------------------------------------------------------------------------------------------------------------------------ ------------------------------
 226 ACTIVE   21800      DBUSRSYS         oracle           UPDATE User1.Tab1 A SET (col1, col2, col3, col4, col5, col6, col7) = (SELECT UTL_RAW.CAST_TO_VARCHAR2(colx) col1, col2, col3, col4, col5, col6, col7 FROM User2.Tab2@DBLink1 B WHERE A.col1=B.col1 AND 1=1) WHERE col8 = '01' oracle@host1  

[root@host1~]# ps -ef|grep 21800
root      6954  5534  0 14:43 pts/2    00:00:00 grep 21800
oracle   21800     1  0 05:26 ?        00:03:25 ora_j000_orcl

SQL> select * from dba_jobs_running;

 SID        JOB   FAILURES LAST_DATE LAST_SEC THIS_DATE THIS_SEC   INSTANCE
---- ---------- ---------- --------- -------- --------- -------- ----------
 226         21          0 02-JAN-19 01:00:30 03-JAN-19 05:26:53          0

JOB sid == SQL sid ,且状态都是正在运行,那么确定是JOB中调用的UPDATE操作;JOB运行了很长时间
(四)
查看JOB内容

SQL> select job,substr(what,1,100) from dba_jobs where job = 21;

       JOB SUBSTR(WHAT,1,100)
---------- ----------------------------------------------------------------------------------------------------
        21 package1.RUN;
        
SQL> select dbms_metadata.get_ddl('PACKAGE','package1','User1') from dual;
--------------------------------------------------------------------------------

  CREATE OR REPLACE PACKAGE "User1"."package1" Is
  Procedure writelog
  (
    vtab  In Varchar2,
    vflag In Char,
    vlog  In Varchar2,
    vdate In Date,
    vtype In Char Default 'S'
    …………
# 400多行就不贴了

(五)
到此,基本排查完成,因客户的的应用程序由第三方负责开发运维,所以将以上信息反馈在沟通群中,并得到开发商反馈:这是一个临时的业务操作,已经转交给开发着手修改。

目录
相关文章
|
SQL 监控 Oracle
Oracle 数据库发生等待事件:enq: TX - row lock contention ,排查思路
Oracle 数据库发生等待事件:enq: TX - row lock contention ,排查思路
Oracle 数据库发生等待事件:enq: TX - row lock contention ,排查思路
|
监控 Oracle 安全
Oracle数据库用户频繁被锁问题原因排查及解决
由于应用环境下Oracle用户总是频繁被锁,经常不能执行数据库事务操作,严重影响了系统运行效率。通过问题原因分析及排查,发现了原因,在此记录一下。
4590 0
Oracle数据库用户频繁被锁问题原因排查及解决
|
SQL 监控 Oracle
Oracle 数据库报错:ORA-12592问题排查过程
Oracle 数据库报错:ORA-12592问题排查过程
4035 0
|
存储 Oracle 关系型数据库
Oracle中“ORA-00060: 等待资源时检测到死锁” 或存储过程编译卡死的一种解决方法
Oracle中“ORA-00060: 等待资源时检测到死锁” 或存储过程编译卡死的一种解决方法
813 0
|
7月前
|
SQL Oracle 关系型数据库
oracle11g SAP测试机归档日志暴增排查(二)
oracle11g SAP测试机归档日志暴增排查(二)
329 1
|
7月前
|
Oracle 关系型数据库 Shell
oracle11g SAP测试机归档日志暴增排查(一)
oracle11g SAP测试机归档日志暴增排查(一)
79 1
|
5月前
|
负载均衡 Oracle 关系型数据库
关系型数据库Oracle 资源共享
【7月更文挑战第10天】
41 1
|
6月前
|
SQL Oracle 关系型数据库
实时计算 Flink版产品使用问题之同步oracle表时,数据量约800万,检查点异常,该如何排查
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
|
7月前
|
监控 Oracle 关系型数据库
Dataphin实时集成Oracle CDC相关问题排查
本文档提供了Dataphin平台Oracle CDC实时集成相关问题排查指南,覆盖了权限等常见问题,旨在帮助快速定位和解决Oracle数据库变更数据捕获(CDC)集成过程中所可能遇到的技术难题,确保数据的实时、准确同步。
199 1
|
Oracle 关系型数据库
oracle ORA-00054 资源正忙
oracle ORA-00054 资源正忙