Oracle 数据库之最:你见过最高的 SQL Version 是多少?

Oracle数据库中执行的SQL,很多时候会因为种种原因产生多个不同的执行版本,一个游标的版本过多很容易引起数据库的性能问题,甚至故障。

有时候一个SQL的版本数量可能多达数万个,以下是我之前在"云和恩墨大讲堂”分享过的一个案例。这个报告中的 SQL,最高达到了26万个 SQL 版本。算是我见过的“之最”之一。

产生SQL多版本的原因很多,通过如下的一些测试我们可以稍微来看看如何分析和找到可能的原因。

以下作为一个基础测试数据,一条基本的SQL查询:


create table t1(c1 int, c2 nvarchar2(100));
alter system flush shared_pool;
var b1 number;
var b2 varchar2(10);
exec :b1 := 1;
exec :b2 := '0';
select /* test */ * from t1 where c1 = :b1 and c2 = :b2 order by c2;



如果我们修改了优化器参数、环境变量、绑定变量等,都可能使得SQL发生重新解析,产生不同的子游标,也就是不同的VERSION。

Rem 这里我们修改了NLS_SORT参数,
Rem 再来查看SQL的游标数。
SQL> alter session set nls_sort = 'SCHINESE_RADICAL_M';

Session altered.

REM 注意,以上第一个Child就是因为
REM 语言不匹配产生的(LANGUAGE_MISMATCH)

REM 以下修改了优化器模式,
REM 又一个新的子游标将会因此而产生。

REM 可以看到,第二个子游标是因为优化器
REM 模式不匹配产生的,OPTIMIZER_MODE_MISMATCH.
REM 以下步骤,我们绑定了不同长度的绑定变量,
REM 由此又可能产生新的SQL版本。

REM 我们看到的第三个子游标就是
REM 因为绑定变量长度不同而产生的。

从Oracle 9i开始,Oracle对中文语言方式(Simplified Chinese和Traditional Chinese)提供了多种排序方式。主要由以下四种,大家可以进行修改尝试:

SCHINESE_RADICAL_M   针对简体中文,按照部首(第一顺序)、笔划(第二顺序)排序
SCHINESE_STROKE_M    针对简体中文,按照笔划(第一顺序)、部首(第二顺序)排序
SCHINESE_PINYIN_M       针对简体中文,按照拼音排序
TCHINESE_RADICAL_M    针对繁体中文,按照部首(第一顺序)、笔划(第二顺序)排序
TCHINESE_STROKE_M     针对繁体中文,按照笔划(第一顺序)、部首(第二顺序)排序

当然可以逐一尝试:

以上测试是基于11.2.0.3版本,在Oracle 12c中,相关的可能因素已经多达64个,参考官方手册可以了解 V$SQL_SHARED_CURSOR 的更详细信息。

本文出自数据和云公众号,原文链接

时间: 2024-09-03 13:37:55

Oracle 数据库之最:你见过最高的 SQL Version 是多少?的相关文章

oracle 数据库用的plsql工具,执行的sql按F5查看cpu耗费,请教高手帮忙解答!

问题描述 oracle 数据库用的plsql工具,执行的sql按F5查看cpu耗费,请教高手帮忙解答! 主要区别在于走索引,走了索引,耗费降低,但是执行速度变慢了,但是不走索引,执行速度变快了,但是耗费上升!请问原因是什么?是不是意味着,耗费越高,执行速度越快吗?还是两者没有必然联系?我们在设计sql时,是要先考虑哪方面? 解决方案 楼主 你知不知道索引的意思? 索引类似书的目录结构,按照索引查找执行速度怎么变慢了呢? 至于耗费和速度的关系就如同你跑步一样的 你费力气点跑,就跑的快一点 你省力气

Oracle数据库12c release 2优化器详解

序言:优化器是Oracle数据库最引人入胜的部件之一,因为它对每一个SQL语句的处理都必不可少.优化器为每个SQL语句确定最有效的执行计划,这是基于给定的查询的结构,可用的关于底层对象的统计信息,以及所有与优化器和执行相关的特性. 本文来自Oracle 白皮书翻译(译者:苏旭辉 newkid),介绍了在Oracle数据库12c第二版中与优化器和统计信息相关的所有新特性并且提供了简单的,可再现的例子,使得你能够更容易地熟悉它们,尤其是当你从早先的版本进行迁移的时候.它还概括了已有的功能是如何被增强

ASP高级技巧:在ASP中使用Oracle数据库

