|
|
转到底部
|
|
文档内容
|
|
用途 |
| 提出问题,得到帮助,并分享您的心得 |
|
|
要求 |
|
|
配置 |
|
|
说明 |
| 根据所有版本数超过100 的游标的 SQL_ID 生成报告(10g 和更高版本) |
| 根据所有版本数超过 100 的游标的 HASH_VALUE 生成报告 |
| 对 SQL_ID 等于 cyzznbykb509s 的游标生成报告 |
|
|
Script |
|
|
示例输出 |
|
|
参考 |
适用于:
Oracle Database - Enterprise Edition - 版本 9.2.0.1 和更高版本Oracle Database - Personal Edition - 版本 9.2.0.1 和更高版本
Oracle Database - Standard Edition - 版本 9.2.0.1 和更高版本
本文档所含信息适用于所有平台
文档中的视图和函数必须安装在 SYS 模式并且以 SYS 用户执行(/ as sysdba)。
该脚本可以运行在 9iR2,10gR1,10gR2,11gR1,11gR2。
用途
该函数基于 v$sql_shared_cursor 视图生成汇总报告,并根据原因代码添加额外的诊断信息。它会统计 v$sql_shared_cursor 视图中任意字段为 'Y' 的 SQL 版本记录和所有字段都 'N' 的 SQL 版本记录。这个脚本在判断 SQL 语句有过高版本数的原因时特别有用,对诊断以下 ORA-600[17059] 错误也可能有用。
对于报告中列出的 SQL 版本数的产生原因,请参考以下 note:
Document 296377.1 Troubleshooting: High Version Count Issues
Document 1377446.1 Troubleshooting Performance Issues
此函数不会取代 Oracle 支持人员要求的 v$sql_shared_cursor 输出。
提出问题,得到帮助,并分享您的心得
您想和其他 Oracle 客户,Oracle 雇员和行业专家对本话题进行更深入的探讨么?
点击这里加入讨论,您可以提出问题,得到别人的帮助,并分享您的心得。
点击这里访问 My Oracle Support 社区数据库性能优化主页,发现其他文章和有帮助的主题讨论。
要求
这个视图和函数必须用 SYS 用户连接到 DB 上安装(使用 / as sysdba连接),同时也必须用 SYS 用户运行使用。
这个函数可以输入 hash_value 或 sql id(10g版本和更高版本)作为参数。
配置
connect / as sysdba start version_rpt3_24.sql
说明
根据所有版本数超过100 的游标的 SQL_ID 生成报告(10g 和更高版本)
set pages 2000 lines 100 SELECT b.* FROM v$sqlarea a , TABLE(version_rpt(a.sql_id)) b WHERE loaded_versions >=100; /*如果是11.2.0.3或者包含了patch 10187168, 那么设置为30 */
根据所有版本数超过 100 的游标的 HASH_VALUE 生成报告
set pages 2000 lines 100 SELECT b.* FROM v$sqlarea a , TABLE(version_rpt(NULL,a.hash_value)) b WHERE loaded_versions>=100; /*如果是11.2.0.3或者包含了patch 10187168, 那么设置为30 */
对 SQL_ID 等于 cyzznbykb509s 的游标生成报告
set pages 2000 lines 100
SELECT * FROM TABLE(version_rpt('cyzznbykb509s'));
对于已经包含了patch 10187168的数据库版本, _CURSOR_OBSOLETE_THRESHOLD的默认值是100. 因为这个值被认为太低,所以已经被增长到了1024
对于包含了patch 10187168的数据库版本比如11.2.0.3, 我们应该用一个比较小的值作为LOADED_VERSIONS (而不是大于100)
当然如果你或者你的应用程序需要,也可以把它增加到300或更高
参照
Document 10187168.8 Bug 10187168 - Enhancement to obsolete parent cursors if VERSION_COUNT exceeds a threshold
注意:在11g数据库及以上版本,这个脚本只会对因为 BIND* 原因导致的废弃的游标做统计, 详见"Consolidated details for BIND* columns"部分。,如果要统计其它废弃的游标,你需要查询 v$SQL 视图,并且用 IS_OBSOLETE='Y' 作为条件统计行数。
该版本报告脚本试图通过检查 IS_OBSOLETE 字段来统计废弃的游标。但是这个字段在 V$SQLAREA 视图中仅仅为了向后兼容---不管游标废弃与否,它的值都是 ’N’。对于某条 SQL 语句,不管有多少 parent cursor 或者被废弃的游标存在,V$SQLAREA 中只显示一行记录。
警告
Script
请参考文章的附件。
示例输出
Note:438755.1 Version Count Report Version 3.2.4 -- Today's Date 05-jun-15 15:53
RDBMS Version :11.2.0.3.0 Host: XXX Instance 1 : XXX
==================================================================
Addr: 000000006D687E40 Hash_Value: 275110491 SQL_ID b6bkg4n86bqkv
Sharable_Mem: 163488 bytes Parses: 4 Execs:20
Stmt:
0 SELECT COUNT(*) AMC FROM T WHERE X=:B1
1
Versions Summary
----------------
OPTIMIZER_MISMATCH :3
OPTIMIZER_MODE_MISMATCH :6
BIND_LENGTH_UPGRADEABLE :8
Total Versions:11
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
cursor_sharing = EXACT
_cursor_obsolete_threshold = 100 (See Note:10187168.8)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Plan Hash Value Summary
-----------------------
Plan Hash Value Count
=============== =====
2966233522 12
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Details for OPTIMIZER_MISMATCH :
3 versions with statistics_level = all
3 versions with sqlstat_enabled = true
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Details for OPTIMIZER_MODE_MISMATCH :
3 versions with RULE
6 versions with ALL_ROWS
3 versions with FIRST_ROWS
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Details for BIND_LENGTH_UPGRADEABLE :
Consolidated details for BIND* columns:
BIND_MISMATCH,USER_BIND_PEEK_MISMATCH,BIND_UACS_DIFF,BIND_LENGTH_UPGRADEABLE,etc and
BIND_EQUIV_FAILURE (Mislabled as ROW_LEVEL_SEC_MISMATCH BY bug 6964441 in 11gR1)
from v$sql_bind_capture
COUNT(*) POSITION MIN(MAX_LENGTH) MAX(MAX_LENGTH) DATATYPE BIND GRADUATION (PRECISION,SCALE)
======== ======== =============== =============== ======== =============== =================
12 1 32 2000 1 Yes (,)
SUM(DECODE(column,Y, 1, 0) FROM V$SQL
IS_OBSOLETE IS_BIND_SENSITIVE IS_BIND_AWARE IS_SHAREABLE
=========== ================= ============= ============
0 0 0 4
####
To further debug Ask Oracle Support for the appropiate level LLL.
alter session set events
'immediate trace name cursortrace address 275110491, level LLL';
To turn it off do use address 1, level 2147483648
================================================================
在11g数据库及以上版本,这个脚本只会对因为 BIND* 原因导致的废弃的游标做统计, 详见"Consolidated details for BIND* columns"部分。,如果你想统计其它废弃的游标,你必须查询 v$SQL 视图,并且用 IS_OBSOLETE='Y' 作为条件统计行数。
该版本报告脚本试图通过检查 IS_OBSOLETE 字段来统计废弃的游标。但是这个字段在 V$SQLAREA 视图中仅仅为了向后兼容---不管游标废弃与否,它的值都是’N’。对于某条 SQL 语句,不管有多少 parent cursor 或者被废弃的游标存在,在 V$SQLAREA 中只显示一行记录。
参考
NOTE:8922013.8 - Bug 8922013 - OERI [17059] / excess child cursors for SQL referencing REMOTE objectsNOTE:1377446.1 - * Troubleshooting Performance Issues
NOTE:120655.1 - VIEW: "V$SQL_SHARED_CURSOR" Reference Note
NOTE:296377.1 - Troubleshooting: High Version Count Issues

version_rpt3_23.sql