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

正文內(nèi)容

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

2025-06-25 22:40本頁面
  

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