我的编程空间,编程开发者的网络收藏夹
学习永远不晚

怎么理解数据库的初始化参数cursor_sharing

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

怎么理解数据库的初始化参数cursor_sharing

本篇内容介绍了“怎么理解数据库的初始化参数cursor_sharing”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

一、Cursor_sharing 简介:

    这个参数是用来告诉Oracle在什么情况下可以共享游标,即SQL重用。

    Cursor_sharing参数有3个值可以设置:    

    1)、EXACT:通常来说,exact值是Oracle推荐的,也是默认的,它要求SQL语句在完全相同时才会重用,否则会被重新执行硬解析操作。     

    2)、SIMILAR:similar是在Oracle认为某条SQL语句的谓词条件可能会影响到它的执行计划时,才会被重新分析,否则将重用SQL。

    3)、FORCE:force是在任何情况下,无条件重用SQL。

   备注:上面所说的SQL重用,仅仅是指谓词条件不同的SQL语句,实际上这样的SQL基本上都在执行同样的业务操作。

二、在Cursor_sharing参数值不同的时对SQL的影响:

   2.1 创建实验环境:

----首先创建一张woo表---- 

WOO@woo> create table woo (id int,name varchar2(10));
Table created.
Elapsed: 00:00:00.06

---产生一些数据---- 

WOO@woo> insert into woo values(1,'aa');
1 row created.
Elapsed: 00:00:00.00
WOO@woo> insert into woo values(2,'bb');
1 row created.
Elapsed: 00:00:00.00
WOO@woo> insert into woo values(3,'cc');
1 row created.
Elapsed: 00:00:00.00
WOO@woo> insert into woo values (4,'dd');
1 row created.
Elapsed: 00:00:00.00
WOO@woo> commit;
Commit complete.
Elapsed: 00:00:00.00
WOO@woo> select * from woo;
        ID NAME
---------- ----------
         1 aa
         2 bb
         3 cc
         4 dd
Elapsed: 00:00:00.01

---创建下面实验将要用到的三张表----

WOO@woo> create table woo_exact as select * from woo;
Table created.
Elapsed: 00:00:00.01
WOO@woo> create table woo_similar as select * from woo;
Table created.
Elapsed: 00:00:00.01
WOO@woo> create table woo_force as select * from woo;
Table created.
Elapsed: 00:00:00.00

---查看当前session的trace文件的路径----

