|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
曾经的功能列表可能会迅速变得过时了。而且,有些功能对有的应用程序非常重要,但是对别的应用程序则不一定。oracle|数据|数据库|统计ORACLE数据库的PL/SQL语句实行的优化器,有基于价值的优化器(CBO)和基于划定规矩的优化器(RBO)。
RBO的优化体例,依附于一套严厉的语律例则,只需依照划定规矩写出的语句,不论数据表和索引的内容是不是产生变更,不会影响PL/SQL语句的"实行企图"。
CBO自ORACLE7版被引进,ORACLE自7版以来接纳的很多新手艺都是只基于CBO的,如星型毗连分列查询,哈希毗连查询,反向索引,索引表,分区表和并行查询等。CBO盘算各类大概"实行企图"的"价值",即cost,从当选用cost最低的计划,作为实践运转计划。各"实行企图"的cost的盘算依据,依附于数据表中数据的统计散布,ORACLE数据库自己对该统计散布是不分明的,必要剖析表和相干的索引,才干汇集到CBO所需的数据。
CBO是ORACLE保举利用的优化体例,要想利用好CBO,使SQL语句发扬最年夜效能,必需包管统计数据的实时性。
统计信息的天生能够有完整盘算法和抽样预算法。SQL例句以下:
完整盘算法:analyzetableabccomputestatistics;
抽样预算法(抽样20%):analyzetableabcestimatestatistiCSSample20percent;
对表作完整盘算所花的工夫相称于做全表扫描,抽样预算法因为接纳抽样,比完整盘算法的天生统计速率要快,假如不是请求要有准确数据的话,只管接纳抽样剖析法。倡议对表剖析接纳抽样预算,对索引剖析能够接纳完整盘算。
我们能够接纳以下两种办法,对数据库的表和索引及簇表按期剖析天生统计信息,包管使用的一般功能。
1.在体系设置准时义务,实行剖析剧本。
在数据库服务器端,我们以UNIX用户oracle,运转剧本analyze,在analyze中,我们天生待实行sql剧本,并运转。(假定我们要剖析scott用户下的一切表和索引)
Analyze剧本内容以下:
sqlplusscott/tiger<<EOF
setpagesize5000
setheadingoff
SPOOLANALYTAB.SQL
SELECTANALYZETABLESCOTT.||TABLE_NAME||ESTIMATESTATISTICSSAMPLE20PERCENT;FROMUSER_TABLES;
SPOOLOFF
SPOOLANALYIND.SQL
SELECTANALYZETABLESCOTT.||TABLE_NAME||ESTIMATESTATISTICSSAMPLE20PERCENTFORALLINDEXES;FROMUSER_TABLES;
SPOOLOFF
SPOOLANALYZE.LOG
@ANALYTAB.SQL
@ANALYIND.SQL
SPOOLOFF
EXIT
在UNIX平台上crontab到场,以上文件,设置为每月或符合的工夫段运转。
2.使用ORACLE供应的程序包(PACKAGE)对相干的数据库工具举行剖析。
有以下的程序包能够对表,索引,簇表举行剖析。
包中的存储历程的相干参数注释以下:
TYPE能够是:TABLE,INDEX,CLUSTER中其一。
SCHEMA为:TABLE,INDEX,CLUSTER的一切者,NULL为以后用户。
NAME为:相干工具的称号。
METHOD是:ESTIMATE,COMPUTE,DELETE中其一,中选用ESTIMATE,
上面两项,ESTIMATE_ROWS和ESTIMATE_PERCENT不克不及同
时为空值。
ESTIMATE_ROWS是:预算的抽样行数。
ESTIMATE_PERCENT是:预算的抽样百分比。
METHOD_OPT是:有以下选项,
FORTABLE/*只统计表*/
[FORALL[INDEXED]COLUMNS][SIZEN]/*只统计有索引的表列*/
FORALLINDEXES/*只剖析统计相干索引*/
PARTNAME是:指定要剖析的分区称号。
1)
DBMS_DDL.ANALYZE_OBJECT(
TYPEVARCHAR2,
SCHEMAVARCHAR2,
NAMEVARCHAR2,
METHODVARCHAR2,
ESTIMATE_ROWSNUMBERDEFAULTNULL,
ESTIMATE_PERCENTNUMBERDEFAULTNULL,
METHOD_OPTVARCHAR2DEFAULTNULL,
PARTNAMEVARCHAR2DEFAULTNULL);
该存储历程可对特定的表,索引和簇表举行剖析。
比方,对SCOTT用户的EMP表,举行50%的抽样剖析,参数以下:
DBMS_DDL.ANALYZE_OBJECT(TABLE,SCOTT,EMP,ESTIMATE,NULL,50);
2)
DBMS_UTILITY.ANALYZE_SCHEMA(
SCHEMAVARCHAR2,
METHODVARCHAR2,
ESTIMATE_ROWSNUMBERDEFAULTNULL,
ESTIMATE_PERCENTNUMBERDEFAULTNULL,
METHOD_OPTVARCHAR2DEFAULTNULL);
DBMS_UTILITY.ANALYZE_DATABASE(
METHODVARCHAR2,
ESTIMATE_ROWSNUMBERDEFAULTNULL,
ESTIMATE_PERCENTNUMBERDEFAULTNULL,
METHOD_OPTVARCHAR2DEFAULTNULL);
个中,ANALYZE_SCHEMA用于对某个用户具有的一切TABLE,INDEX和CLUSTER的剖析统计。
ANALYZE_DATABASE用于对全部数据库举行剖析统计。
3)DBMS_STATS是在ORACLE8I中新增的程序包,它使统计数据的天生和处置加倍天真便利,而且能够并行体例天生统计数据。在程序包中的以下历程分离剖析统计TABLE,INDEX,SCHEMA,DATABASE级其余信息。
DBMS_STATS.GATHER_TABLE_STATS
DBMS_STATS.GATHER_INDEX_STATS
DBMS_STATS.GATHER_SCHEMA_STATS
DBMS_STATS.GATHER_DATABASE_STATS
在这里,我们以数据库JOB的体例,准时对数据库中SCOTT形式下一切的表和索引举行剖析:
在SQL*PLUS下运转:
VARIABLEjobnonumber;
BEGIN
DBMS_JOBS.SUBMIT(:jobno,
dbms_utility.analyze_schema("scott","estimate",NULL,20);,
sysdate,sysdate+30);
commit;
end;
/
Statementprocessed.
Printjobno
JOBNO
-------------
16
以上功课,每隔一个月用DBMS_UTILITY.ANALYZE_SCHEMA对用户SCOTT的一切表,簇表和索引作统计剖析当然,或许这并不是我们拒绝MySQL的一个有说服力的MySQL学习教程,但是对于一些比较守旧的IT经理来说,在为一些关键业务选择平台的时候,平台的成熟性却是必须要考虑的一个因素,在这一点上,MySQL无疑毫无优势。 |
|