`

常用的dbms 包介绍

 
阅读更多

首先介绍:dbms_rowid

DBMS_ROWID包主要是用来获得数据库块的block number,object number等信息

常用的选项有下:

ROWID_BLOCK_NUMBER Function

Returns the block number of a ROWID

根据ROWID获取数据块的NUMBER

SQL> select * from T4
2 ;

ID NAME
———- ——————–
1 seagull80
2 liguohua80

SQL> select dbms_rowid.rowid_block_number(rowid) from T4;

DBMS_ROWID.ROWID_BLOCK_NUMBER(ROWID)
————————————
1514
1514

这个常用来DUMP数据块号,分析

ROWID_CREATE Function

Creates a ROWID, for testing only

用来创建ROWID,一般用来测试

格式如下:

BMS_ROWID.ROWID_CREATE (
rowid_type IN NUMBER,
object_number IN NUMBER,
relative_fno IN NUMBER,
block_number IN NUMBER,
row_number IN NUMBER)
RETURN ROWID;

ROWID_RELATIVE_FNO Function

Returns the file number of a ROWID

返回ROWID所在文件号

SQL> select dbms_rowid.rowid_relative_fno(rowid) from T4;

DBMS_ROWID.ROWID_RELATIVE_FNO(ROWID)
————————————
6
6

SQL> select dbms_rowid.rowid_relative_fno(rowid), dbms_rowid.rowid_block_number(rowid) from T4;

DBMS_ROWID.ROWID_RELATIVE_FNO(ROWID) DBMS_ROWID.ROWID_BLOCK_NUMBER(ROWID)
———————————— ————————————
6 1514
6 1514

ROWID_ROW_NUMBER Function

Returns the row number

返回行号

还有如下几个,大家可以参照官方文档

ROWID_TO_ABSOLUTE_FNO Function

Returns the absolute file number associated with the ROWID for a row in a specific table

ROWID_TO_EXTENDED Function

Converts a ROWID from restricted format to extended

ROWID_TO_RESTRICTED Function

Converts an extended ROWID to restricted format

ROWID_TYPE Function

Returns the ROWID type: 0 is restricted, 1 is extended

ROWID_VERIFY Function

Checks if a ROWID can be correctly extended by the ROWID_TO_EXTENDED function

ROWID_INFO Procedure

Returns the type and components of a ROWID

ROWID_OBJECT Function

Returns the object number of the extended ROWID

第2个包:dbms_utility

可以用来将数据块地址转换为块的地址和文件块号

比如我们在分析索引接受时就可以用到

SQL> create index ind_dbms on T4(id);

索引已创建。

SQL> select object_id from dba_objects where object_name=’IND_DBMS’;

OBJECT_ID
———-
54147

SQL> alter session set events ‘immediate trace name treedump level 54147′;

会话已更改。

—– begin tree dump
leaf: 0×1000b74 16780148 (0: nrow: 2 rrow: 2)
—– end tree dump

我们可以将叶块地址16780148转换为叶块所在文件和块号

SQL> select dbms_utility.data_block_address_file(16780148) “file”,
2 dbms_utility.data_block_address_block(16780148) “block” from dual;

file block
———- ———-
4 2932

当然相应我们可以夸大表结构然后重建索引,可以DUMP索引结果的分支快啥的

从汪海BLOG看到如下信息:

unique index和non-unique index它的构造是不一样
的。对于unique index,它的branch block里面只保存key value和leaf block的address,因为根据这
2个值就可以定位当新值插入时会选择哪个leaf block进行插入,leaf block里面的值也没必要按照rowid的顺序排列了,只需要按照key value排序就行了。但是如果是non-unique index,branch block
里面必须保存key value,leaf block的address,和rowid。在leaf block里面如果key value相同的话
要按照rowid做升序排列,我个人觉得这样做会有2个好处,一个是可以提高相同一个leaf block内相同key value能尽量关联到相同的data block。第2个好处是当插入新的相同key value时能很容易定位插入到哪个block。为了能做到这些,non-unique index必须在branch block里面放入rowid

功能模块有如下:

ACTIVE_INSTANCES Procedure

Returns the active instance

ANALYZE_DATABASE Procedure

Analyzes all the tables, clusters, and indexes in a database [see alsoDeprecated Subprograms]

ANALYZE_PART_OBJECT Procedure

Analyzes the given tables and indexes

ANALYZE_SCHEMA Procedure

Analyzes all the tables, clusters, and indexes in a schema [see also Deprecated Subprograms]

CANONICALIZE Procedure

Canonicalizes a given string

COMMA_TO_TABLE Procedures

Converts a comma-delimited list of names into a PL/SQL table of names

COMPILE_SCHEMA Procedure

Compiles all procedures, functions, packages, and triggers in the specified schema

CREATE_ALTER_TYPE_ERROR_TABLE Procedure

Creates an error table to be used in the EXCEPTION clause of the ALTER TYPE statement

CURRENT_INSTANCE Function

Returns the current connected instance number

DATA_BLOCK_ADDRESS_BLOCK Function

Gets the block number part of a data block address

DATA_BLOCK_ADDRESS_FILE Function

Gets the file number part of a data block address

DB_VERSION Procedure

Returns version information for the database

EXEC_DDL_STATEMENT Procedure

Executes the DDL statement in parse_string

FORMAT_CALL_STACK Function

Formats the current call stack

FORMAT_ERROR_BACKTRACE Function

Formats the backtrace from the point of the current error to the exception handler where the error has been caught

FORMAT_ERROR_STACK Function

Formats the current error stack

GET_CPU_TIME Function

Returns the current CPU time in 100th’s of a second

GET_DEPENDENCY Procedure

Shows the dependencies on the object passed in.

GET_HASH_VALUE Function

Computes a hash value for the given string

GET_PARAMETER_VALUE Function

Gets the value of specified init.ora parameter

GET_TIME Function

Finds out the current time in 100th’s of a second

INVALIDATE Procedure

Invalidates a database object and (optionally) modifies its PL/SQL compiler parameter settings

IS_CLUSTER_DATABASE Function

Finds out if this database is running in cluster database mode

MAKE_DATA_BLOCK_ADDRESS Function

Creates a data block address given a file number and a block number

NAME_RESOLVE Procedure

Resolves the given name

NAME_RESOLVE Procedure

Calls the parser to parse the given name

PORT_STRING Function

Returns a string that uniquely identifies the version of Oracle and the operating system

TABLE_TO_COMMA Procedures

Converts a PL/SQL table of names into a comma-delimited list of names

VALIDATE Procedure

Converts a PL/SQL table of names into a comma-delimited list of names

这些东西了解下OK,具体用的时候可以看下

第三个dbms_stats

用来收集对象信息比如表 索引,这些信息对于CBO下产生计划有着重要的影响

统计信息包括下面几类:

表统计:包括记录数、block数和记录平均长度。

列统计:列中不同值的数量(NVD)、空值的数量和数据分布(HISTOGRAM)。

索引统计:索引叶块的数量、索引的层数和聚集因子(CLUSTERING FACTOR)。

系统统计:I/O性能和利用率和CPU性能和利用率。

生成统计信息:

统计信息生成技术包括三种:

基于数据采样的估计方式;

精确计算方式;

用户自定义的统计信息收集方式;

其中采用估算方式可以指定总记录数的估算百分比或者总块数的估算百分比。

分区表的统计信息分为几级:分区表的整体信息、分区的统计信息和子分区的统计信息。

最常用的收集统计信息的方式包括:DBMS_STATS包和ANALYZE语句,Oracle推荐使用DBMS_STATS包来收集统计信息。

dbms_stats.gather_database_stats:收集数据库中所有对象的统计信息;
在CREATE INDEX和ALTER INDEX REBUILD时可以指定COMPUTE STATISTICS语句,对于非分区表重建索引时会收集表、列和索引的统计信息。对于分区表,只收集索引信息,不会收集表和列信息。

可以在将METHOD_OPT参数设置为“FOR ALL HIDDEN COLUMNS SIZE N”来收集函数索引的索引表达式信息。
Oracle根据下列条件来决定使用哪些索引:

索引中的记录数;

索引中不同键值的数量;

索引的层数;

索引中的叶块数;

聚集因子;

每个键值平均叶块数;

如果两个索引的选择性、查询代价和集势都相同,那么优化器会根据索引名称的字母顺序选

常用的有如下:

DBMS_STATS包中用于收集统计信息的过程包括:

dbms_stats.gather_table_stats 收集表、列和索引的统计信息;
dbms_stats.gather_schema_stats 收集SCHEMA下所有对象的统计信息;
dbms_stats.gather_index_stats 收集索引的统计信息;
dbms_stats.gather_system_stats 收集系统统计信息。
dbms_stats.delete_table_stats 删除表的统计信息

dbms_stats.delete_index_stats 删除索引的统计信息
dbms_stats.export_table_stats 输出表的统计信息
dbms_stats.create_state_table
dbms_stats.set_table_stats 设置 表的统计
dbms_stats.auto_sample_size

要注意的是,在删除统计信息前最好做个备份以免删除后发生问题用来恢复。

导出 导入 收集、删除统计信息可以:按数据库 数据字典 用户 表 索引来进行

其他可以作为了解

ALTER_DATABASE_TAB_MONITORING Procedure
ALTER_SCHEMA_TAB_MONITORING Procedure
ALTER_STATS_HISTORY_RETENTION Procedure
CONVERT_RAW_VALUE Procedures
CONVERT_RAW_VALUE_NVARCHAR Procedure
CONVERT_RAW_VALUE_ROWID Procedure
CREATE_STAT_TABLE Procedure
DELETE_COLUMN_STATS Procedure
DELETE_DATABASE_STATS Procedure
DELETE_DICTIONARY_STATS Procedure
DELETE_FIXED_OBJECTS_STATS Procedure
DELETE_INDEX_STATS Procedure
DELETE_SCHEMA_STATS Procedure
DELETE_SYSTEM_STATS Procedure
DELETE_TABLE_STATS Procedure
DROP_STAT_TABLE Procedure
EXPORT_COLUMN_STATS Procedure
EXPORT_DATABASE_STATS Procedure
EXPORT_DICTIONARY_STATS Procedure
EXPORT_FIXED_OBJECTS_STATS Procedure
EXPORT_INDEX_STATS Procedure
EXPORT_SCHEMA_STATS Procedure
EXPORT_SYSTEM_STATS Procedure
EXPORT_TABLE_STATS Procedure
FLUSH_DATABASE_MONITORING_INFO Procedure
GATHER_DATABASE_STATS Procedures
GATHER_DICTIONARY_STATS Procedure
GATHER_FIXED_OBJECTS_STATS Procedure
GATHER_INDEX_STATS Procedure
GATHER_SCHEMA_STATS Procedures
GATHER_SYSTEM_STATS Procedure
GATHER_TABLE_STATS Procedure
GENERATE_STATS Procedure
GET_COLUMN_STATS Procedures
GET_INDEX_STATS Procedures
GET_PARAM Function
GET_STATS_HISTORY_AVAILABILITY Function
GET_STATS_HISTORY_RETENTION Function
GET_SYSTEM_STATS Procedure
GET_TABLE_STATS Procedure
IMPORT_COLUMN_STATS Procedure
IMPORT_DATABASE_STATS Procedure
IMPORT_DICTIONARY_STATS Procedure
IMPORT_FIXED_OBJECTS_STATS Procedure
IMPORT_INDEX_STATS Procedure
IMPORT_SCHEMA_STATS Procedure
IMPORT_SYSTEM_STATS Procedure
IMPORT_TABLE_STATS Procedure
LOCK_SCHEMA_STATS Procedure
LOCK_TABLE_STATS Procedure
PREPARE_COLUMN_VALUES Procedures
PREPARE_COLUMN_VALUES_NVARCHAR2 Procedure
PREPARE_COLUMN_VALUES_ROWID Procedure
PURGE_STATS Procedure
RESET_PARAM_DEFAULTS Procedure
RESTORE_DATABASE_STATS Procedure
RESTORE_DICTIONARY_STATS Procedure
RESTORE_FIXED_OBJECTS_STATS Procedure
RESTORE_SCHEMA_STATS Procedure
RESTORE_SYSTEM_STATS Procedure
RESTORE_TABLE_STATS Procedure
SET_COLUMN_STATS Procedures
SET_INDEX_STATS Procedures
SET_PARAM Procedure
SET_SYSTEM_STATS Procedure
SET_TABLE_STATS Procedure
UNLOCK_SCHEMA_STATS Procedure
UNLOCK_TABLE_STATS Procedure
UPGRADE_STAT_TABLE Procedure
以DBMS_STATS.GATHER_SCHEMA_SATTS为例

exec dbms_stats.gather_schema_stats( -
ownname => ‘SCOTT’, -
options => ‘GATHER AUTO’, -
estimate_percent => dbms_stats.auto_sample_size, -
method_opt => ‘for all columns size repeat’, -
degree => 15 -
)

为了充分认识dbms_stats的好处,你需要仔细体会每一条主要的预编译指令(directive)。下面让我们研究每一条指令,并体会如何用它为基于代价的SQL优化器收集最高质量的统计数据。

options参数
使用4个预设的方法之一,这个选项能控制Oracle统计的刷新方式:

gather——重新分析整个架构(Schema)。
gather empty——只分析目前还没有统计的表。
gather stale——只重新分析修改量超过10%的表(这些修改包括插入、更新和删除)。
gather auto——重新分析当前没有统计的对象,以及统计数据过期(变脏)的对象。注意,使用gather auto类似于组合使用gather stale和gather empty。
注意,无论gather stale还是gather auto,都要求进行监视。如果你执行一个alter table xxx monitoring命令,Oracle会用dba_tab_modifications视图来跟踪发生变动的表。这样一来,你就确切地知道,自从上一次分析统计数据以来,发生了多少次插入、更新和删除操作。

estimate_percent选项
以下estimate_percent参数是一种比较新的设计,它允许Oracle的dbms_stats在收集统计数据时,自动估计要采样的一个segment的最佳百分比:
estimate_percent => dbms_stats.auto_sample_size

要验证自动统计采样的准确性,你可检视dba_tables sample_size列。一个有趣的地方是,在使用自动采样时,Oracle会为一个样本尺寸选择5到20的百分比。记住,统计数据质量越好,CBO做出的决定越好。

method_opt选项
dbms_stats的method_opt参数尤其适合在表和索引数据发生变化时刷新统计数据。method_opt参数也适合用于判断哪些列需要直方图(histograms)。

某些情况下,索引内的各个值的分布会影响CBO是使用一个索引还是执行一次全表扫描的决策。例如,假如在where子句中指定的值的数量不对称,全表扫描就显得比索引访问更经济。

如果你有一个高度倾斜的索引(某些值的行数不对称),就可创建Oracle直方图统计。但在现实世界中,出现这种情况的机率相当小。使用CBO时,最常见的错误之一就是在CBO统计中不必要地引入直方图。根据经验,只有在列值要求必须修改执行计划时,才应使用直方图。

为了智能地生成直方图,Oracle为dbms_stats准备了method_opt参数。在method_opt子句中,还有一些重要的新选项,包括skewonly,repeat和auto:
method_opt=>’for all columns size skewonly’
method_opt=>’for all columns size repeat’
method_opt=>’for all columns size auto’

skewonly选项会耗费大量处理时间,因为它要检查每个索引中的每个列的值的分布情况。

假如dbms_stat发现一个索引的各个列分布得不均匀,就会为那个索引创建直方图,帮助基于代价的SQL优化器决定是进行索引访问,还是进行全表扫描访问。例如,在一个索引中,假定有一个列在50%的行中,如清单B所示,那么为了检索这些行,全表扫描的速度会快于索引扫描。
–*************************************************************
– SKEWONLY option—Detailed analysis

– Use this method for a first-time analysis for skewed indexes
– This runs a long time because all indexes are examined
–*************************************************************

begin
dbms_stats.gather_schema_stats(
ownname => ‘SCOTT’,
estimate_percent => dbms_stats.auto_sample_size,
method_opt => ‘for all columns size skewonly’,
degree => 7
);
end;
重新分析统计数据时,使用repeat选项,重新分析任务所消耗的资源就会少一些。使用repeat选项(清单C)时,只会为现有的直方图重新分析索引,不再搜索其他直方图机会。定期重新分析统计数据时,你应该采取这种方式。
–**************************************************************
– REPEAT OPTION - Only reanalyze histograms for indexes
– that have histograms

– Following the initial analysis, the weekly analysis
– job will use the “repeat” option. The repeat option
– tells dbms_stats that no indexes have changed, and
– it will only reanalyze histograms for
– indexes that have histograms.
–**************************************************************
begin
dbms_stats.gather_schema_stats(
ownname => ‘SCOTT’,
estimate_percent => dbms_stats.auto_sample_size,
method_opt => ‘for all columns size repeat’,
degree => 7
);
end;
使用alter table xxx monitoring;命令来实现Oracle表监视时,需要使用dbms_stats中的auto选项。如清单D所示,auto选项根据数据分布以及应用程序访问列的方式(例如通过监视而确定的一个列的工作量)来创建直方图。使用method_opt=>’auto’类似于在dbms_stats的option参数中使用gather auto。
begin
dbms_stats.gather_schema_stats(
ownname => ‘SCOTT’,
estimate_percent => dbms_stats.auto_sample_size,
method_opt => ‘for all columns size auto’,
degree => 7
);
end;

并行收集
Oracle允许以并行方式来收集CBO统计数据,这就显著提高了收集统计数据的速度。但是,要想并行收集统计数据,你需要一台安装了多个CPU的SMP服务器。

更快的执行速度
dbms_stats是提高SQL执行速度的一种出色机制。通过使用dbms_stats来收集最高质量的统计数据,CBO能够正确判断执行任何SQL查询时的最快途径。dbms_stats还在不断地改进。目前,它的一些令人激动的新特性(自动样本大小和自动直方图生成)已经显著简化了Oracle专家的工作。

明天继续。。。先介绍这三个。。

from:http://www.oralife.cn/html/2008/309_dbm.html

分享到:
评论

相关推荐

    Oracle随机函数之dbms_random使用详解

    dbms_random是oracle提供的一个随机函数包,以下介绍一些dbms_random的常用示例: dbms_random.value用法: 生成一个大于等于0,小于等于1的38位小数 代码如下: — FUNCTION value RETURN NUMBER; select dbms_...

    数据库原理(第5版)

    但如果希望深入理解特定的DBMS或使用本书没有介绍的DBMS产品,则需要额外的书籍或资料。Prentice Hall提供了Microsoft Access 2010和其他DBMS产品的大量图书,可以结合本书一起学习。 Access工作台 本书的这一版继续...

    python入门到高级全栈工程师培训 第3期 附课件代码

    03 Form组件之常用标签示例 04 Form组件之动态绑定数据 第60章 Django序列化共6课 第61章 01 上节内容回顾 02 上传文件 03 制作上传按钮 04 Form组件上传文件 05 上传相关内容梳理 06 Model操作知识提问 07 ...

    数据库设计方法.doc

    用户明确对新系统各种要求、确定新系统边界 常用调查思路方法有: 跟班作业、开调查会、请专人介绍、询问、设计调查表请用户填写、查阅记录 分析和表达用户需求思路方法主要包括自顶向下和自底向上两类思路方法 自顶...

    数据库管理系统(1).doc

    下面简要介绍几种 常用的数据库管理系统。 Oracle Oracle是一个最早商品化的关系型数据库管理系统,也是应用广泛、功能强大的数 据库管理系统。Oracle作为一个通用的数据库管理系统,不仅具有完整的数据管理功能 ,...

    数据库管理系统.doc

    "四类防火墙 " "包过滤防火墙 2、应用网关防火墙 3、状态检测防火墙 4、复合型防火墙 " "四类防火墙的对比 " "包过滤防火墙:包过滤防火墙不检查数据区,包过滤防火墙不建立连接状态" "表,前后报文无关,应用层...

    Java高级程序设计实战教程第八章-Java数据库编程.pptx

    8.2.2 JDBC连接数据库 JDBC简介 之前我们介绍的数据库访问技术都是Microsoft提出的,主要用于Windows平台上Microsoft开发环境下的数据库连接和操作。而JDBC(Java Data Base Connectivity,Java数据库连接)是Java...

    oracle学习文档 笔记 全面 深刻 详细 通俗易懂 doc word格式 清晰 连接字符串

    ORACLE用户是学习ORACLE数据库中的基础知识,下面就介绍下类系统常用的默认ORACLE用户: 1. sys用户:超级用户,完全是个SYSDBA(管理数据库的人)。拥有dba,sysdba,sysoper等角色或权限。是oracle权限最高的用户,...

    计算机应用基础知识概述.doc

    常用的办公软件包的结构功能与应用将在第3章中详细介绍。 (2)多媒体制作软件 多媒体制作软件是用于录制、播放、编辑声音和图像等多媒体信息的一组应用程序。 包括处理声音的 Wave Studio、Sound O'LD、Mixer等软件...

    计算机应用基础知识概述(3).doc

    常用的办公软件包的结构功能与应用将在第3章中详细介绍。 〔2多媒体制作软件 多媒体制作软件是用于录制、播放、编辑声音和图像等多媒体信息的一组应用程序。 包括处理声音的 Wave Studio、Sound O'LD、Mixer等软件和...

    计算机应用基础知识概述(1).doc

    常用的办公软件包的结构功能与应用将在第3章中详细介绍。 (2)多媒体制作软件 多媒体制作软件是用于录制、播放、编辑声音和图像等多媒体信息的一组应用程序。 包括处理声音的 Wave Studio、Sound O'LD、Mixer等软件...

    计算机应用基础知识概述(2).doc

    常用的办公软件包的结构功能与应用将在第3章中详细介绍. 〔2〕多媒体制作软件 多媒体制作软件是用于录制、播放、编辑声音和图像等多媒体信息的一组应用程序. 包括处理声音的 Wave Studio、Sound O'LD、Mixer等软件和...

    Visual Foxpro 6 0教程 html格式

    1998年发布了可视化编程语言集成包Visual Stadio 6.0 ,本课程介绍的Visual FoxPro 6.0(中文版)就是其中的一员。它是可运行于Windows95/98,Windows NT 平台的32位数据库开发系统。它是能充分发挥32位微处理器的...

    PLSQLDeveloper下载

    这里简单介绍两种常用数据类型:number、varchar2。 number 用来存储整数和浮点数。范围为1e130~10e125,其使用语法为: number[(precision, scale)] 其中(precision, scale)是可选的,precision表示所有数字的...

    SQL必知必会(第3版)--详细书签版

    常用操作速查 -13 扉页 -11 版权 -10 版权声明 -9 前言 -8 致谢 -5 目录 -4 第1章 了解SQL 1 1.1 数据库基础 1 1.1.1 什么是数据库 2 1.1.2 表 2 1.1.3 列和数据类型 3 1.1.4 行 4 1.1.5 主键 4 1.2 什么是...

    PL/SQL Developer8.04官网程序_keygen_汉化

    这里简单介绍两种常用数据类型:number、varchar2。  number 用来存储整数和浮点数。范围为1e130~10e125,其使用语法为: number[(precision, scale)] 其中(precision, scale)是可选的,precision表示所有数字的...

    构建最高可用Oracle数据库系统 Oracle 11gR2 RAC管理、维护与性能优化

    10.2 Grid Infrastructure常用的管理工具 10.2.1 OLSNODES工具 10.2.2 CRSCTL工具 10.2.3 SRVCTL工具 10.2.4 OIFCFG接口配置工具 10.3验证工具CVU 10.3.1基于阶段的验证 10.3.2 Grid Infrastructure安装阶段...

    Toad 使用快速入门

    Toad 使用快速入门 目录 一.Toad功能综述 二....三....四....1. Schema browser的用法简介 2. SQL Editor的使用介绍 3. Procedure Editor的...  要用Toad对存储过程进行debug,必须安装Oracle的系统包:dbms_debug...

    Oracle SQL高级编程(资深Oracle专家力作,OakTable团队推荐)--随书源代码

    6.2.5 深入理解DBMS_XPLAN的细节 156 6.2.6 使用计划信息来解决问题 161 6.3 小结 169 第7章 高级分组 170 7.1 基本的GROUP BY用法 171 7.2 HAVING子句 174 7.3 GROUP BY的“新”功能 175 7.4 GROUP BY的CUBE...

Global site tag (gtag.js) - Google Analytics