开发者社区> lfreeali> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

[20150803]无法通过sql_id找到sql语句3.txt

简介: [20150803]无法通过sql_id找到sql语句3.txt --前一阵子,在做优化时遇到1个无法通过sql_id找到sql语句的情况: http://blog.itpub.net/267265/viewspace-1749265/ --就是因为共享池太小,执行次数少,没到取样时间,已经从共享池清除。
+关注继续查看

[20150803]无法通过sql_id找到sql语句3.txt

--前一阵子,在做优化时遇到1个无法通过sql_id找到sql语句的情况:
http://blog.itpub.net/267265/viewspace-1749265/

--就是因为共享池太小,执行次数少,没到取样时间,已经从共享池清除。

--今天自己google,想想看看还有那种情况会出现呢?如果1条语句执行错误,会记录sql_id,当时查询v$sql视图应该也不能找到。
--自己直接那生产系统看看:

1.建立测试环境:
--看看生产系统的情况:
SYS@xxxxxx:1521/dbcn> @ver1
PORT_STRING                    VERSION        BANNER
------------------------------ -------------- --------------------------------------------------------------------------------
x86_64/Linux 2.4.xx            11.2.0.4.0     Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production

SELECT COUNT (*), sql_id
    FROM V$ACTIVE_SESSION_HISTORY
   WHERE event = 'SQL*Net break/reset to client'
GROUP BY sql_id having count(*)>=9
ORDER BY 1 DESC;

  COUNT(*) SQL_ID
---------- -------------
       369 cm0qrtprj32qv
         9 c21vhszr9gbdq

SYSTEM@xxxxxx:1521/dbcn> @dpc cm0qrtprj32qv ''
PLAN_TABLE_OUTPUT
-----------------------------------------------------------
SQL_ID: cm0qrtprj32qv cannot be found
--无法发现sql语句。

SYS@192.168.99.106:1521/dbcn> select * from v$sql where sql_id='cm0qrtprj32qv';
no rows selected

--查询x$kglob视图:
$ cat shp4.sql
SELECT DECODE (kglhdadr,
               kglhdpar, '父游标句柄地址',
               '子游标句柄地址')
          text,
       kglhdadr,
       kglhdpar,
       substr(kglnaobj,1,20),
       kglobhd0,
       kglobhd6,
       kglobhs0,kglobhs6,kglobt16,
       kglobhs0+kglobhs6+kglobt16,
           kglobhs0+kglobhs1+kglobhs2+kglobhs3+kglobhs4+kglobhs5+kglobhs6+kglobt16 N20
  FROM x$kglob
WHERE kglobt03 = '&1';


SYS@192.168.99.106:1521/dbcn> @sharepool/shp4 cm0qrtprj32qv
old  14:  WHERE kglobt03 = '&1'
new  14:  WHERE kglobt03 = 'cm0qrtprj32qv'

TEXT           KGLHDADR         KGLHDPAR         SUBSTR(KGLNAOBJ,1,20)                    KGLOBHD0         KGLOBHD6           KGLOBHS0   KGLOBHS6   KGLOBT16 KGLOBHS0+KGLOBHS6+KGLOBT16        N20
-------------- ---------------- ---------------- ---------------------------------------- ---------------- ---------------- ---------- ---------- ---------- -------------------------- ----------
子游标句柄地址 000000130BCC8228 0000001309E41A28 SELECT PBD_FHGT,PBD_                     00               00                        0          0       4091                       4091       4091
子游标句柄地址 000000130570E978 0000001309E41A28 SELECT PBD_FHGT,PBD_                     00               00                        0          0       4091                       4091       4091
父游标句柄地址 0000001309E41A28 0000001309E41A28 SELECT PBD_FHGT,PBD_                     0000001307FF9158 00                     4976          0          0                       4976       4976

--
SYS@192.168.99.106:1521/dbcn> SELECT distinct kglnaobj c100 from x$kglob where  kglobt03 = 'cm0qrtprj32qv';
C100
----------------------------------------------------------------------------------------------------
SELECT PBD_FHGT,PBD_FWGT,PBD_FITL,PBD_FUNL,PBD_FCHR,PBD_FPTC,PBD_FFCE,PBH_FHGT,PBH_FWGT,PBH_FITL,PBH
_FUNL,PBH_FCHR,PBH_FPTC,PBH_FFCE,PBL_FHGT,PBL_FWGT,PBL_FITL,PBL_FUNL,PBL_FCHR,PBL_FPTC,PBL_FFCE,PBT_
CMNT  FROM SYSTEM.PBCATTBL   WHERE PBT_OWNR = :"SYS_B_0" AND PBT_TNAM = :"SYS_B_1"

