数据库

位置:IT落伍者 >> 数据库 >> 浏览文章

在PB中调用外部函数[1]


发布日期:2020年12月31日
 
在PB中调用外部函数[1]

ORACLE数据库的PL/SQL语句执行的优化器有基于代价的优化器(CBO)和基于规则的优化器(RBO)

RBO的优化方式依赖于一套严格的语法规则只要按照规则写出的语句不管数据表和索引的内容是否发生变化不会影响PL/SQL语句的执行计划

CBO自ORACLE 版被引入ORACLE自版以来采用的许多新技术都是只基于CBO的如星型连接排列查询哈希连接查询反向索引索引表分区表和并行查询等CBO计算各种可能执行计划代价即cost从中选用cost最低的方案作为实际运行方案执行计划的cost的计算根据依赖于数据表中数据的统计分布ORACLE数据库本身对该统计分布是不清楚的须要分析表和相关的索引才能搜集到CBO所需的数据

CBO是ORACLE推荐使用的优化方式要想使用好CBO使SQL语句发挥最大效能必须保证统计数据的及时性

统计信息的生成可以有完全计算法和抽样估算法

SQL例句如下

完全计算法 analyze table abc compute statistics;

抽样估算法(抽样%) analyze table abc estimate statistics sample percent;

对表作完全计算所花的时间相当于做全表扫描抽样估算法由于采用抽样比完全计算法的生成统计速度要快如果不是要求要有精确数据的话尽量采用抽样分析法建议对表分析采用抽样估算对索引分析可以采用完全计算

我们可以采用以下两种方法对数据库的表和索引及簇表定期分析生成统计信息保证应用的正常性能

在系统设置定时任务执行分析脚本

在数据库服务器端我们以UNIX用户oracle运行脚本analyze在analyze中我们生成待执行sql脚本并运行(假设我们要分析scott用户下的所有表和索引)

Analyze脚本内容如下

sqlplus scott/tiger 《 EOF

set pagesize

set heading off

SPOOL ANALYTABSQL

SELECT ANALYZE TABLE SCOTT||TABLE_NAME|| ESTIMATE STATISTICS SAMPLE PERCENT ; FROM USER_TABLES;

SPOOL OFF

SPOOL ANALYINDSQL

SELECT ANALYZE TABLE SCOTT||TABLE_NAME|| ESTIMATE STATISTICS SAMPLE PERCENT FOR ALL INDEXES; FROM USER_TABLES;

SPOOL OFF

SPOOL ANALYZELOG

@ANALYTABSQL

@ANALYINDSQL

SPOOL OFF

EXIT

在UNIX平台上crontab加入以上文件设置为每个月或合适的时间段运行

利用ORACLE提供的程序包(PACKAGE)对相关的数据库对象进行分析

有以下的程序包可以对表索引簇表进行分析

包中的存储过程的相关参数解释如下

TYPE可以是TABLEINDEXCLUSTER中其一

SCHEMA为TABLEINDEXCLUSTER的所有者NULL为当前用户

NAME为相关对象的名称

METHOD是ESTIMATECOMPUTEDELETE中其一当选用ESTIMATE

下面两项ESTIMATE_ROWS和ESTIMATE_PERCENT不能同时为空值

ESTIMATE_ROWS是估算的抽样行数

ESTIMATE_PERCENT是估算的抽样百分比

METHOD_OPT是有以下选项

FOR TABLE /*只统计表*/

[FOR ALL [INDEXED] COLUMNS] [SIZE N] /*只统计有索引的表列*/

FOR ALL INDEXES /*只分析统计相关索引*/

PARTNAME是指定要分析的分区名称

DBMS_DDLANALYZE_OBJECT(

TYPE VARCHAR

SCHEMA VARCHAR

NAME VARCHAR

METHOD VARCHAR

ESTIMATE_ROWS NUMBER DEFAULT NULL

ESTIMATE_PERCENT NUMBER DEFAULT NULL

METHOD_OPT VARCHAR DEFAULT NULL

PARTNAME VARCHAR DEFAULT NULL ) ;

该存储过程可对特定的表索引和簇表进行分析

[] []

               

上一篇:在PB中调用外部函数[2]

下一篇:在PB中实现数据录入维持序号连续性的简单实现[1]