深爱那片海 发表于 2015-1-16 22:42:01

MYSQL编程:ORACLE数据库的统计数据及其天生体例

曾经的功能列表可能会迅速变得过时了。而且,有些功能对有的应用程序非常重要,但是对别的应用程序则不一定。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/*只统计表*/
COLUMNS]/*只统计有索引的表列*/
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无疑毫无优势。

若相依 发表于 2015-1-19 21:20:09

如安全管理、备份恢复、性能监控和调优等,SQL只要熟悉基本操作就可以,只要程序设计部分只要稍加了解即可(如存储过程、触发器等)。

再见西城 发表于 2015-1-25 22:06:57

其实可以做一下类比,Oracle等数据库产品老早就支持了java编程,而且提供了java池参数作为用户配置接口。但是现在有哪些系统大批使用了java存储过程?!连Oracle自己的应用都不用为什么?!

谁可相欹 发表于 2015-2-4 06:35:06

这一点很好的加强了profiler的功能。但是提到profiler提醒大家注意一点。windows2003要安装sp1补丁才能启动profiler。否则点击没有反应。

金色的骷髅 发表于 2015-2-9 17:46:26

无法深入到数据库系统层面去了解和探究

飘飘悠悠 发表于 2015-2-27 13:28:27

原来公司用过MYSQL自己也只是建个表写个SQL

只想知道 发表于 2015-3-9 06:25:43

数据库物理框架没有变动undo和redo都放在数据库得transaction中,个人感觉是个败笔。如果说我们在设计数据库的时候考虑分多个数据库,可能能在一定程度上避免I/O效率问题。

仓酷云 发表于 2015-3-16 20:57:01

不过话说回来了,绝大多数的性能优化准则与对sqlserver存储的结构理解息息相关

因胸联盟 发表于 2015-3-23 02:12:06

我是一个ERP初学者,对于前台运用基本熟悉,但对于后台SQLServer的运用一点也不懂,特想学习下相关资料。至少懂得一些基本的运用。希望各位能给于建议,小弟再谢过!
页: [1]
查看完整版本: MYSQL编程:ORACLE数据库的统计数据及其天生体例