--这个是pb的程序,而这个表再我们的系统不存在。
SYS@192.168.99.106:1521/dbcn> @desc SYSTEM.PBCATTBL
ERROR:
ORA-04043: object SYSTEM.PBCATTBL does not exist

--导致每次程序访问是报错。

select trunc(sample_time,'hh24'),sql_id,count(*) from V$ACTIVE_SESSION_HISTORY where sql_id='cm0qrtprj32qv' and sample_time>=trunc(sysdate)+8/24
group by trunc(sample_time,'hh24'),sql_id
order by trunc(sample_time,'hh24') desc ,sql_id;

TRUNC(SAMPLE_TIME,' SQL_ID          COUNT(*)
------------------- ------------- ----------
2015-08-03 10:00:00 cm0qrtprj32qv         28
2015-08-03 09:00:00 cm0qrtprj32qv         94
2015-08-03 08:00:00 cm0qrtprj32qv         60

--当前我执行的时间是10:23,看看9-10点,这个错误就浪费了94秒时间。可以发现执行实在太频繁。


--接着看看另外1条语句:

SYS@xxxxxx:1521/dbcn> SELECT distinct kglnaobj c100 from x$kglob where  kglobt03 = 'c21vhszr9gbdq';
C100
----------------------------------------------------------------------------------------------------
Select csz2 From gy_xtcs where xtxh =:"SYS_B_0" And csmc =:"SYS_B_1"

SYS@xxxxxx:1521/dbcn> @desc portal_his.GY_XTCS
Name   Null?    Type
------ -------- ----------------------------
CSMC   NOT NULL VARCHAR2(40)
CSZ             VARCHAR2(200)
MRZ             VARCHAR2(100)
BZ              VARCHAR2(80)

--根本没有xtxh字段。
--真不知道这种大量无法执行的命令对性能能产生多大的影响。不过都可以通过x$kglob查询到。

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
Mysql常用sql语句(5)- as 设置别名
Mysql常用sql语句(5)- as 设置别名
85 0
Mysql常用sql语句(13)- having 过滤分组结果集
Mysql常用sql语句(13)- having 过滤分组结果集
69 0
mysql常用sql语句
本文主要介绍基本的 SQL 语句,数据的增删查改等。
73 0
MySQL系列专题(2)-MySQL的SQL语句和高级特性
MySQL系列专题(2)-MySQL的SQL语句和高级特性
93 0
MySQL关于SQL语句的一些题目
MySQL关于SQL语句的一些题目 1、用一条SQL语句查询出每门课都大于80的学生的姓名 (1)SELECT NAME FROM score GROUP BY NAME HAVING MIN(grade) > 80 (2)SELECT DISTINCT NAME FROM score WH.
1537 0
***mysql中查询今天、昨天、上个月sql语句
今天 select * from 表名 where to_days(时间字段名) = to_days(now()); 昨天Select * FROM 表名 Where TO_DAYS( NOW( ) ) - TO_DAYS( 时间字段名)
1056 0
MySQL的一些常用的SQL语句整理
安装MySQL有两种的方式,一种是解压版本,但是需要配置环境变量,相对而言比较麻烦。所以我们一般采取第二种方式,那就是到MySQL的官网上下载安装版。这样就会省去很多麻烦,在这里我就不再详细的介绍具体的安装过程了,百度一下,Google,上面有手把手的教程。
871 0
【C/C++学院】(21)Mysql数据库编程--开发简介/SQL语句
<h1><span style="line-height:1.5"><span style="font-size:18px">一.mysql安装与管理</span></span></h1> <div><span style="line-height:1.5; font-size:18px; font-family:'Microsoft YaHei UI','Microsoft YaHei
1219 0
利用tcpdump抓取mysql sql语句
这个脚本是我之前在网上无意间找个一个利用tcpdump 抓包工具获取mysql流量,并通过过滤把sql 语句输入。 脚本不是很长,但是效果很好。 #!/bin/bash #this script used montor mysql network traffic.
997 0
+关注
lfreeali
熟悉oracle数据库性能优化,rman备份,数据库恢复技术.
文章
问答
文章排行榜
最热
最新
相关电子书
更多
SQL Server 2017
立即下载
SQL Sever迁移PG经验
立即下载
Comparison of Spark SQL with Hive
立即下载