WOO@woo> SELECT d.Value || '/' || Lower(Rtrim(i.Instance, Chr(0))) || '_ora_' ||
  2         p.Spid || '.trc' AS "trace_file_name"
  3    FROM (SELECT p.Spid
  4            FROM V$mystat m, V$session s, V$process p
  5           WHERE m.Statistic# = 1
  6             AND s.Sid = m.Sid
  7             AND p.Addr = s.Paddr) p,
  8         (SELECT t.Instance
  9            FROM V$thread t, V$parameter v
 10           WHERE v.Name = 'thread'
 11             AND (v.Value = 0 OR t.Thread# = To_Number(v.Value))) i,
 12         (SELECT VALUE
 13            FROM V$parameter
 14           WHERE NAME = 'user_dump_dest') d;
trace_file_name
-------------------------------------------------------
/DBSoft/diag/rdbms/woo/woo/trace/woo_ora_37746.trc
Elapsed: 00:00:00.01

2.2 cursor_sharing=exact的情况:

WOO@woo>  alter session set cursor_sharing=exact;
Session altered.
Elapsed: 00:00:00.00
WOO@woo>  alter session set sql_trace=true;
Session altered.
Elapsed: 00:00:00.00
WOO@woo> select * from woo_exact where id=1;
        ID NAME
---------- ----------
         1 aa
Elapsed: 00:00:00.00
WOO@woo> select * from woo_exact where id=2;
        ID NAME
---------- ----------
         2 bb
Elapsed: 00:00:00.01
WOO@woo> select * from woo_exact where id=3;
        ID NAME
---------- ----------
         3 cc
Elapsed: 00:00:00.00
WOO@woo> select * from woo_exact where id=1;
        ID NAME
---------- ----------
         1 aa
Elapsed: 00:00:00.00

----从下面的查询可以看出执行了两次硬解析----

WOO@woo> select sql_text from v$sql where sql_text like 'select * from woo_exact where%';
SQL_TEXT
---------------------------------------------------------------------------------------
select * from woo_exact where id=1
select * from woo_exact where id=3
select * from woo_exact where id=2
Elapsed: 00:00:00.05
NAME                                                                  VALUE
---------------------------------------------------------------- ----------
ADG parselock X get attempts                                              0
ADG parselock X get successes                                             0
parse time cpu                                                          326
parse time elapsed                                                      307
parse count (total)                                                   56211
parse count (hard)                                                     1681
parse count (failures)                                                   10
parse count (describe)                                                    0
8 rows selected.

cursor_sharing=similar的情况:

WOO@woo> alter session set cursor_sharing=similar;
Session altered.
Elapsed: 00:00:00.00
WOO@woo> alter system flush shared_pool;
System altered.
Elapsed: 00:00:00.13
WOO@woo> select * from woo_similar where id=1;
        ID NAME
---------- ----------
         1 aa
Elapsed: 00:00:00.01
WOO@woo> select * from woo_similar where id=4;
        ID NAME
---------- ----------
         4 dd
Elapsed: 00:00:00.00
WOO@woo> select * from woo_similar where id=8;
no rows selected
Elapsed: 00:00:00.00

  ----在这里可以看到执行两次SQL查询,只进行了一个硬解析----

WOO@woo> select sql_text from v$sql where sql_text like 'select * from woo_similar where %';
SQL_TEXT
--------------------------------------------------------------------------------------------------------
select * from woo_similar where id=:"SYS_B_0"
Elapsed: 00:00:00.02
WOO@woo> select name,value from v$sysstat where name like '%parse%'; 
NAME                                                                  VALUE
---------------------------------------------------------------- ----------
ADG parselock X get attempts                                              0
ADG parselock X get successes                                             0
parse time cpu                                                          374
parse time elapsed                                                      352
parse count (total)                                                   57024
parse count (hard)                                                     2006
parse count (failures)                                                   10
parse count (describe)                                                    0
8 rows selected.
Elapsed: 00:00:00.00
WOO@woo>

     对于SIMILAR的情况,如果CBO发现被绑定变量的谓词还有其他的执行计划可以选择时,如果谓词条件的值有变化,就将会产生一个新的子游标,而不是重用之前的SQL;如果谓词没有其他的执行计划可选择,则忽略谓词的值,重用之前的SQL。

     上面的例子还不能足以说明该情况,接着下面的模拟:

 cursor_sharing=force的情况

WOO@woo> alter session set cursor_sharing=force;
Session altered.
Elapsed: 00:00:00.00
WOO@woo> alter system flush shared_pool;
System altered.
Elapsed: 00:00:00.07
 
WOO@woo> alter session set sql_trace=true;
Session altered.
Elapsed: 00:00:00.02
WOO@woo> select * from woo_force where id=1;
        ID NAME
---------- ----------
         1 aa
Elapsed: 00:00:00.00
WOO@woo> select * from woo_force where id=4;
        ID NAME
---------- ----------
         4 dd
Elapsed: 00:00:00.00
WOO@woo> select * from woo_force where id=1;
        ID NAME
---------- ----------
         1 aa
Elapsed: 00:00:00.00

  ----从下面的查询中可以看出只进行了一次硬解析,而且使用了绑定变量----

WOO@woo>  select sql_text from v$sql where sql_text like 'select * from woo_force where %';
SQL_TEXT
-------------------------------------------------------------------------------------------
select * from woo_force where id=:"SYS_B_0"
Elapsed: 00:00:00.02
WOO@woo> select name,value from v$sysstat where name like '%parse%'; 
NAME                                                                  VALUE
---------------------------------------------------------------- ----------
ADG parselock X get attempts                                              0
ADG parselock X get successes                                             0
parse time cpu                                                          379
parse time elapsed                                                      355
parse count (total)                                                   57385
parse count (hard)                                                     2145
parse count (failures)                                                   10
parse count (describe)                                                    0
8 rows selected.
Elapsed: 00:00:00.01

总结:force是在任何情况下,无条件重用SQL。  

“怎么理解数据库的初始化参数cursor_sharing”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注亿速云网站,小编将为大家输出更多高质量的实用文章!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

怎么理解数据库的初始化参数cursor_sharing

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

怎么初始化mysql数据库

初始化 mysql 数据库的方法有:使用 mysql 命令行:删除现有数据库并创建新的数据库;使用 mysql workbench:在“管理”菜单中选择“初始化数据库”;使用 navicat:在“工具”菜单中选择“初始化数据库”。如何初始化
怎么初始化mysql数据库
2024-08-05

mysql怎么初始化数据库

初始化 mysql 数据库包括创建数据库、用户、授予权限、创建表、插入数据、创建索引、设置自动增量、备份数据库以及优化配置,并考虑使用版本控制系统跟踪更改。如何初始化 MySQL 数据库初始化 MySQL 数据库涉及从头开始设置一个新的数
mysql怎么初始化数据库
2024-08-13

mysql初始化数据库失败怎么解决

要解决mysql数据库初始化失败问题,请遵循以下步骤:检查权限并确保使用有适当权限的用户。如果数据库已存在,请删除它或选择不同的名称。如果表格已存在,请删除它或选择不同的名称。检查sql语句是否存在语法错误。确认mysql服务器正在运行且可
mysql初始化数据库失败怎么解决
2024-04-14

云服务器怎么初始化数据库

要初始化一个数据库,请按照以下步骤操作:打开云服务器并登录到服务器:在云服务器的控制台中,右键单击选中服务器名称,在弹出菜单中选择“服务器配置”。然后选择“数据库连接”选项。在该选项下,将会看到“连接到MySQL的服务器”和“使用MySQL表和索引”两个选项。在“连接到MySQL的服务器”选项旁边的下拉菜单中,可以选择“创建默认数据库”或“创建自定义数
2023-10-26

mysql初始化数据库失败怎么办

若 mysql 初始化数据库失败,可通过以下步骤解决:1. 检查 mysql 配置文件,确认 datadir 指定数据目录路径、user 和 password 指定用户名和密码。2. 创建数据目录。3. 授予 mysql 所有者对数据目录及
mysql初始化数据库失败怎么办
2024-04-14

mysql下载初始化数据库失败怎么解决

mysql 初始化数据库失败可通过以下步骤解决:1. 检查安装程序版本;2. 确保管理员权限;3. 关闭其他应用程序;4. 重新配置 mysql 配置文件(取消注释 innodb_flush_log_at_trx_commit 并设置 in
mysql下载初始化数据库失败怎么解决
2024-04-22

mysql初始化数据库的方法是什么

要初始化一个数据库,可以通过以下步骤:登录MySQL数据库服务器,可以使用如下命令:mysql -u root -p输入密码以登录数据库服务器。创建一个新的数据库,可以使用如下命令:CREATE DATABASE dbname;这里的dbn
mysql初始化数据库的方法是什么
2024-05-06

mysql下载初始化数据库失败怎么办

初始化 mysql 数据库失败可能是由于以下原因:服务未启动权限不足数据库已存在配置问题磁盘空间不足数据库引擎错误其他未知原因(可查看日志文件)MySQL 下载初始化数据库失败的解决方案初始化 MySQL 数据库时遇到失败的情况,可能是以
mysql下载初始化数据库失败怎么办
2024-04-22

云服务器怎么初始化数据库设置

云服务器的初始化过程包括以下几个步骤:安装云服务器:首先,需要进行云服务器的安装,包括使用云服务器提供商的服务商提供的系统安装盘或者是在官网上下载相应的安装程序(如Apache、PHP、MySQL等),按照步骤进行安装即可。设置云服务器环境:在安装完成之后,需要在云服务器管理器中设置云服务器的环境,包括云服务器的IP地址、端口、服务类型等信息,以及设置相关的配置参数。初始化数据库:接下来需要进行云服务器的初始化工作...
2023-10-27

云服务器怎么初始化数据库设备

要初始化云服务器上的数据库设备,请按照以下步骤操作:确认设备已经连接到云服务器上。请确保您的服务器连接到正确的云服务提供商或云托管平台。打开控制台,以查看“数据库”选项卡,其中显示了您的数据库设备的连接状态和所需的配置选项。选择所需的设置选项。您可以从控制台菜单中选择“数据库”选项卡,然后按照默认设置进行配置。根据您的需要调整连接参数,以确保您的云服务器能够正确安装并配置必要的软件和设置。如果您需要管理...
2023-10-27

云服务器怎么初始化数据

云服务器的初始化可以分为两步:配置云服务器:在云服务器的控制台中选择“配置云服务器”,然后将“云服务器名称(VSSID)、网络位置(Nginx或者Apache)和服务端口设置为可用”。启动云服务器:在配置好的云服务器上运行以下命令进行启动:```privclobedstart;```在这个例子中,我们假设云服务器的VSSID和Apache地址均为可用。我们在控制台中运行了命令,在
2023-10-26

mysql下载初始化数据库失败怎么回事

mysql 初始化数据库失败的原因包括:1. 系统权限不足;2. 安装文件损坏;3. 防火墙或安全软件阻止连接;4. 数据库端口冲突;5. 磁盘空间不足;6. 操作系统版本不兼容;7. 环境变量问题;8. 损坏的配置文件;9. 之前的 my
mysql下载初始化数据库失败怎么回事
2024-04-22

编程热搜

目录