oracle|高级|技巧|数据|数据库 Oracle是世界上用得最多的数据库之一,活动服务器网页(ASP)是一种被广泛用于创建动态网页的功能强大的服务器端脚本语言.许多ASP开发人员一直在考虑,能否在开发互联网应用.电子商务网站.互联网管理系统时结合使用ASP和Oracle数据库?这个问题的答案是肯定的,我们还可以使用VB访问Oracle数据库.在本篇文章中,我们将主要讨论如何使用ASP来处理Oracle数据库中数据的方法. 在开始讨论这个问题前,我们需要了解几个背景知识,Oracle Obje

J2EE应用中与Oracle数据库的连接

j2ee|oracle|数据|数据库 在J2EE应用程序开发中,应用程序与数据库连接的建立是我们经常遇到的问题之一.在这里我主要谈谈在本地应用程序中通过OCI方式.thin方式和JdbcOdbc桥方式连接Oracle数据库,在iPlanet Application Server 6.5和Sun Java System Application Server 7中对Oracle数据库连接池的配置以及应用中如何从连接池中获得连接. 一.本地通过JDBC获得Oracle数据库连接 通过JDBC获得Ora

SQL Server数据库和Oracle数据库的区别

区别|数据|数据库|oracle|sqlserver 多年来,在微软的支持者和甲骨文的支持者之间一直持续着一场旷日持久的唇枪舌战.这边说Oracle数据库有如此这般功能,那边又说SQL Server这些个那些个特性,各持己见.可是,这并不是关键所在.诚然,性能是评价数据库优劣的重要指标之一,能够帮您完成您需要它完成的任务当然要更胜一筹.但是,你知不知道这两家公司和他们各自产品的真正区别在哪里?而你又知不知道微软为什么能够有轻轻打个喷嚏就能震动整个业界的影响力呢? 答案很简单,两个字:信息.微软以

在ASP中使用Oracle数据库

Oracle是世界上用得最多的数据库之一,活动服务器网页(ASP)是一种被广泛用于创建动态网页的功能强大的服务器端脚本语言.许多ASP开发人员一直在考虑,能否在开发互联网应用.电子商务网站.互联网管理系统时结合使用ASP和Oracle数据库?这个问题的答案是肯定的,我们还可以使用VB访问Oracle数据库.在本篇文章中,我们将主要讨论如何使用ASP来处理Oracle数据库中数据的方法. 在开始讨论这个问题前,我们需要了解几个背景知识,Oracle Objects for OLE就是其中之一.Or

在ASP中使用Oracle数据库技巧(一)

 Oracle是世界上用得最多的数据库之一,活动服务器网页(ASP)是一种被广泛用于创建动态网页的功能强大的服务器端脚本语言.许多ASP开发人员一直在考虑,能否在开发互联网应用.电子商务网站.互联网管理系统时结合使用ASP和Oracle数据库?这个问题的答案是肯定的,我们还可以使用VB访问Oracle数据库.在本篇文章中,我们将主要讨论如何使用ASP来处理Oracle数据库中数据的方法. 在开始讨论这个问题前,我们需要了解几个背景知识,Oracle Objects for OLE就是其中之一.O

在ASP中使用Oracle数据库技巧

Oracle是世界上用得最多的数据库之一,活动服务器网页(ASP)是一种被广泛用于创建动态网页的功能强大的服务器端脚本语言.许多ASP开发人员一直在考虑,能否在开发互联网应用.电子商务网站.互联网管理系统时结合使用ASP和Oracle数据库?这个问题的答案是肯定的,我们还可以使用VB访问Oracle数据库.在本篇文章中,我们将主要讨论如何使用ASP来处理Oracle数据库中数据的方法. 在开始讨论这个问题前,我们需要了解几个背景知识,Oracle Objects for OLE就是其中之一.Or

SQL Server与Oracle数据库在安全性上的异同

前言:Oracle数据库和SQL Server数据库是两种应用比较普遍的数据库,在业界,人们普遍认为Oracle数据库的安全性要比SQL Server数据库高,但实际情况Oracle数据库和SQL Server数据库二者又有着怎么的差别,下面笔者就来谈谈这两种数据库在安全性设计上面的异同.掌握好这些内容,对于我们进行数据库安全方面的设计与管理,有着举足轻重的作用. 一.角色到用户的授权. 现在很多应用软件,包括数据库系统,都采用了角色到用户的授权体系.也就是说,先给一个角色进行授权,然后再把用户