V$SQL_SHARED_CURSOR查看硬解析的原因

简介: 在查看ADDM报告的时候,有个改善意见如下:Finding 2: Hard Parse Due to Sharing CriteriaImpact is .

在查看ADDM报告的时候,有个改善意见如下:

Finding 2: Hard Parse Due to Sharing Criteria

Impact is .13 active sessions, 30.49% of total activity.

--------------------------------------------------------

SQL statements with the same text were not shared because of cursor

environment mismatch. This resulted in additional hard parses which were

consuming significant database time.

Common causes of environment mismatch are session NLS settings, SQL trace

settings and optimizer parameters.

 

Recommendation 1: Application Analysis

Estimated benefit is .13 active sessions, 30.49% of total activity.

-------------------------------------------------------------------

Action

Look for top reason for cursor environment mismatch in

V$SQL_SHARED_CURSOR.

 

解读如下:

一、问题说明:SQL在解析的时候如果库缓冲池中已经有意义的SQL语句,这时候就用通过一个父游标,如果相应的环境信息也一样,那么就公用一个子游标,这个时候就是软解析。从ADDM报告显示出来的信息表明,父游标的信息都是一样的,但是由于某种原因导致了不能共用子游标,而产生了硬解析;

 

二、原因查找:AWR报告也提供了查找原因的方法,通过查看视图V$SQL_SHARED_CURSOR

V$SQL_SHARED_CURSOR explains why a particular child cursor is not shared with existing child cursors. Each column identifies a specific reason why the cursor cannot be shared.

V$SQL_SHARED_CURSOR这个视图解释为什么一个特定的子游标不能共享已经存在的子游标,视图按照列的原因进行分类,这些列有两个选项Y|N;

Column

Datatype

Description

SQL_ID

VARCHAR2(13)

SQL identifier

ADDRESS

RAW(4 | 8)

Address of the parent cursor

CHILD_ADDRESS

RAW(4 | 8)

Address of the child cursor

CHILD_NUMBER

NUMBER

Child number

UNBOUND_CURSOR

VARCHAR2(1)

(Y|N) The existing child cursor was not fully built (in other words, it was not optimized)

SQL_TYPE_MISMATCH

VARCHAR2(1)

(Y|N) The SQL type does not match the existing child cursor

OPTIMIZER_MISMATCH

VARCHAR2(1)

(Y|N) The optimizer environment does not match the existing child cursor

OUTLINE_MISMATCH

VARCHAR2(1)

(Y|N) The outlines do not match the existing child cursor

STATS_ROW_MISMATCH

VARCHAR2(1)

(Y|N) The existing statistics do not match the existing child cursor

LITERAL_MISMATCH

VARCHAR2(1)

(Y|N) Non-data literal values do not match the existing child cursor

FORCE_HARD_PARSE

VARCHAR2(1)

(Y|N) For internal use

EXPLAIN_PLAN_CURSOR

VARCHAR2(1)

(Y|N) The child cursor is an explain plan cursor and should not be shared

BUFFERED_DML_MISMATCH

VARCHAR2(1)

(Y|N) Buffered DML does not match the existing child cursor

PDML_ENV_MISMATCH

VARCHAR2(1)

(Y|N) PDML environment does not match the existing child cursor

INST_DRTLD_MISMATCH

VARCHAR2(1)

(Y|N) Insert direct load does not match the existing child cursor

SLAVE_QC_MISMATCH

VARCHAR2(1)

(Y|N) The existing child cursor is a slave cursor and the new one was issued by the coordinator (or, the existing child cursor was issued by the coordinator and the new one is a slave cursor)

TYPECHECK_MISMATCH

VARCHAR2(1)

(Y|N) The existing child cursor is not fully optimized

AUTH_CHECK_MISMATCH

VARCHAR2(1)

(Y|N) Authorization/translation check failed for the existing child cursor

BIND_MISMATCH

VARCHAR2(1)

(Y|N) The bind metadata does not match the existing child cursor

DESCRIBE_MISMATCH

VARCHAR2(1)

(Y|N) The typecheck heap is not present during the describe for the child cursor

LANGUAGE_MISMATCH

VARCHAR2(1)

(Y|N) The language handle does not match the existing child cursor

TRANSLATION_MISMATCH

VARCHAR2(1)

(Y|N) The base objects of the existing child cursor do not match

BIND_EQUIV_FAILURE

VARCHAR2(1)

(Y|N) The bind value's selectivity does not match that used to optimize the existing child cursor

INSUFF_PRIVS

VARCHAR2(1)

(Y|N) Insufficient privileges on objects referenced by the existing child cursor

INSUFF_PRIVS_REM

VARCHAR2(1)

(Y|N) Insufficient privileges on remote objects referenced by the existing child cursor

REMOTE_TRANS_MISMATCH

VARCHAR2(1)

(Y|N) The remote base objects of the existing child cursor do not match

LOGMINER_SESSION_MISMATCH

