在Oracle 數(shù)據(jù)庫(kù)中,我們經(jīng)常需要去手工分析表和索引,還有某個(gè)模式下所有的表和索引等等。oracle 提供了兩種分析方法,分別是dbms_stats 包和analyze 命令。這些是我們?cè)谌粘m?xiàng)目管理中的真實(shí)使用的方法,供參考。
成都創(chuàng)新互聯(lián)公司"三網(wǎng)合一"的企業(yè)建站思路。企業(yè)可建設(shè)擁有電腦版、微信版、手機(jī)版的企業(yè)網(wǎng)站。實(shí)現(xiàn)跨屏營(yíng)銷,產(chǎn)品發(fā)布一步更新,電腦網(wǎng)絡(luò)+移動(dòng)網(wǎng)絡(luò)一網(wǎng)打盡,滿足企業(yè)的營(yíng)銷需求!成都創(chuàng)新互聯(lián)公司具備承接各種類型的網(wǎng)站建設(shè)、成都網(wǎng)站制作項(xiàng)目的能力。經(jīng)過(guò)十余年的努力的開(kāi)拓,為不同行業(yè)的企事業(yè)單位提供了優(yōu)質(zhì)的服務(wù),并獲得了客戶的一致好評(píng)。
在10g 中分析某一個(gè)用戶下所有的對(duì)象,如user_miki 用戶
Sql代碼 收藏代碼
sys.dbms_stats.gather_schema_stats(ownname = 'user_miki',estimate_percent = 30,method_opt = 'FOR ALL INDEXED COLUMNS SIZE AUTO',cascade = true,options = 'GATHER');
這是我在項(xiàng)目中分析一個(gè)用戶所有對(duì)象的分析方法,取樣比例為30% ,分析所有索引字段,生成柱形圖,并且也分析索引。
(miki西游 @mikixiyou 文檔,原文鏈接: )
在10g 中分析某一個(gè)用戶下某一個(gè)表及其索引,如user_miki 用戶下info 表和它的索引
Sql代碼 收藏代碼
execute dbms_stats.gather_table_stats(ownname = 'user_miki',tabname = 'info',estimate_percent = 30,method_opt = 'for all indexed columns size auto');
這是我在項(xiàng)目中單獨(dú)分析一個(gè)用戶中一張表的分析方法,取樣比例為30% ,分析所有索引字段,生成柱形圖,并且也分析索引。
我們?cè)趃oogle 時(shí),還能看到使用analzye 命令分析表的方法。
Sql代碼 收藏代碼
analyze table table_name compute statistics;
這個(gè)會(huì)將索引和表一起分析;
Sql代碼 收藏代碼
analyze table table_name compute statistics for table;
這個(gè)僅分析表;
analyze table table_name compute statistics for all columns;
這個(gè)僅分析表,和上面所有的字段,生成柱形圖
analyze table table_name compute statistics for all indexed columns;
這個(gè)僅分析表,和上面所有建立索引的字段,生成柱形圖
在9i 中,我們常常使用analyze 方法,在10g 以后,就改為dbms_stats.gather_schema_stats 類似的包來(lái)分析數(shù)據(jù)庫(kù)對(duì)象了。
10g 的分析函數(shù)包比9i 的analyze 方法更靈活一些。
在10g 中,會(huì)有個(gè)系統(tǒng)的計(jì)劃任務(wù),每天10 點(diǎn)和周末兩天都自動(dòng)分析新的數(shù)據(jù)庫(kù)對(duì)象和它認(rèn)為統(tǒng)計(jì)信息已經(jīng)過(guò)期的數(shù)據(jù)庫(kù)對(duì)象。這個(gè)分析結(jié)果有時(shí)候不靠譜。
因此,我都采用10g 中提供的dbms_stats.gather_schema_stats 方法作為補(bǔ)充,設(shè)置一個(gè)計(jì)劃任務(wù)定期去分析業(yè)務(wù)用戶下所有數(shù)據(jù)庫(kù)對(duì)象。
Sql代碼 收藏代碼
variable job number;
begin
sys.dbms_job.submit(job = :job,
what = 'sys.dbms_stats.gather_schema_stats(ownname = ''USR_MIKI'',estimate_percent = 30,method_opt = ''FOR ALL INDEXED COLUMNS SIZE AUTO'',cascade = true,options = ''GATHER'');',
next_date = to_date('16-12-2012 00:56:24', 'dd-mm-yyyy hh24:mi:ss'),
interval = 'sysdate+7');
commit;
end;
/
例如,設(shè)置為每周六運(yùn)行一次。
Oracle中分析表的作用
1.分析更新表的統(tǒng)計(jì)信息,,有可能導(dǎo)致執(zhí)行計(jì)劃改變..
2.以的analyze
table
abc
compute
statistics;這條為例,生成的統(tǒng)計(jì)信息會(huì)存在于user_tables這個(gè)視圖,查看一下select
*
from
user_tables
where
table_name='ABC';
觀察一下NUM_ROWS,BLOCKS,AVG_SPACE,AVG_ROW_LEN幾列你就會(huì)明白,這就是變化。分析完表之后,會(huì)發(fā)現(xiàn)DBA_tables
視圖中,以前很多列值是空的,現(xiàn)在開(kāi)始有數(shù)據(jù)了。這些數(shù)據(jù)就是分析表得到的.
3.怎么樣分析表或索引
命令行方式可以采用analyze命令
如Analyze
table
tablename
compute
statistics;
Analyze
index|cluster
indexname
estimate
statistics;
ANALYZE
TABLE
tablename
COMPUTE
STATISTICS
FOR
TABLE
FOR
ALL
[LOCAL]
INDEXES
FOR
ALL
[INDEXED]
COLUMNS;
ANALYZE
TABLE
tablename
DELETE
STATISTICS
ANALYZE
TABLE
tablename
VALIDATE
REF
UPDATE
ANALYZE
TABLE
tablename
VALIDATE
STRUCTURE
[CASCADE]|[INTO
TableName]
ANALYZE
TABLE
tablename
LIST
CHAINED
ROWS
[INTO
TableName]
等等。
如果想分析整個(gè)用戶或數(shù)據(jù)庫(kù),還可以采用工具包,可以并行分析
Dbms_utility(8i以前的工具包)
Dbms_stats(8i以后提供的工具包)
如
dbms_stats.gather_schema_stats(User,estimate_percent=100,cascade=
TRUE);
dbms_stats.gather_table_stats(User,TableName,degree
=
4,cascade
=
true);
這是對(duì)命令與工具包的一些總結(jié)
(1)、對(duì)于分區(qū)表,建議使用DBMS_STATS,而不是使用Analyze語(yǔ)句。
a)
可以并行進(jìn)行,對(duì)多個(gè)用戶,多個(gè)Table
b)
可以得到整個(gè)分區(qū)表的數(shù)據(jù)和單個(gè)分區(qū)的數(shù)據(jù)。
c)
可以在不同級(jí)別上Compute
Statistics:?jiǎn)蝹€(gè)分區(qū),子分區(qū),全表,所有分區(qū)
d)
可以倒出統(tǒng)計(jì)信息
e)
可以用戶自動(dòng)收集統(tǒng)計(jì)信息
(2)、DBMS_STATS的缺點(diǎn)
a)
不能Validate
Structure
b)
不能收集CHAINED
ROWS,
不能收集CLUSTER
TABLE的信息,這兩個(gè)仍舊需要使用Analyze語(yǔ)句。
c)
DBMS_STATS
默認(rèn)不對(duì)索引進(jìn)行Analyze,因?yàn)槟J(rèn)Cascade是False,需要手工指定為T(mén)rue
(3)、對(duì)于Oracle
9里面的External
Table,Analyze不能使用,只能使用DBMS_STATS來(lái)收集信息.
去這里看看??
數(shù)據(jù)結(jié)構(gòu)被稱為物理(存儲(chǔ))的數(shù)據(jù)結(jié)構(gòu)在計(jì)算機(jī)中的表示(圖片)。它包括一個(gè)數(shù)據(jù)元素表示的關(guān)系的表示。
物理結(jié)構(gòu),也就是由Oracle數(shù)據(jù)庫(kù)所使用的操作系統(tǒng)的文件結(jié)構(gòu)。對(duì)于數(shù)據(jù)庫(kù)的物理結(jié)構(gòu)文件,不同版本的Oracle,不同的操作系統(tǒng)平臺(tái)上的數(shù)據(jù)庫(kù)文件存放的目錄結(jié)構(gòu)不同的物理結(jié)構(gòu)
其作用可分為三類:
數(shù)據(jù)日志文件的文件
控制文件
數(shù)據(jù)文件,數(shù)據(jù)文件,用于存儲(chǔ)數(shù)據(jù)庫(kù)中的數(shù)據(jù),如表,索引等。當(dāng)讀取數(shù)據(jù)時(shí),系統(tǒng)首先讀取的數(shù)據(jù)從數(shù)據(jù)庫(kù)文件,并存儲(chǔ)到數(shù)據(jù)緩沖器,SGA。
重做日志文件,重做日志文件
所有的記錄在數(shù)據(jù)庫(kù)中的信息。這是三種類型的文件,文件中最復(fù)雜的,而且要保證數(shù)據(jù)庫(kù)的安全性和數(shù)據(jù)庫(kù)的備份和恢復(fù)文件直接。
控制文件
控制文件是一個(gè)二進(jìn)制文件,用來(lái)描述數(shù)據(jù)庫(kù)的物理結(jié)構(gòu),數(shù)據(jù)庫(kù)只需要一個(gè)控制文件,控制文件的內(nèi)容,包括:
同步需要恢復(fù)的數(shù)據(jù)文件和日志文件的信息標(biāo)識(shí)數(shù)據(jù)庫(kù)和數(shù)據(jù)庫(kù)的名稱,唯一標(biāo)識(shí)
數(shù)據(jù)庫(kù),檢查點(diǎn)數(shù)量
/
a
如果有,請(qǐng)記得采納為滿意的答復(fù),謝謝你!我祝你幸福的生活!
vaela