librarycachepin与PROCEDURE的重建

2016-01-29 14:45 5 1 收藏

librarycachepin与PROCEDURE的重建,library cache pin与PROCEDURE的重建

【 tulaoshi.com - Oracle教程 】

    前面提到,Oracle10g重建Procedure的处理有所增强,最初看到这个增强的时候,我想这个增强是否可以减少困扰已久的Library Cache的竞争呢?

    我们看一下以下测试,首先在第一个session执行操作:

SQL create or replace PROCEDURE pining
2 IS
3 BEGIN
4 NULL;
5 END;
6 /

Procedure created.

SQL
SQL alter session set nls_date_format='yyyy-mm-dd hh24:mi:ss';

Session altered.

SQL create or replace procedure calling
2 is
3 begin
4 pining;
5 dbms_lock.sleep(60);
6 end;
7 /

Procedure created.

SQL
SQL col object_name for a30
SQL select object_name,last_ddl_time from dba_objects where object_name in ('PINING','CALLING');

OBJECT_NAME LAST_DDL_TIME
------------------------------ -------------------
CALLING 2007-04-02 09:12:57
PINING 2007-04-02 09:12:57

SQL
SQL exec calling;

 

[next]

此时Calling对于Pining的引用将会在Pining的Body上获得共享Pin,此时在另外一个Session执行重建Procedure的操作:

SQL create or replace PROCEDURE pining
2 IS
3 BEGIN
4 NULL;
5 END;
6 /

 

这个操作将一直挂起,直到第一个session的操作完成,此时在第三个session可以观察到Library Cache Pin的竞争:

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com)
SQL select sid,event from v$session where username='EYGLE'
2 /

SID EVENT
---------- ----------------------------------------------------------------
137 library cache pin
139 PL/SQL lock timer
157 SQL*Net message to client

当第一个session执行完成之后,第二个session的操作随之完成,我们可以看到LAST_DDL_TIME并未改变:

SQL exec calling;

PL/SQL procedure successfully completed.

SQL
SQL select object_name,last_ddl_time from dba_objects where object_name in ('PINING','CALLING');

OBJECT_NAME LAST_DDL_TIME
------------------------------ -------------------
CALLING 2007-04-02 09:12:57
PINING 2007-04-02 09:12:57

实际上session 2执行了一次无谓的Library Cache Pin,理想的方式应该是,Oracle能够判断之前的Library Cache Pin的模式,如果是共享模式,则可以跳过Pin请求,如果是排他模式,则必须等待,目前的处理并不能从实质上改变竞争。

不过并非全无益处,我们发现,对于另一类DDL操作,Oracle完全可以跳过Library Cache Pin的请求,这类操作是Grant,在以前版本中的行为可以参考:
http://www.eygle.com/archives/2004/10/shared_pool-5.html

[next]

在Oracle10g中,Grant授权操作无需再获得Library Cache Pin的排他锁,我们看以下测试:
在Session 1中执行:

09:40:18 SQL drop procedure calling;

Procedure dropped.

09:40:18 SQL
09:40:18 SQL drop procedure pining;

Procedure dropped.

09:40:18 SQL
09:40:18 SQL create or replace PROCEDURE pining
09:40:18 2 IS
09:40:18 3 BEGIN
09:40:18 4 NULL;
09:40:18 5 END;
09:40:18 6 /

Procedure created.

09:40:18 SQL
09:40:18 SQL alter session set nls_date_format='yyyy-mm-dd hh24:mi:ss';

Session altered.

09:40:18 SQL create or replace procedure calling
09:40:18 2 is
09:40:18 3 begin
09:40:18 4 pining;
09:40:18 5 dbms_lock.sleep(60);
09:40:18 6 end;
09:40:18 7 /

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com)

Procedure created.

09:40:18 SQL
09:40:18 SQL col object_name for a30
09:40:18 SQL select object_name,last_ddl_time from dba_objects where object_name in ('PINING','CALLING');

OBJECT_NAME LAST_DDL_TIME
------------------------------ -------------------
CALLING 2007-04-02 09:40:18
PINING 2007-04-02 09:40:18

09:40:18 SQL
09:40:18 SQL exec calling;

在Session 2执行授权:

SQL set time on
09:40:22 SQL grant execute on pining to sys;

Grant succeeded

来源:http://www.tulaoshi.com/n/20160129/1494094.html

延伸阅读
09年爱耳日的主题 2009年3月3日是第十次全国“爱耳日”。为了好本次“爱耳日”宣传教育活动,近日中残联等13部委发出:关于开展第十次全国“爱耳日”宣传教育活动的通知,要求各地要牢固树立以人为本的科学发展观,协调教育、民政、卫生、残联等相关部门,以县(区、市)为单位,及时成立全国“爱耳日&r...
标签: 丰胸
中国最漂亮乳房标准 1.美学的观点认为半球型、圆锥型的乳房是属于外形较理想的乳房。 2.两乳头间距离在22~26厘米之间,乳房微微自然向外倾。 3.乳房微微向上挺,厚约8~10厘米。 4.乳晕大小不超过1元硬币,颜色红润粉嫩,与乳房皮肤有明显的分界线,婚后色素沉着为褐色。 5.乳头应突出,不内陷,大小为乳晕直径的1/3。 6.中国女性完美...
标签: Web开发
演示地址     http://www.script8.com/works/sc/index.htm 背景介绍 对很多人来说,javaScript是一种颇为神秘的语言,这种语言由浏览器解析,可以实现很复杂的功能,但在实际中又使用甚少。在以相对定位为基础的网站体系中,js并不是必不可少的,最早的浏览器并不支持js,只需使用纯静态的html,也能建立功能...
标签: SQLServer
一、前言:在经过一段时间的存储过程开发之后,写下了一些开发时候的小结和经验与大家共享,希望对大家有益,主要是针对Sybase和SQL Server数据库,但其它数据库应该有一些共性。 二、适合读者对象:数据库开发程序员,数据库的数据量很多,涉及到对SP(存储过程)的优化的项目开发人员,对数据库有浓厚兴趣的人。 三、介绍:在数据库...
参考sys.dm_db_index_physical_stats 检查索引碎片情况 1.SELECT2.OBJECT_NAME(object_id) as objectname,3.object_id AS objectid,4.index_id AS indexid,5.partition_number AS partitionnum,6.avg_fragmentation_in_percent AS fra7.FROM sys.dm_db_index_physical_stats (DB_ID(), NULL, NULL , NULL, ‘LIMITED')8.WHERE avg_fragmentat...

经验教程

98

收藏

76
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部