VARCHAR2(1)

(Y|N) LogMiner Session parameters mismatch

INCOMP_LTRL_MISMATCH

VARCHAR2(1)

(Y|N) Cursor might have some binds (literals) which may be unsafe/non-data. Value mismatch.

OVERLAP_TIME_MISMATCH

VARCHAR2(1)

(Y|N) Mismatch caused by setting session parameter ERROR_ON_OVERLAP_TIME

EDITION_MISMATCH

VARCHAR2(1)

(Y|N) Cursor edition mismatch

MV_QUERY_GEN_MISMATCH

VARCHAR2(1)

(Y|N) Internal, used to force a hard-parse when analyzing materialized view queries

USER_BIND_PEEK_MISMATCH

VARCHAR2(1)

(Y|N) Cursor is not shared because value of one or more user binds is different and this has a potential to change the execution plan

TYPCHK_DEP_MISMATCH

VARCHAR2(1)

(Y|N) Cursor has typecheck dependencies

NO_TRIGGER_MISMATCH

VARCHAR2(1)

(Y|N) Cursor and child have no trigger mismatch

FLASHBACK_CURSOR

VARCHAR2(1)

(Y|N) Cursor non-shareability due to flashback

ANYDATA_TRANSFORMATION

VARCHAR2(1)

(Y|N) Is criteria for opaque type transformation and does not match

INCOMPLETE_CURSORFoot 1

VARCHAR2(1)

(Y|N) Cursor is incomplete: typecheck heap came from call memory

PDDL_ENV_MISMATCHFoot 2

VARCHAR2(1)

(Y|N) Environment setting mismatch for parallel DDL cursor (that is, one or more of the following parameter values have changed: PARALLEL_EXECUTION_ENABLED, PARALLEL_DDL_MODE, PARALLEL_DDL_FORCED_DEGREE, or PARALLEL_DDL_FORCED_INSTANCES)

TOP_LEVEL_RPI_CURSOR

VARCHAR2(1)

(Y|N) Is top level RPI cursor

DIFFERENT_LONG_LENGTH

VARCHAR2(1)

(Y|N) Value of LONG does not match

LOGICAL_STANDBY_APPLY

VARCHAR2(1)

(Y|N) Logical standby apply context does not match

DIFF_CALL_DURN

VARCHAR2(1)

(Y|N) If Slave SQL cursor/single call

BIND_UACS_DIFF

VARCHAR2(1)

(Y|N) One cursor has bind UACs and one does not

PLSQL_CMP_SWITCHS_DIFF

VARCHAR2(1)

(Y|N) PL/SQL anonymous block compiled with different PL/SQL compiler switches

CURSOR_PARTS_MISMATCH

VARCHAR2(1)

(Y|N) Cursor was compiled with subexecution (cursor parts were executed)

STB_OBJECT_MISMATCH

VARCHAR2(1)

(Y|N) STB is an internal name for a SQL Management Object Mismatch. A SQL Management Object Mismatch means that either a SQL plan baseline, or a SQL profile, or a SQL patch has been created for your SQL statement between the executions. Because a cursor is a read-only entity, a hard parse is forced to be able to create a new cursor that contains information about the new SQL management object related to this SQL statement.

CROSSEDITION_TRIGGER_MISMATCH

VARCHAR2(1)

(Y|N) The set of crossedition triggers to execute might differ

PQ_SLAVE_MISMATCH

VARCHAR2(1)

(Y|N) Top-level slave decides not to share cursor

TOP_LEVEL_DDL_MISMATCH

VARCHAR2(1)

(Y|N) Is top-level DDL cursor

MULTI_PX_MISMATCH

VARCHAR2(1)

(Y|N) Cursor has multiple parallelizers and is slave-compiled

BIND_PEEKED_PQ_MISMATCH

VARCHAR2(1)

(Y|N) Cursor based around bind peeked values

MV_REWRITE_MISMATCH

VARCHAR2(1)

(Y|N) Cursor needs recompilation because an SCN was used during compile time due to being rewritten by materialized view

ROLL_INVALID_MISMATCH

VARCHAR2(1)

(Y|N) Marked for rolling invalidation and invalidation window exceeded

OPTIMIZER_MODE_MISMATCH

VARCHAR2(1)

(Y|N) Parameter OPTIMIZER_MODE mismatch (for example, all_rows versus first_rows_1)

PX_MISMATCH

VARCHAR2(1)

(Y|N) Mismatch in one parameter affecting the parallelization of a SQL statement. For example, one cursor was compiled with parallel DML enabled while the other was not.

MV_STALEOBJ_MISMATCH

VARCHAR2(1)

(Y|N) Cursor cannot be shared because there is a mismatch in the list of materialized views which were stale at the time the cursor was built

FLASHBACK_TABLE_MISMATCH

VARCHAR2(1)

(Y|N) Cursor cannot be shared because there is a mismatch with triggers being enabled and/or referential integrity constraints being deferred

