freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

oracle調(diào)優(yōu)總結(jié)收藏-資料下載頁

2025-06-25 22:40本頁面
  

【正文】    有效地使用空間和高性能之間是有矛盾的,而表格的存儲(chǔ)參數(shù)就是控制這個(gè)方面的矛盾: . 對(duì)于需要有效地重新使用空間,可以設(shè)置一個(gè)高的 pctused 值,不過副作用是需要額外的 I/O 。一個(gè)高的 pctused 值意味著相對(duì)滿的塊都會(huì)放到 freelist 中。因此,這些塊在再次滿之前只可以接受幾行記錄,從而導(dǎo)致更多的 I/O 。 . 追求高性能的話,可以將 pctused 設(shè)置為一個(gè)低的值,這意味著 Oracle 不會(huì)將數(shù)據(jù)塊放到 freelists 中直到它幾乎是空的。那么塊將可以在滿之前接收更多的行,因此可以減少插入操作的 I/O 。要記住 Oracle 擴(kuò)展新塊的性能要比重新使用現(xiàn)有的塊高。對(duì)于 Oracle 來說,擴(kuò)展一個(gè)表比管理 freelists 消耗更少的資源。    讓我們來回顧一下設(shè)置對(duì)象存儲(chǔ)參數(shù)的一些常見規(guī)則:    .經(jīng)常將 pctused 設(shè)置為可以接收一條新行。對(duì)于不能接受一行的 free blocks 對(duì)于我們來說是沒有用的。如果這樣做,將會(huì)令 Oracle 的性能變慢,因?yàn)?Oracle 將在擴(kuò)展表來得到一個(gè)空的塊之前,企圖讀取 5 個(gè) dead 的 free block 。    .表格中 chained rows 的出現(xiàn)意味著 pctfree 太低或者是 db_block_size 太少。在很多情況下, RAW 和 LONG RAW 列都很巨大,以至超過了 Oracle 的最大塊的大小,這時(shí) chained rows 是不可以避免的。    .如果一個(gè)表有同時(shí)插入的 SQL 語句,那么它需要有同時(shí)刪除的語句。運(yùn)行單一個(gè)一個(gè)清除的工作將會(huì)把全部的空閑塊放到一個(gè)freelist 中,而沒有其它包含有任何空閑塊的 freelists 出現(xiàn)。    . freelist 參數(shù)應(yīng)該設(shè)置為表格同時(shí)更新的最大值。例如,如果在任何時(shí)候,某個(gè)表最多有 20 個(gè)用戶執(zhí)行插入的操作,那么該表的參數(shù)應(yīng)該設(shè)置為 freelists=20 。    應(yīng)記住的是 freelist groups 參數(shù)的值只是對(duì)于 Oracle Parallel Server 和 Real Application Clusters 才是有用的。對(duì)于這類 Oracle , freelist groups 應(yīng)該設(shè)置為訪問該表格的 Oracle Parallel Server 實(shí)例的數(shù)目。在rbo中,連接表的順序,和predicate的順序都是有要求的,一般會(huì)按照從右往左來訪問FROM clause的表,從下往上來訪問where clause的predicates,選擇小表作驅(qū)動(dòng)表是關(guān)鍵的。cbo中,則主要是根據(jù)表的統(tǒng)計(jì)信息來覺得訪問路徑,所以保持表的統(tǒng)計(jì)信息準(zhǔn)確性就很有必要了。在optimizer_mode=choose時(shí)候,系統(tǒng)首先會(huì)判斷FROM clause中的表是否有統(tǒng)計(jì)信息,如果有,則根據(jù)CBO來執(zhí)行sql,否則根據(jù)rbo來執(zhí)行。也可以通過hints來改變sql的訪問路徑。ORACLE檢索順序有關(guān)自底向上,所以小表放在最後面可以縮小檢索范圍,數(shù)據(jù)量大的放在最左邊(以FROM作參考)優(yōu)化器模式  rule模式    。總忽略CBO和統(tǒng)計(jì)信息而基于規(guī)則  choose模式    。Oracle根據(jù)情況選擇rule or first_rows or all_rows  first_rows 模式    ?;诔杀?,以最快的速度返回記錄,會(huì)造成總體查詢速度的下降或消耗更多的資源,傾向索引掃描,適合OLTP系統(tǒng)  all_rows模式    ?;诔杀荆_??傮w查詢時(shí)間最短,傾向并行全表掃描    例如:  Select last_name from customer order by last_name。用first_rows時(shí),迅速返回記錄,但I(xiàn)/O量大,用all_rows時(shí),返回記錄慢,但使用資源少。    調(diào)整SQL表訪問    全表掃描    。返回記錄:未排序表40%,排序表7%,建議采用并行機(jī)制來提高訪問速度,DDS;    索引訪問    。最常用的方法,包括索引唯一掃描和索引范圍掃描,OLTP;    快速完全索引掃描    。訪問索引中所有數(shù)據(jù)塊,結(jié)果相當(dāng)于全表掃描,可以用索引掃描代替全表掃描,例如:    Select serv_id,count(* ) from tg_cdr01 group by serv_id?!   ≡u(píng)估全表掃描的合法性    如何實(shí)現(xiàn)并行掃描    。永久并行化(不推薦)  alter table customer parallel degree 8?!   ?。單個(gè)查詢并行化  select /*+ full(emp) parallel(emp,8)*/ * from emp?!   》謪^(qū)表效果明顯    優(yōu)化SQL語句排序    排序的操作:    。order by 子句  。group by 子句  。select distinct子句  。創(chuàng)建索引時(shí)  。union或minus  。排序合并連接    如何避免排序    。添加索引  。在索引中使用distinct子句  。避免排序合并連接    使用提示進(jìn)行調(diào)整    使用提示的原則    。語法:/*+ hint */  。使用表別名:select /*+ index(e dept_idx)*/ * from emp e  。檢驗(yàn)提示    常用的提示    。rule (基于規(guī)則)  。all_rows  。first_rows  。use_nl  。use_hash  。use_merge  。index  。index_asc  。no_index  。index_desc(常用于使用max內(nèi)置函數(shù))  。index_bine(強(qiáng)制使用位圖索引)  。index_ffs(索引快速完全掃描)  。use_concat(將查詢中所有or條件使用union all)  。parallel  。noparallel  。full  。ordered(基于成本)      表連接的類型    。等連接  where 條件中用等式連接;  。外部連接(左、右連接)    在where條件子句的等式謂詞放置一個(gè)(+)來實(shí)現(xiàn),例如:  select , from emp a,bonus b where =(+)。    該語句返回所有emp表的記錄;  。自連接   Select total, hard, ( ) soft ,  Round(()*100,1) perc  From v$sysstat a,v$sysstat b  Where = 179  and = 180?!   》催B接    反連接常用于not in or not exists中,是指在查詢中找到的任何記錄都不包含在結(jié)果集中的子查詢;不建議使用not in or not exists?!   ?。半連接    查詢中使用exists,含義:即使在子查詢中返回多條重復(fù)的記錄,外部查詢也只返回一條記錄?!   ∏短籽h(huán)連接    。被連接表中存在索引的情況下使用;  。使用use_nl?!   ash連接    。Hash連接將驅(qū)動(dòng)表加載在內(nèi)存中,并使用hash技術(shù)連接第二個(gè)表,提高等連接速度。  。適合于大表和小表連接;  。使用use_hash?!   ∨判蚝喜⑦B接    。排序合并連接不使用索引  。使用原則:    連接表子段中不存在可用索引;    查詢返回兩個(gè)表中大部分的數(shù)據(jù)快;    CBO認(rèn)為全表掃描比索引掃描執(zhí)行的更快?!    J褂胾se_merge    使用臨時(shí)/中間表    多個(gè)大表關(guān)聯(lián)時(shí),可以分別把滿足條件的結(jié)果集存放到中間表,然后用中間表關(guān)聯(lián);    SQL子查詢的調(diào)整    關(guān)聯(lián)與非關(guān)聯(lián)子查詢    。關(guān)聯(lián):子查詢的內(nèi)部引用的是外部表,每行執(zhí)行一次;  。非關(guān)聯(lián):子查詢只執(zhí)行一次,存放在內(nèi)存中?!   ≌{(diào)整not in 和not exists語句    ??梢允褂猛獠窟B接優(yōu)化not in子句,例如:  select ename from emp where dept_no not in  (select dept_no from dept where dept_name =‘Math’)。    改為:  select ename from emp,dept  where =  and is null?!     racle 為什么不使用索引    。檢查被索引的列或組合索引的首列是否出現(xiàn)在PL/SQL語句的WHERE子句中,這是“執(zhí)行計(jì)劃”能用到相關(guān)索引的必要條件?!   ???床捎昧四姆N類型的連接方式。ORACLE的共有Sort Merge Join(SMJ)、Hash Join(HJ)和Nested Loop Join(NL)。在兩張表連接,且內(nèi)表的目標(biāo)列上建有索引時(shí),只有Nested Loop才能有效地利用到該索引。SMJ即使相關(guān)列上建有索引,最多只能因索引的存在,避免數(shù)據(jù)排序過程。HJ由于須做HASH運(yùn)算,索引的存在對(duì)數(shù)據(jù)查詢速度幾乎沒有影響?!    ?催B接順序是否允許使用相關(guān)索引。假設(shè)表emp的deptno列上有索引,表dept的列deptno上無索引,WHERE語句有=。在做NL連接時(shí),emp做為外表,先被訪問,由于連接機(jī)制原因,外表的數(shù)據(jù)訪問方式是全表掃描,最多在其上做索引全掃描或索引快速全掃描?!    J欠裼玫较到y(tǒng)數(shù)據(jù)字典表或視圖。由于系統(tǒng)數(shù)據(jù)字典表都未被分析過,可能導(dǎo)致極差的“執(zhí)行計(jì)劃”。但是不要擅自對(duì)數(shù)據(jù)字典表做分析,否則可能導(dǎo)致死鎖,或系統(tǒng)性能下降?!   ?。索引列是否函數(shù)的參數(shù)。如是,索引在查詢時(shí)用不上?!   ?。是否存在潛在的數(shù)據(jù)類型轉(zhuǎn)換。如將字符型數(shù)據(jù)與數(shù)值型數(shù)據(jù)比較,ORACLE會(huì)自動(dòng)將字符型用to_number()函數(shù)進(jìn)行轉(zhuǎn)換,從而導(dǎo)致上一種現(xiàn)象的發(fā)生。    。是否為表和相關(guān)的索引搜集足夠的統(tǒng)計(jì)數(shù)據(jù)。對(duì)數(shù)據(jù)經(jīng)常有增、刪、改的表最好定期對(duì)表和索引進(jìn)行分析,可用SQL語句“analyze table xxxx pute statistics for all indexes?!?。ORACLE掌握了充分反映實(shí)際的統(tǒng)計(jì)數(shù)據(jù),才有可能做出正確的選擇?!    K饕械倪x擇性不高。   我們假設(shè)典型情況,有表emp,共有一百萬行數(shù)據(jù),數(shù)據(jù)只有4種不同的值,如40。雖然emp數(shù)據(jù)行有很多,ORACLE缺省認(rèn)定表中列的值是在所有數(shù)據(jù)行均勻分布的,也就是說每種deptno值各有25萬數(shù)據(jù)行與之對(duì)應(yīng)。假設(shè)SQL搜索條件DEPTNO=10,利用deptno列上的索引進(jìn)行數(shù)據(jù)搜索效率,往往不比全表掃描的高?!   ?。索引列值是否可為空(NULL)。如果索引列值可以是空值,在SQL語句中那些要返回NULL值的操作,將不會(huì)用到索引,如COUNT(*),而是用全表掃描。這是因?yàn)樗饕写鎯?chǔ)值不能為全空?!   ???词欠裼杏玫讲⑿胁樵儯≒QO)。并行查詢將不會(huì)用到索引?!    H绻麖囊陨蠋讉€(gè)方面都查不出原因的話,我們只好用采用在語句中加hint的方式強(qiáng)制ORACLE使用最優(yōu)的“執(zhí)行計(jì)劃”。  hint采用注釋的方式,有行注釋和段注釋兩種方式。  如我們想要用到A表的IND_COL1索引的話,可采用以下方式:  SELECT /*+ INDEX(A IND_COL1)*/ * FROM A WHERE COL1 = XXX?!   ∪绾纹帘嗡饕   ≌Z句的執(zhí)行計(jì)劃中有不良索引時(shí),可以人為地屏蔽該索引,方法:    。數(shù)值型:在索引字段上加0,例如  select * from emp where emp_no+0 = v_emp_no?!   ?。字符型:在索引字段上加‘’,例如  select * from tg_cdr01 where msisdn||’’=v_msisdn。(1)RBOamp。CBO。Oracle有兩種執(zhí)行優(yōu)化器,一種是RBO(Rule Based Optimizer)基于規(guī)則的優(yōu)化器,這種優(yōu)化器是基于sql語句寫法選擇執(zhí)行路徑的;另一種是CBO(Cost Based Optimizer)基于規(guī)則的優(yōu)化器,這種優(yōu)化器是Oracle根據(jù)統(tǒng)計(jì)分析信息來選擇執(zhí)行路徑,如果表和索引沒有進(jìn)行分析,Oracle將會(huì)使用RBO代替CBO;如果表和索引很久未分析,CBO也有可能選擇錯(cuò)誤執(zhí)行路徑,不過CBO是Oracle發(fā)展的方向,自8i版本來已經(jīng)逐漸取代RBO.(2)AUTOTRACE。要看索引是否被使用我們要借助Oracle的一個(gè)叫做AUTOTRACE功能,它顯示了sql語句的執(zhí)行路徑,我們能看到Oracle內(nèi)部是怎么執(zhí)行sql的,這是一個(gè)非常好的輔助工具,在sql調(diào)優(yōu)里廣泛被運(yùn)用。我們來看一下怎么運(yùn)用AUTOTRACE:①
點(diǎn)擊復(fù)制文檔內(nèi)容
公司管理相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1