oracle查询数据做标记,【学习笔记】Oracle如何使用dbms_shared_pool.markhot标记热对象...

【学习笔记】Oracle如何使用dbms_shared_pool.markhot标记热对象

时间:2016-10-30 20:17   来源:Oracle研究中心   作者:HTZ   点击:

天萃荷净

Oracle研究中心学习笔记:分享一篇关于markhot过程在11gr2中引用,但是在11gr2中是不可见的,在12C中可见。此过程常常用于解决一些由于高并发引起的mutex争用。

下面内容来至12C官方文档

MARKHOT Procedure

This procedure marks a library cache object as a hot object.

Syntax

DBMS_SHARED_POOL.MARKHOT (

schema VARCHAR2,

objname VARCHAR2,

namespace NUMBER DEFAULT 1, global BOOLEAN DEFAULT TRUE);

DBMS_SHARED_POOL.MARKHOT (

hash VARCHAR2,

namespace NUMBER DEFAULT 1,

global BOOLEAN DEFAULT TRUE);

Parameters

Table 142-4 MARKHOT Procedure Parameters

Parameter

Description

schema

User name or the schema to which the object belongs

objname

Name of the object

namespace

Number indicating the library cache namespace in which the object is to be searched. Views, such asUSER_OBJECTS and DBA_OBJECTS, reflect the namespace as a number column, as do most dictionary tables such as OBJ$.

global

IfTRUE (default), mark the object hot on all Oracle RAC instances

hash

16-byte hash value for the object

UNMARKHOT Procedure

This procedure unmarks a library cache object as a hot object.

Syntax

DBMS_SHARED_POOL.UNMARKHOT (

schema VARCHAR2,

objname VARCHAR2,

namespace NUMBER DEFAULT 1, global BOOLEAN DEFAULT TRUE);

DBMS_SHARED_POOL.UNMARKHOT (

hash VARCHAR2,

namespace NUMBER DEFAULT 1,

global BOOLEAN DEFAULT TRUE);

Parameters

Table 142-8 UNMARKHOT Procedure Parameters

Parameter

Description

schema

User name or the schema to which the object belongs

objname

Name of the object

namespace

Number indicating the library cache namespace in which the object is to be searched

global

IfTRUE (default), unmark the object hot on all Oracle RAC instances

hash

16-byte hash value for the object

其实这里还可以通过_kgl_debug参数来实现

下面测试如果在11gr2环境中配置

1,配置_kgl_hot_object_copies参数的值

此参数默认值为CPU的个数,参数是静态参数,修改后需要重启数据库才生效

oracleplus.net> @parameter_hide.sql

Enter Search Parameter (i.e. max|all) : _kgl_hot_object_copies

PARAMETER SESSION_VALUE INSTANCE_VALUE DESCRIPTION

—————————————- ——————– ——————– ————————————

_kgl_hot_object_copies 0 0 Number of copies for the hot object

oracleplus.net> alter system set "_kgl_hot_object_copies"=100 scope=spfile;

System altered.

2,查找HOT对象

oracleplus.net> @db_kgl_hot_object.sql

oracleplus.net> set echo off;

Enter value for order_locked_or_pinned: pinned

CURSOR ADDRESS NAME HASH_VALUE TYPE LOCKED_TOTAL PINNED

———- —————- —————————————————————————————————- ————- ————— —————- ———-

Child 0 00000000DE707410 select /*+ rule */ bucket_cnt, row_cnt, cache_cnt, null_cnt, timestamp#, sample_size, minimum, maxim 864012087 CURSOR 15 1146

um, distcnt, lowval, hival, density, col#, spare1, spare2, avgcln from hist_head$ where obj#=:1 and

intcol#=:2

………….

Parent 00000000DE6FAA28 DBMS_STANDARD 2095250116 PACKAGE 35 35

Parent 00000000DE52B3C8 DBMS_SPACE_ADMIN 2253886596 PACKAGE BODY 1 35

这里以包,包体,SQL语句为例来配置

3,配置hot对象

这里需要查询对包,包体,SQL语句对应的namespace的ID号

oracleplus.net> @library_cache_namespace_to_id.sql

KGLSTDSC KGLSTIDN

—————————————————————- ———-

SQL AREA 0 SQL语句

TABLE/PROCEDURE 1 包

BODY 2 包体

oracleplus.net> exec dbms_shared_pool.markhot(‘SYS’, ‘DBMS_STANDARD’, 1);

PL/SQL procedure successfully completed.

oracleplus.net> exec dbms_shared_pool.markhot(‘SYS’, ‘DBMS_SPACE_ADMIN’, 2);

PL/SQL procedure successfully completed.

在配置SQL HASH VALUE的时候,我们需要注意的是16-byte hash value for the object

oracleplus.net> select kglnahsv from x$kglob where kglnahsh=864012087 and kglhdadr =kglhdpar;

KGLNAHSV

——————————–

6d11d7de2049577d933d2385337fc737

oracleplus.net> exec DBMS_SHARED_POOL.MARKHOT(hash => ‘6d11d7de2049577d933d2385337fc737’, namespace => 0);

PL/SQL procedure successfully completed.

4,查询已经配置的HOT对象

oracleplus.net> @db_kgl_hot_object_configured.sql

II OWNER OBJECT_NAME HASH_VALUE OBJECT_TYPE SQL_ID HOT

— ————— —————————————————————————————————- ————– ————– ————— —

1 SYS DBMS_STANDARD 2095250116 PACKAGE HOT

1 SYS DBMS_STANDARD 3231142607 CURSOR HOT

1 SYS DBMS_SPACE_ADMIN 2253886596 PACKAGE BODY HOT

1 select kernelcols, initrans, maxtrans, nvl(tab#, 0), ts#, file#, block#, property from tab$ where o 1324598591 CURSOR 8d5zjux7g7j9z HOT

bj# = :1

1 select /*+ rule */ bucket_cnt, row_cnt, cache_cnt, null_cnt, timestamp#, sample_size, minimum, maxim 864012087 CURSOR 96g93hntrzjtr HOT

um, distcnt, lowval, hival, density, col#, spare1, spare2, avgcln from hist_head$ where obj#=:1 and

intcol#=:2

5 取消已经配置的HOT对象

oracleplus.net> exec DBMS_SHARED_POOL.UNMARKHOT(hash => ‘6d11d7de2049577d9Oracleoracleplus.net33d2385337fc737’, namespace => 0);

PL/SQL procedure successfully completed.

oracleplus.net> @db_kgl_hot_object_configured.sql

II OWNER OBJECT_NAME HASH_VALUE OBJECT_TYPE SQL_ID HOT

— ————— —————————————————————————————————- ————– ————– ————— —

1 SYS DBMS_STANDARD 2095250116 PACKAGE HOT

1 SYS DBMS_STANDARD 3231142607 CURSOR HOT

1 SYS DBMS_SPACE_ADMIN 2253886596 PACKAGE BODY HOT

1 select kernelcols, initrans, maxtrans, nvl(tab#, 0), ts#, file#, block#, property from tab$ where o 1324598591 CURSOR 8d5zjux7g7j9z HOT

bj# = :1

这里看到864012087这条SQL已经取消了。

本文固定链接: http://www.htz.pw/2014/09/13/dbms_shared_pool-markhot%e6%a0%87%e8%af%86%e7%83%ad%e5%af%b9%e8%b1%a1.html | 认真就输

--------------------------------------ORACLE-DBA----------------------------------------

最权威、专业的Oracle案例资源汇总之【学习笔记】Oracle如何使用dbms_shared_pool.markhot标记热对象

9bd101509341196819122f36086c9a60.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值