LITREP_COMP_MISMATCH

VARCHAR2(1)

(Y|N) Mismatch in use of literal replacement

PLSQL_DEBUG

VARCHAR2(1)

(Y|N) Value of the PLSQL_DEBUG parameter for the current session does not match the value used to build the cursor

LOAD_OPTIMIZER_STATS

VARCHAR2(1)

(Y|N) A hard parse is forced in order to initialize extended cursor sharing

ACL_MISMATCH

VARCHAR2(1)

(Y|N) Cached ACL evaluation result stored in the child cursor is not valid for the current session or user

FLASHBACK_ARCHIVE_MISMATCH

VARCHAR2(1)

(Y|N) Value of the FLASHBACK_DATA_ARCHIVE_INTERNAL_CURSOR parameter for the current session does not match the value used to build the cursor

根据上面的视图,很快就可以找到不能共享子游标的原因。

总结:最好的学习是实践,最好的实践机会是系统刚上线的时候,有幸经历了这么一个时刻,把之前快忘记的ORACLE知识又重新脑补了一下,也因此把之前比较零星的一些知识拼凑成了一个知识面。

*********************************************************************************************************************

本文作者:JOHN QQ:1916066696 (请备注数据库)

ORACLE技术博客:ORACLE 猎人笔记 http://blog.itpub.net/12679300/

******************************************************************************************************

相关文章
|
5月前
|
SQL 安全 关系型数据库
SQL注入之万能密码:原理、实践与防御全解析
本文深入解析了“万能密码”攻击的运行机制及其危险性,通过实例展示了SQL注入的基本原理与变种形式。文章还提供了企业级防御方案,包括参数化查询、输入验证、权限控制及WAF规则配置等深度防御策略。同时,探讨了二阶注入和布尔盲注等新型攻击方式,并给出开发者自查清单。最后强调安全防护需持续改进,无绝对安全,建议使用成熟ORM框架并定期审计。技术内容仅供学习参考,严禁非法用途。
748 0
|
4月前
|
SQL 存储 自然语言处理
SQL的解析和优化的原理:一条sql 执行过程是什么?
SQL的解析和优化的原理:一条sql 执行过程是什么?
SQL的解析和优化的原理:一条sql 执行过程是什么?
|
8月前
|
SQL Java 数据库连接
如何在 Java 代码中使用 JSqlParser 解析复杂的 SQL 语句?
大家好,我是 V 哥。JSqlParser 是一个用于解析 SQL 语句的 Java 库,可将 SQL 解析为 Java 对象树,支持多种 SQL 类型(如 `SELECT`、`INSERT` 等)。它适用于 SQL 分析、修改、生成和验证等场景。通过 Maven 或 Gradle 安装后,可以方便地在 Java 代码中使用。
2445 11
|
10月前
|
SQL Java 数据库连接
canal-starter 监听解析 storeValue 不一样,同样的sql 一个在mybatis执行 一个在数据库操作,导致解析不出正确对象
canal-starter 监听解析 storeValue 不一样,同样的sql 一个在mybatis执行 一个在数据库操作,导致解析不出正确对象
|
10月前
|
SQL IDE 数据库连接
IntelliJ IDEA处理大文件SQL:性能优势解析
在数据库开发和管理工作中,执行大型SQL文件是一个常见的任务。传统的数据库管理工具如Navicat在处理大型SQL文件时可能会遇到性能瓶颈。而IntelliJ IDEA,作为一个强大的集成开发环境,提供了一些高级功能,使其在执行大文件SQL时表现出色。本文将探讨IntelliJ IDEA在处理大文件SQL时的性能优势,并与Navicat进行比较。
155 4
|
11月前
|
SQL 监控 数据库
SQL语句是否都需要解析及其相关技巧和方法
在数据库管理中,SQL(结构化查询语言)语句的使用无处不在,它们负责数据的查询、插入、更新和删除等操作
|
10月前
|
SQL 监控 安全
员工上网行为监控软件:SQL 在数据查询监控中的应用解析
在数字化办公环境中,员工上网行为监控软件对企业网络安全和管理至关重要。通过 SQL 查询和分析数据库中的数据,企业可以精准了解员工的上网行为,包括基础查询、复杂条件查询、数据统计与分析等,从而提高网络管理和安全防护的效率。
153 0
|
11月前
|
SQL 数据可视化 BI
SQL语句及查询结果解析:技巧与方法
在数据库管理和数据分析中,SQL语句扮演着至关重要的角色
1307 0
|
11月前
|
SQL 监控 关系型数据库
SQL错误代码1303解析与处理方法
在SQL编程和数据库管理中,遇到错误代码是常有的事,其中错误代码1303在不同数据库系统中可能代表不同的含义
|
11月前
|
SQL 存储 关系型数据库
SQL默认索引是什么:深入解析与技巧
在SQL数据库中,索引是一种用于提高查询性能的重要数据结构

热门文章

最新文章

推荐镜像

更多
  • DNS