常用的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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值