制造一定的噪音或者声音。的英文翻译么说-会计凭证格式
2023年4月2日发(作者:曲轴油封)
Oracle数据库的数据统计(Analyze)
Oracl三字经全文解释及故事 e数据的优化器有两种优化方法:基于代价/成本的优化器(CBO)和基于规则的优化器(RBO),系统在对SQL
进行优化的时候,使用哪种优化决定于初始化参数OPTIMIZER_MODE,该参数值可以设置为:CHOOSE,RULE,
ALL_ROWS,FIRST_ROWS。在Oracle9i以后的版本中还引入了新的优化参数命令:卜算子咏梅赏析 FIRST_ROWS_1,
FIRST_ROWS_10,FIRST_ROWS_100,FIRST_ROWS_1000。(具体的说明将在以后的BLOG文章中介绍)Oracle
推荐使用CBO优化方式,当系统使用CBO方式优化SQL的时候,要使其执行计划达到最优化,需要定期执行数据统计,必
须保证统计数据的及时性,否则可能得不到预计的优化效果,或与预计的优化效果相差悬殊。
要对数据库对象生成统计信息,可以有以下方法:
完全统计法:analyzetabletable_namecomputestatistics;
抽样估计法:analyzetabletable_nameestimatestatisticssample30percent;
对表使用抽样估计法要比完全统计法的生成统计速度要快,但是统计数据可能不够精确。在开发过程中,我们可能要涉
及很多的表的查询,而我们在使用CBO的时候就需要经常对这些表执行分析统计,得到CBO所需要的统计数据。通常有以
下几种方法来收集统计信息:
1.导出所有需要分析的表的语句脚本,然后执行该脚本。重阳节诗词大全
SQL>SPOOLOFF;
SQL>SPOOLC:A敏于事而慎于言 NALYZE_TA
SQL>SELECT\'ANALYZETABLE\'||OWNER||\'.\'||TABLE_NAME||\'COMPUTESTATISTICS;\'FROM
ALL_TABLESWHEREOWNERNOTIN(\'SYS\',\'SYSTEM\');
然后调整一下脚本,并执行:
SQL>@C:ANALYZE_TA
可以将该脚本放到服务器端并设置自动执行。
2.使用Oracle提供的过程:DBMS_ZE_OBJECT,该过程可以对某个特定用户的特定表执行统计。例
如:
完全统计:
SQL>executedbms_ze_object(\'TABLE\',\'DINYAR\',\'DINYA_TEST01\',\'COMPUTE\');
PL/SQLproceduresuccessfullycompleted
SQL>
50%抽样统计
SQL>executedbms_ze_object(\'TABLE\',\'DINYAR\',\'DINYA_TEST01\',\'ESTIMATE\',NULL,50);
PL/SQLproceduresuccessfullycompleted
SQL>
可以使用该过程,生成分析统计数据库对象的脚本,并定时执行该脚本。
3.使用Oracle提供的过程DBMS_UTILITY.ANALYZE_SCHEMA该过程执行对某个特定用户下的TABLE,INDEX
和CLUSTER的分析统计。如:
完全统计SCHEMA下的所有对象:
SQL>execute孤蓬万里征的上一句 dbms_utilize_schema(\'DINYAR\',\'COMPUTE\');
PL/SQLproceduresuccessfullycompleted
Executedin6.9seconds
SQL>
抽样50%统计SCHEMA下的所有对象:
SQL>executedbms_utilize_schema(\'DINYAR\',\'ESTIMATE\',NULL,50);
PL/SQLproceduresuccessfullycompleted
Executedin1.933seconds
SQL>
从执行的时间上看,抽样统计的时间要比完全统计所花费的时间要短,执行的更快。
4.使用Oracle提供的过程DBMS_UTILITY.ANALYZE_DATABASE,该过程可以对整个数据库中的对象进行分析
统计。但需要当前登陆用户具备足够的权限,否则系统将提示出错。如:
SQL>executedbms_utilize_database(\'COMPUTE\');
begindbms_utilize_database(\'COMPUTE\');end;
ORA-20000:Youhaveinsufficientprivilegesforanobjectinthisdatabase.
ORA-06512:at\"_UTILITY\",line501
ORA-06512:atline1
SQL>
改换有DBA权限的用户登陆:
SQL>executedbms_utilize_database(\'COMPUTE\');
begindbms_utilize_database(\'COMPUTE\');end;
ORA-30657:operationnotsupportedonexternalorganizedtable
ORA-06512:at\"_DDL\",line179
ORA-06512:at\"_UTILITY\",line497
ORA-06512:atline1
SQL>
从上面的错误信息可以看出,不支持对外部表的分析统计,查看Oracle的解决办法,Oracle称不要试图做这项操作。
DBMS_UTILIZE_DATABASE的抽样分析统计和上例中类似。
5.使用Oracle提供的过程:DBMS_STATS,该包中的过程dbms_statr_index_st望海潮柳永朗读 ats,
DBMS_STATS.gather_table_stats,DBMS_STATS.gather_schema_stats,
DBMS_STATS.gather_database_stats,DBMS_STATS.gather_system_stats分别执行对索引、表、某个schema、
数据库、系统的统计信息。例如:
SQL>executedbms_stats.gather_table_stats(\'DINYAR\',\'DINYA_TEST01\');
PL/SQLproceduresuccessfullycompleted
Executedin0.29seconds
SQL>executedbms_stats.gather_schema_stats(\'DINYAR\');
PL/SQLproceduresuccessfullycompleted
Executedin7.07seconds
SQL>
(该包中还有其他的一些过程,可以对数据库的对象进行操作,不在这里讨论。)
6.定时执行分析统计,使用DBMS_JOB包,创建一个JOB,定时执行过程,对数据库对象进行分析统计:
PL/SQLproceduresuccessfullycompleted
Executedin0.581seconds
job_num
---------
41
SQL>
这样就可以在数据库中定时执行数据库对象统计信息的收集,保证了使用CBO优化器优化时优化路径的准确性。
SQL>analyzetableemployeecomputestatistics;
表已分析。
SQL>setautotraceon
SQL>selectcount(*)fromemployee;
COUNT(*)
----------
299999
ExecutionPlan
-----------------------感恩的名言警句 -----------------------------------
0SELECTSTATEMENTOptimizer=CHOOSE(Cost=7Card=1)
10SORT(AGGREGATE)
21BITMAPCONVERSION(COUNT)
32BITMAPINDEX(FASTFULLSCAN)OF\'IDX_BMP_EMP_SEX\'
Statistics
----------------------------------------------------------
153recursivecalls
0dbblockgets
96consistentgets
11physicalreads
0redosize
370bytessentviaSQL*Nettoclient
425bytesreceivedviaSQL*Netfromclient
2SQL*Netroundtripsto/fromclient
0sorts(memory)
0sorts(disk)
1rowsprocessed
SQL>analyzetableemployeedeletestatistics;
表已分析。
SQL>selectcount(*)fromemployee;
COUNT(*)
----------
299999
ExecutionPlan
----------------------------------------------------------
0SELECTSTATEMENTOptimizer=CHOOSE
10SORT(AGGREGATE)
21TABLEACCESS(FULL)OF\'EMPLOYEE\'
Statistics
----------------------------------------------------------误入藕花深处上一句
0recursivecalls
0dbblockgets
5418consistentgets
3144physicalreads
0redosize
370bytessentviaSQL*Nettoclient
425bytesreceivedviaSQL*Netfromclient
2SQL*Netroundtripsto/fromclient
0sorts(memory)
0sorts(disk)
1rowsprocessed
SQL>analyzetableempployeeESTIMATEstatistics;
analyzetableempployeeESTIMATEstatistics
*
ERROR位于第1行:
ORA-00942:表或视图不存在
SQL>analyzetableemployeeESTIMATEstatistics;
表已分析。
SQL>selectcount(*)fromemployee;
COUNT(*)
----------
299999
ExecutionPlan
----------------------------------------------------------
0SELECTSTATEMENTOptimizer=CHOOSE(Cost=7Card=1)
10SORT(AGGREGATE)
21BITMAPCONVERSION(COUNT)
32BITMAPINDEX(FASTFULLSCAN)OF\'IDX_BMP_EMP_SEX\'
Statistics
----------------------------------------------------------
0recursivecalls
0dbblockgets
12consistentgets
8physicalreads
0redosize
370bytessentviaSQL*Nettoclient
425bytesreceivedviaSQL白雪歌送武判官归京中的瀚海是指 *Netfromclient
2SQL*Netroundtripsto/fromclient
0sorts(memory)
0sorts(disk)
1rowsprocessed
SQL>analyzetableemployeedeletestatistics;
表已分析。
SQL>execDBMS_STATS.GATHER_table_STATS(ownname=>user,tabname=>\'employee\',method_opt=>\'forall
indexedcolumnssize1\');
PL/SQL过程已成功完成。
SQL>selectcount(*)fromemployee;
COUNT(*)
----------
299999
ExecutionPlan
----------------------------------------------------------
0SELECTSTATEMENTOptimizer=CHOOSE(Cost=4Card=1)
10SORT(AGGREGATE)
21INDEX(FASTFULLSCAN)OF\'EMPLOYEE_PK\'(UNIQUE)(Cost=4
Card=299999)
Statistics
----------------------------------------------------------
14recursivecalls
0dbblockgets
680consistentgets
670physicalreads
0redosize
370bytessentviaSQL*Nettoclient
425bytesreceivedviaSQL*Netfromclient
2SQL*Netroundtripsto/fromclient
0sorts(memory)
0sorts(disk)
1rowsprocessed
SQL>spooloff
原来的BITMAPFULLSCAN,原来的成本是11个Block的物理读取,96个Block的逻辑读取。
但是用DBMS_STATS包收集统计信息之后,我们看到,
Oracle的选择路径编成了PKINDEXFASTFULLSCAN,对应的成本是:
670个Block的物理读取,680个Block的逻辑读取
更多推荐
dure是什麼意思e在線翻譯讀音例句
发布评论