【文章內(nèi)容簡(jiǎn)介】
0。 II) 需要穩(wěn)定執(zhí)行計(jì)劃。 III)需要使用提示(Hint)。 使用RULE需要注意:I) 選擇最有效率的表名順序II) 優(yōu)化SQL的寫法。在optimizer_mode=choose時(shí),如果表有統(tǒng)計(jì)信息(分區(qū)表外),優(yōu)化器將選擇CBO,否則選RBO。RBO遵循簡(jiǎn)單的分級(jí)方法學(xué),使用15種級(jí)別要點(diǎn),當(dāng)接收到查詢,優(yōu)化器將評(píng)估使用到的要點(diǎn)數(shù)目,然后選擇最佳級(jí)別(最少的數(shù)量)的執(zhí)行路徑來運(yùn)行查詢。CBO嘗試找到最低成本的訪問數(shù)據(jù)的方法,為了最大的吞吐量或最快的初始響應(yīng)時(shí)間,計(jì)算使用不同的執(zhí)行計(jì)劃的成本,并選擇成本最低的一個(gè),關(guān)于表的數(shù)據(jù)內(nèi)容的統(tǒng)計(jì)被用于確定執(zhí)行計(jì)劃。4. 如何定位重要(消耗資源多)的SQL使用CPU多的用戶sessionSELECT , spid, status, SUBSTR (, 1, 40) prog, , osuser, VALUE / 60 / 100 VALUEFROM v$session a, v$process b, v$sesstat cWHERE = 12 AND = AND = ORDER BY VALUE DESC。select sql_text from v$sqlwhere disk_reads amp。gt。 1000 or (executions amp。gt。 0 and buffer_gets/executions amp。gt。 30000)。5. 如何跟蹤某個(gè)session的SQL利用TRACE 跟蹤 ALTER SESSION SET SQLTRACE ON。 COLUMN SQL format a200。 SELECT machine, sql_text SQL FROM v$sqltext a, v$session b WHERE address = sql_address AND machine = 39。amp。A39。 ORDER BY hash_value, piece。exec (sid,serial,amp。amp。sql_trace)。select sid,serial from v$session where sid = (select sid from v$mystat where rownum = 1)。exec (amp。amp。sid,amp。amp。serial,amp。amp。event_10046,amp。amp。level_12,39。39。)。6. SQL調(diào)整最關(guān)注的是什么檢查系統(tǒng)的I/O問題sar-d能檢查整個(gè)系統(tǒng)的iostat(IO statistics)查看該SQL的response time(db block gets/consistent gets/physical reads/sorts (disk))7. 說說你對(duì)索引的認(rèn)識(shí)(索引的結(jié)構(gòu)、對(duì)dml影響、對(duì)查詢影響、為什么提高查詢性能)索引有BTREE、BIT、CLUSTER等類型。ORACLE使用了一個(gè)復(fù)雜的自平衡Btree結(jié)構(gòu)。通常來說,在表上建立恰當(dāng)?shù)乃饕?,查詢時(shí)會(huì)改進(jìn)查詢性能。但在進(jìn)行插入、刪除、修改時(shí),同時(shí)會(huì)進(jìn)行索引的修改,在性能上有一定的影響。有索引且查詢條件能使用索引時(shí),數(shù)據(jù)庫(kù)會(huì)先度取索引,根據(jù)索引內(nèi)容和查詢條件,查詢出ROWID,再根據(jù)ROWID取出需要的數(shù)據(jù)。由于索引內(nèi)容通常比全表內(nèi)容要少很多,因此通過先讀索引,能減少I/O,提高查詢性能。btree index/bitmap index/function index/patitional index(local/global)索引通常能提高select/update/delete的性能,會(huì)降低insert的速度,8. 使用索引查詢一定能提高查詢的性能嗎?為什么通常,.索引需要空間來存儲(chǔ),也需要定期維護(hù), 每當(dāng)有記錄在表中增減或索引列被修改時(shí),索引本身也會(huì)被修改. 這意味著每條記錄的INSERT,DELETE,UPDATE將為此多付出4,5 次的磁盤I/O. 因?yàn)樗饕枰~外的存儲(chǔ)空間和處理,索引范圍查詢(INDEX RANGE SCAN)適用于兩種情況:基于一個(gè)范圍的檢索,一般查詢返回結(jié)果集小于表中記錄數(shù)的30%宜采用。基于非唯一性索引的檢索索引就是為了提高查詢性能而存在的,如果在查詢中索引沒有提高性能,只能說是用錯(cuò)了索引,或者講是場(chǎng)合不同9. 綁定變量是什么?綁定變量有什么優(yōu)缺點(diǎn)?綁定變量是指在SQL語(yǔ)句中使用變量,改變變量的值來改變SQL語(yǔ)句的執(zhí)行結(jié)果。優(yōu)點(diǎn):使用綁定變量,可以減少SQL語(yǔ)句的解析,能減少數(shù)據(jù)庫(kù)引擎消耗在SQL語(yǔ)句解析上的資源。提高了編程效率和可靠性。減少訪問數(shù)據(jù)庫(kù)的次數(shù), 就能實(shí)際上減少ORACLE的工作量。缺點(diǎn):經(jīng)常需要使用動(dòng)態(tài)SQL的寫法,由于參數(shù)的不同,可能SQL的執(zhí)行效率不同;綁定變量是相對(duì)文本變量來講的,所謂文本變量是指在SQL直接書寫查詢條件,這樣的SQL在不同條件下需要反復(fù)解析,綁定變量是指使用變量來代替直接書寫條件,查詢bind value在運(yùn)行時(shí)傳遞,然后綁定執(zhí)行。優(yōu)點(diǎn)是減少硬解析,降低CPU的爭(zhēng)用,節(jié)省shared_pool缺點(diǎn)是不能使用histogram,sql優(yōu)化比較困難10. 如何穩(wěn)定(固定)執(zhí)行計(jì)劃可以在SQL語(yǔ)句中指定執(zhí)行計(jì)劃。使用HINTS。query_rewrite_enabled = truestar_transformation_enabled = trueoptimizer_features_enable = 創(chuàng)建并使用stored outline11. 和排序相關(guān)的內(nèi)存在8i和9i分別怎樣調(diào)整,臨時(shí)表空間的作用是什么SORT_AREA_SIZE 在進(jìn)行排序操作時(shí),如果排序的內(nèi)容太多,內(nèi)存里不能全部放下,則需要進(jìn)行外部排序,此時(shí)需要利用臨時(shí)表空間來存放排序的中間結(jié)果。8i中sort_area_size/sort_area_retained_size決定了排序所需要的內(nèi)存, 如果排序操作不能在sort_area_size中完成,就會(huì)用到temp表空間9i中如果workarea_size_policy=auto時(shí),排序在pga內(nèi)進(jìn)行,通常pga_aggregate_target的1/20可以用來進(jìn)行disk sort。如果workarea_size_policy=manual時(shí),排序需要的內(nèi)存由sort_area_size決定, 在執(zhí)行order by/group by/distinct/union/create index/index rebuild/minus等操作時(shí),如果在pga或sort_area_size中不能完成,排序?qū)⒃谂R時(shí)表空間進(jìn)行(disk sort),臨時(shí)表空間主要作用就是完成系統(tǒng)中的disk sort.12. 存在表T(a,b,c,d),要根據(jù)字段c排序后取第21—30條記錄顯示,請(qǐng)給出sql SELECT * FROM (SELECT ROWNUM AS row_num, tmp_tab.* FROM (SELECT a, b, c, d FROM T ORDER BY c) tmp_tab WHERE ROWNUM = 30) WHERE row_num = 20ORDER BY row_num。create table t(a number(,b number(,c number(,d number()。/beginfor i in 1 .. 300 loopinsert into t values(mod(i,2),i/2,(1,300),i/4)。end loop。end。/select * from (select c.*,rownum as rn from (select * from t order by c desc) c) where rn between 21 and 30。/select * from (select * from test order by c desc) x where rownum amp。lt。 30minusselect * from (select * from test order by c desc) y where rownum amp。lt。 20 order by 3 desc相比之 minus性能較差二:數(shù)據(jù)庫(kù)基本概念類1 Pctused and pctfree 表示什么含義有什么作用pctused與pctfree控制數(shù)據(jù)塊是否出現(xiàn)在freelist中, pctfree控制數(shù)據(jù)塊中保留用于update的空間,當(dāng)數(shù)據(jù)塊中的free space小于pctfree設(shè)置的空間時(shí),該數(shù)據(jù)塊從freelist中去掉,當(dāng)塊由于dml操作free space大于pct_used設(shè)置的空間時(shí),該數(shù)據(jù)庫(kù)塊將被添加在freelist鏈表中。2 簡(jiǎn)單描述tablespace / segment / extent / block之間的關(guān)系tablespace: 一個(gè)數(shù)據(jù)庫(kù)劃分為一個(gè)或多個(gè)邏輯單位,該邏輯單位成為表空間。每一個(gè)表空間可能包含一個(gè)或多個(gè) Segment。Segments: Segment指在tablespace中為特定邏輯存儲(chǔ)結(jié)構(gòu)分配的空間。每一個(gè)段是由一個(gè)或多個(gè)extent組成。包括數(shù)據(jù)段、索引段、回滾段和臨時(shí)段。Extents: 一個(gè) extent 由一系列連續(xù)的 Oracle 來給segment分配空間。Data Blocks:Oracle 數(shù)據(jù)庫(kù)最小的I/O存儲(chǔ)單位,一個(gè)data block對(duì)應(yīng)一個(gè)或多個(gè)分配給data file的操作系統(tǒng)塊。table創(chuàng)建時(shí),默認(rèn)創(chuàng)建了一個(gè)data segment,每個(gè)data segment含有min extents指定的extents數(shù),每個(gè)extent據(jù)據(jù)表空間的存儲(chǔ)參數(shù)分配一定數(shù)量的blocks3 描述tablespace和datafile之間的關(guān)系一個(gè)表空間可包含一個(gè)或多個(gè)數(shù)據(jù)文件。表空間利用增加或擴(kuò)展數(shù)據(jù)文件擴(kuò)大表空間,表空間的大小為組成該表空間的數(shù)據(jù)文件大小的和。一個(gè)datafile只能屬于一個(gè)表空間。一個(gè)tablespace可以有一個(gè)或多個(gè)datafile,每個(gè)datafile只能在一個(gè)tablespace內(nèi), table中的數(shù)據(jù),通過hash算法分布在tablespace中的各個(gè)datafile中,tablespace是邏輯上的概念,datafile則在物理上儲(chǔ)存了數(shù)據(jù)庫(kù)的種種對(duì)象。4 本地管理表空間和字典管理表空間的特點(diǎn),ASSM有什么特點(diǎn)本地管理表空間:(9i默認(rèn))空閑塊列表存儲(chǔ)在表空間的數(shù)據(jù)文件頭。特點(diǎn):減少數(shù)據(jù)字典表的競(jìng)爭(zhēng),當(dāng)分配和收縮空間時(shí)會(huì)產(chǎn)生回滾,不需要合并。字典管理表空間:(8i默認(rèn))空閑塊列表存儲(chǔ)在數(shù)據(jù)庫(kù)中的字典表里.特點(diǎn):片由數(shù)據(jù)字典管理,可能造成字典表的爭(zhēng)用。存儲(chǔ)在表空間的每一個(gè)段都會(huì)有不同的存儲(chǔ)字句,需要合并相鄰的塊。本地管理表空間(Locally Managed Tablespace簡(jiǎn)稱LMT)8i以后出現(xiàn)的一種新的表空間的管理模式,通過位圖來管理表空間的空間使用。字典管理表空間(DictionaryManaged Tablespace簡(jiǎn)稱DMT)8i以前包括以后都還可以使用的一種表空間管理模式,通過數(shù)據(jù)字典管理表空間的空間使用。動(dòng)段空間管理(ASSM),它首次出現(xiàn)在Oracle920里有了ASSM,鏈接列表freelist被位圖所取代,它是一個(gè)二進(jìn)制的數(shù)組,能夠迅速有效地管理存儲(chǔ)擴(kuò)展和剩余區(qū)塊(free block),因此能夠改善分段存儲(chǔ)本質(zhì),ASSM表空間上創(chuàng)建的段還有另外一個(gè)稱呼叫Bitmap Managed Segments(BMB 段)。5 回滾段的作用是什么回滾段用于保存數(shù)據(jù)修改前的映象,這些信息用于生成讀一致性數(shù)據(jù)庫(kù)信息、在數(shù)據(jù)庫(kù)恢復(fù)和Rollback時(shí)使用。一個(gè)事務(wù)只能使用一個(gè)回滾段。事務(wù)回滾:當(dāng)事務(wù)修改表中數(shù)據(jù)的時(shí)候,該數(shù)據(jù)修改前的值(即前影像)會(huì)存放在回滾段中,當(dāng)用戶回滾事務(wù)(ROLLBACK)時(shí),ORACLE將會(huì)利用回滾段中的數(shù)據(jù)前影像來將修改的數(shù)據(jù)恢復(fù)到原來的值。事務(wù)恢復(fù):當(dāng)事務(wù)正在處理的時(shí)候,例程失敗,回滾段的信息保存在undo表空間中,ORACLE將在下次打開數(shù)據(jù)庫(kù)時(shí)利用回滾來恢復(fù)未提交的數(shù)據(jù)。讀一致性:當(dāng)一個(gè)會(huì)話正在修改數(shù)據(jù)時(shí),其他的會(huì)話將看不到該會(huì)話未提交的修改。 當(dāng)一個(gè)語(yǔ)句正在執(zhí)行時(shí),該語(yǔ)句將看不到從該語(yǔ)句開始執(zhí)行后的未提交的修改(語(yǔ)句級(jí)讀一致性)當(dāng)ORACLE執(zhí)行SELECT語(yǔ)句時(shí),ORACLE依照當(dāng)前的系統(tǒng)改變號(hào)(SYSTEM CHANGE NUMBERSCN) 來保證任何前于當(dāng)前SCN的未提交的改變不被該語(yǔ)句處理。可以想象:當(dāng)一個(gè)長(zhǎng)時(shí)間的查詢正在執(zhí)行時(shí), 若其他會(huì)話改變了該查詢要查詢的某個(gè)數(shù)據(jù)塊,ORACLE將利用回滾段的數(shù)據(jù)前影像來構(gòu)造一個(gè)讀一致性視圖6 日志的作用是什么日志文件(Log File)記錄所有對(duì)數(shù)據(jù)庫(kù)數(shù)據(jù)的修改,主要是保護(hù)數(shù)據(jù)庫(kù)以防止故障,以及恢復(fù)數(shù)據(jù)時(shí)使用。其特點(diǎn)如下: a)每一個(gè)數(shù)據(jù)庫(kù)至少包含兩個(gè)日志文件組。每個(gè)日志文件組至少包含兩個(gè)日志文件成員。 b)日志文件組以循環(huán)方式進(jìn)行寫操作。 c)每一個(gè)日志文件成員對(duì)應(yīng)一個(gè)物理文件。記錄數(shù)據(jù)庫(kù)事務(wù),最大限度地保證數(shù)據(jù)的一致性與安全性重做日志文件:含對(duì)數(shù)據(jù)庫(kù)所做的更改記錄,這樣萬一出現(xiàn)故障可以啟用數(shù)據(jù)恢復(fù),一個(gè)數(shù)據(jù)庫(kù)至少需要兩個(gè)重做日志文件歸檔日志文件:是重做日志文件的脫機(jī)副本,這些副本可能對(duì)于從介質(zhì)失敗中進(jìn)行恢復(fù)很必要。7 SG