




已閱讀5頁,還剩29頁未讀, 繼續(xù)免費閱讀
版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
Oracle Tuning的一些總結 關于Oracle的性能調整,一般包括兩個方面,一是指Oracle數據庫本身的調整,比如SGA、PGA的優(yōu)化設置,二是連接Oracle的應用程序以及SQL語句的優(yōu)化。做好這兩個方面的優(yōu)化,就可以使一套完整的Oracle應用系統(tǒng)處于良好的運行狀態(tài)。 本文主要是把一些Oracle Tuning的文章作了一個簡單的總結,力求以實際可操作為目的,配合講解部分理論知識,使大部分具有一般Oracle知識的使用者能夠對Oracle Tuning有所了解,并且能夠根據實際情況對某些參數進行調整。關于更加詳細的知識,請參見本文結束部分所提及的推薦書籍,同時由于該話題內容太多且復雜,本文必定有失之偏頗甚至錯誤的地方,請不吝賜教,并共同進步。 1. SGA的設置 在Oracle Tuning中,對SGA的設置是關鍵。SGA,是指Shared Global Area , 或者是 System Global Area , 稱為共享全局區(qū)或者系統(tǒng)全局區(qū),結構如下圖所示。 對于SGA區(qū)域內的內存來說,是共享的、全局的,在UNIX 上,必須為oracle 設置共享內存段(可以是一個或者多個),因為oracle 在UNIX上是多進程;而在WINDOWS上oracle是單進程(多個線程),所以不用設置共享內存段。 1.1 SGA的各個組成部分 下面用 sqlplus 查詢舉例看一下 SGA 各個組成部分的情況: SQL select * from v$sga; NAME VALUE - - Fixed Size 104936 Variable Size 823164928 Database Buffers 1073741824 Redo Buffers 172032 或者 SQL show sga Total System Global Area 1897183720 bytes Fixed Size 104936 bytes Variable Size 823164928 bytes Database Buffers 1073741824 bytes Redo Buffers 172032 bytes Fixed Size oracle 的不同平臺和不同版本下可能不一樣,但對于確定環(huán)境是一個固定的值,里面存儲了SGA 各部分組件的信息,可以看作引導建立SGA的區(qū)域。 Variable Size 包含了shared_pool_size、java_pool_size、large_pool_size 等內存設置 Database Buffers 指數據緩沖區(qū),在8i 中包含db_block_buffer*db_block_size、buffer_pool_keep、buffer_pool_recycle 三部分內存。在9i 中包含db_cache_size、db_keep_cache_size、db_recycle_cache_size、db_nk_cache_size。 Redo Buffers 指日志緩沖區(qū),log_buffer。在這里要額外說明一點的是,對于v$parameter、v$sgastat、v$sga查詢值可能不一樣。v$parameter 里面的值,是指用戶在初始化參數文件里面設置的值,v$sgastat是oracle 實際分配的日志緩沖區(qū)大小(因為緩沖區(qū)的分配值實際上是離散的,也不是以block 為最小單位進行分配的),v$sga 里面查詢的值,是在oracle 分配了日志緩沖區(qū)后,為了保護日志緩沖區(qū),設置了一些保護頁,通常我們會發(fā)現保護頁大小是8k(不同環(huán)境可能不一樣)。參考如下內容 SQL select substr(name,1,10) name,substr(value,1,10) value 2 from v$parameter where name = log_buffer; NAME VALUE - - log_buffer 163840 SQL select * from v$sgastat where pool is null; POOL NAME BYTES - - - fixed_sga 104936 db_block_buffers 1073741824 log_buffer 163840 SQL select * from v$sga; NAME VALUE - - Fixed Size 104936 Variable Size 823164928 Database Buffers 1073741824 Redo Buffers 172032 172032 163840 = 8192 (以上試驗數據是在 HP B.11.11 + Oracle 環(huán)境下得到的) 1.2 SGA的大小設置 在對SGA的結構進行簡單分析以后,下面是關于如何根據系統(tǒng)的情況正確設置SGA大小的問題。 SGA是一塊內存區(qū)域,占用的是系統(tǒng)物理內存,因此對于一個Oracle應用系統(tǒng)來說,SGA決不是越大越好,這就需要尋找一個系統(tǒng)優(yōu)化的平衡點。 1.2.1 設置參數前的準備 在設置SGA的內存參數之前,我們首先要問自己幾個問題 一:物理內存多大 二:操作系統(tǒng)估計需要使用多少內存 三:數據庫是使用文件系統(tǒng)還是裸設備 四:有多少并發(fā)連接 五:應用是OLTP 類型還是OLAP 類型 根據這幾個問題的答案,我們可以粗略地為系統(tǒng)估計一下內存設置。那我們現在來逐個問題地討論,首先物理內存多大是最容易回答的一個問題,然后操作系統(tǒng)估計使用多少內存呢?從經驗上看,不會太多,通常應該在200M 以內(不包含大量進程PCB)。 接下來我們要探討一個重要的問題,那就是關于文件系統(tǒng)和裸設備的問題,這往往容易被我們所忽略。操作系統(tǒng)對于文件系統(tǒng),使用了大量的buffer 來緩存操作系統(tǒng)塊。這樣當數據庫獲取數據塊的時候,雖然SGA 中沒有命中,但卻實際上可能是從操作系統(tǒng)的文件緩存中獲取的。而假如數據庫和操作系統(tǒng)支持異步IO,則實際上當數據庫寫進程DBWR寫磁盤時,操作系統(tǒng)在文件緩存中標記該塊為延遲寫,等到真正地寫入磁盤之后,操作系統(tǒng)才通知DBWR寫磁盤完成。對于這部分文件緩存,所需要的內存可能比較大,作為保守的估計,我們應該考慮在 0.20.3 倍內存大小。但是如果我們使用的是裸設備,則不考慮這部分緩存的問題。這樣的情況下SGA就有調大的機會。 關于數據庫有多少并發(fā)連接,這實際上關系到PGA 的大小(MTS 下還有l(wèi)arge_pool_size)。事實上這個問題應該說還跟OLTP 類型或者OLAP 類型相關。對于OLTP類型oracle 傾向于可使用MTS,對于OLAP 類型使用獨立模式,同時OLAP 還可能涉及到大量的排序操作的查詢,這些都影響到我們內存的使用。那么所有的問題綜合起來,實際上主要反映在UGA的大小上。UGA主要包含以下部分內存設置 SQL show parameters area_size NAME TYPE VALUE - - - bitmap_merge_area_size integer 1048576 create_bitmap_area_size integer 8388608 hash_area_size integer 131072 sort_area_size integer 65536 SQL 在這部分內存中我們最關注的通常是sort_area_size,這是當查詢需要排序的時候,數據庫會話將使用這部分內存進行排序,當內存大小不足的時候,使用臨時表空間進行磁盤排序。由于磁盤排序效率和內存排序效率相差好幾個數量級,所以這個參數的設置很重要。 當出現大量排序時的磁盤I/O操作時,可以考慮增加sort_area_size的值。sort_area_size是Oracle用于一次排序所需的最大內存數,在排序結束但是結果列返回之前,Oracle會釋放sort_area_size大小的內存,但是會保留sort_area_retained_size大小的內存,知道最后一行結果列返回以后,才釋放所有的內存。 會導致排序的語句有 SELECT DISTINCT , MINUS , INTERSECT , UNION 和 min()、max()、count() 操作;而不會導致排序的語句有 UPDATE , 帶BETWEEN子句的SELECT 等等。 這四個參數都是針對會話進行設置的,是單個會話使用的內存的大小,而不是整個數據庫使用的。偶爾會看見有人誤解了這個參數以為是整個數據庫使用的大小,這是極其嚴重的錯誤。假如設置了MTS,則UGA被分配在large_pool_size,也就是說放在了共享內存里面,不同進程(線程)之間可以共享這部分內存。在這個基礎上,我們假設數據庫存在并發(fā)執(zhí)行server process 為100 個,根據上面我們4 個參數在oracle8.1.7 下的默認值,我們來計算獨立模式下PGA 的大致大小。由于會話并不會經常使用create_bitmap_area_size 、bitmap_merge_area_size,所以我們通常不對四個參數求和。在考慮到除這四個參數外會話所保存的變量、堆棧等信息,我們估計為2M,則200 個進程最大可能使用200M 的PGA。 1.2.2 一個經驗公式 現在,根據上面這些假定,我們來看SGA 實際能達到多少內存。在1G 的內存的服務器上,我們能分配給SGA 的內存大約為400500M。若是2G 的內存,大約可以分到1G的內存給SGA,8G 的內存可以分到5G的內存給SGA。當然我們這里是以默認的排序部分內存sort_area_size=64k進行衡量的,假如我們需要調大該參數和hash_area_size等參數,然后我們應該根據并發(fā)的進程的數量,來衡量考慮這個問題。 事實上,通常我們更習慣通過直觀的公式化來表達這樣的問題: OS 使用內存+SGA+并發(fā)執(zhí)行進程數*(sort_area_size+hash_ara_size+2M) 0.7*總內存 (公式是死的,系統(tǒng)是活的,實際應用的調整不必框公式,這不過是一個參考建議) 在我們的實際應用中,假如采用的是裸設備,我們可適當的增大SGA(如果需要的話)。由于目前幾乎所有的操作系統(tǒng)都使用虛擬緩存,所以實際上如果就算SGA 設置的比較大也不會導致錯誤,而是可能出現頻繁的內存頁的換入與換出(page in/out)。在操作系統(tǒng)一級如果觀察到這個現象,那么我們就需要調整內存的設置。 1.2.3 各個參數的設置 那么SGA中的各個參數具體應該按照什么樣的原則來設置呢,下面進行討論: log_buffer 對于日志緩沖區(qū)的大小設置,通常我覺得沒有過多的建議,因為參考LGWR寫的觸發(fā)條件之后,我們會發(fā)現通常超過3M意義不是很大。作為一個正式系統(tǒng),可能考慮先設置這部分為log_buffer=13M 大小,然后針對具體情況再調整。 large_pool_size 對于大緩沖池的設置,假如不使用MTS,建議在2030M 足夠了。這部分主要用來保存并行查詢時候的一些信息,還有就是RMAN 在備份的時候可能會使用到。如果設置了MTS,則由于UGA部分要移入這里,則需要具體根據session最大數量和 sort_ares_size 等相關會話內存參數的設置來綜合考慮這部分大小的設置,一般可以考慮為 session * (sort_area_size + 2M)。這里要提醒一點,不是必須使用MTS,我們都不主張使用MTS,尤其同時在線用戶數小于500的情況下。 java_pool_size 假如數據庫沒有使用JAVA,我們通常認為保留1020M大小足夠了。事實上可以更少,甚至最少只需要32k,但具體跟安裝數據庫的時候的組件相關(比如http server)。 shared_pool_size 這是迄今為止最具有爭議的一部分內存設置。按照很多文檔的描述,這部分內容應該幾乎和數據緩沖區(qū)差不多大小。但實際上情況卻不是這樣的。首先我們要考究一個問題,那就是這部分內存的作用,它是為了緩存已經被解析過的SQL,而使其能被重用,不再解析。這樣做的原因是因為,對于一個新的SQL(shared_pool 里面不存在已經解析的可用的相同的SQL),數據庫將執(zhí)行硬解析,這是一個很消耗資源的過程。而若已經存在,則進行的僅僅是軟分析(在共享池中尋找相同SQL),這樣消耗的資源大大減少。所以我們期望能多共享一些SQL,并且如果該參數設置不夠大,經常會出現ora-04031錯誤,表示為了解析新的SQL,沒有可用的足夠大的連續(xù)空閑空間,這樣自然我們期望該參數能大一些。但是該參數的增大,卻也有負面的影響,因為需要維護共享的結構,內存的增大也會使得SQL 的老化的代價更高,帶來大量的管理的開銷,所有這些可能會導致CPU 的嚴重問題。 在一個充分使用綁定變量的比較大的系統(tǒng)中,shared_pool_size 的開銷通常應該維持在300M 以內。除非系統(tǒng)使用了大量的存儲過程、函數、包,比如oracle erp 這樣的應用,可能會達到500M甚至更高。于是我們假定一個1G內存的系統(tǒng),可能考慮設置該參數為100M,2G 的系統(tǒng)考慮設置為150M,8G 的系統(tǒng)可以考慮設置為200300M。 對于一個沒有充分使用或者沒有使用綁定變量系統(tǒng),這可能給我們帶來一個嚴重的問題。所謂沒有使用bind var 的SQL,我們稱為Literal SQL。也就是比如這樣的兩句SQL我們認為是不同的SQL,需要進行2 次硬解析: select * from EMP where name = TOM; select * from EMP where name = JERRY; 假如把 TOM 和 JERRY 換做變量V,那就是使用了bind var,我們可以認為是同樣的SQL 從而能很好地共享。共享SQL 本來就是shared_pool_size 這部分內存存在的本意,oracle的目的也在于此,而我們不使用bind var 就是違背了oracle 的初衷,這樣將給我們的系統(tǒng)帶來嚴重的問題。當然,如果通過在操作系統(tǒng)監(jiān)控,沒有發(fā)現嚴重的cpu問題,我們如果發(fā)現該共享池命中率不高可以適當的增加shred_pool_size。但是通常我們不主張這部分內存超過800M(特殊情況下可以更大)。 事實上,可能的話我們甚至要想辦法避免軟分析,這在不同的程序語言中實現方式有差異。我們也可能通過設置session_cached_cursors 參數來獲得幫助(這將增大PGA) 關于使用綁定變量的話題,在下面的應用優(yōu)化中繼續(xù)討論。 Data buffer 現在我們來談數據緩沖區(qū),在確定了SGA 的大小并分配完了前面部分的內存后,其余的,都分配給這部分內存。通常,在允許的情況下,我們都嘗試使得這部分內存更大。這部分內存的作用主要是緩存 DB BLOCK,減少甚至避免從磁盤上獲取數據,在8i中通常是由db_block_buffers*db_block_size 來決定大小的。如果我們設置了buffer_pool_keep 和buffer_pool_recycle,則應該加上后面這兩部分內存的大小。 可以看出,設置SGA時基本上應該掌握的原則是: data buffer 一般可以盡可能的大 shared_pool_size 應該適度 log buffer 在 1MB 以內就可以了 假定oracle是 32 bit ,服務器RAM大于2G ,注意你的PGA的情況,,則建議 shared_pool_size + data buffer +large_pool_size + java_pool_size select * from v$version; BANNER - Oracle8i Enterprise Edition Release .0 - Production PL/SQL Release .0 - Production CORE .0 Production TNS for 32-bit Windows: Version .0 - Production NLSRTL Version .0 Production 在UNIX平臺下的顯示有所不同,明顯可以看出是 64bit Oracle ,比如在HP-UX平臺上: SQL select * from v$version; BANNER - Oracle8i Enterprise Edition Release .0 - 64bit Production PL/SQL Release .0 - Production CORE .0 Production TNS for HPUX: Version .0 - Production NLSRTL Version .0 Production 32bit的oracle無論跑在32bit或者64bit的平臺都有SGA的限制的,而對于32bit的平臺只能跑32bit的oracle,但是在特定的操作系統(tǒng)下,可能提供了一定的手段,使得我們可以使用超過1.7G 的內存,達到2G 以上甚至更多。由于我們現在一般都使用64bit Oracle,因此關于如何在32bit平臺上擴展SGA大小的問題不再贅述。 1.4 9i中相關參數的變化 oracle的版本的更新,總是伴隨著參數的變化,并且越來越趨向于使得參數的設置更簡單,因為復雜的參數設置使得DBA們經常焦頭爛額。關于內存這部分的變化,我們可以考察下面的參數。事實上在9i中數據庫本身可以給出一組適合當前運行系統(tǒng)的SGA相關部分的參數調整值(參考V$DB_CACHE_ADVICE、V$SHARED_POOL_ADVICE),關于PGA也有相關視圖V$PGA_TARGET_ADVICE 等。 Data buffer 9i 中保留了8i中的參數,如設置了新的參數,則忽略舊的參數。9i中用db_cache_size來取代db_block_buffers , 用db_keep_cache_size 取代buffer_pool_keep, 用db_recycle_cache_size 取代buffer_pool_recycle;這里要注意9i 中設置的是實際的緩存大小而不再是塊的數量。另外9i新增加了db_nk_cache_size,這是為了支持在同一個數據庫中使用不同的塊大小而設置的。對于不同的表空間,可以定義不同的數據塊的大小,而緩沖區(qū)的定義則依靠該參數的支持。其中n 可以為2、4、6、8、16 等不同的值。在這里順便提及的一個參數就是db_block_lru_latches,該參數在9i中已經成為了保留參數,不推薦手工設置。 PGA 在9i 里面這部分也有了很大的變化。在獨立模式下,9i已經不再主張使用原來的UGA相關的參數設置,而代之以新的參數。假如workarea_size_policy=AUTO(缺?。?,則所有的會話的UGA 共用一大塊內存,該內存由 pga_aggregate_target 設置。在我們根據前面介紹的方法評估了所有進程可能使用的最大PGA 內存之后,我們可以通過在初始化參數中設置這個參數,從而不再關心其他 ”*_area_size” 參數。 SGA_MAX_SIZE 在9i中若設置了SGA_MAX_SIZE,則在總和小于等于這個值內,可以動態(tài)的調整數據緩沖區(qū)和共享池的大小 SQL show parameters sga_max_size NAME TYPE VALUE - - - - sga_max_size unknown 193752940 SQL SQL alter system set db_cache_size = 30000000; System altered. SQL alter system set shared_pool_size = 20480000; System altered. 1.5 lock_sga = true 的問題 由于幾乎所有的操作系統(tǒng)都支持虛擬內存,所以即使我們使用的內存小于物理內存,也不能避免操作系統(tǒng)將SGA 換到虛擬內存(SWAP)。所以我們可以嘗試使得SGA 鎖定在物理內存中不被換到虛擬內存中,這樣減少頁面的換入和換出,從而提高性能。但在這里遺憾的是,windows 是無法避免這種情況的。下面我們來參考在不同的幾個系統(tǒng)下怎么實現lock_sga AIX 5L(AIX 4.3.3 以上) logon aix as root cd /usr/samples/kernel ./vmtune (信息如下) v_pingshm已經是1 ./vmtune -S 1 然后oracle用戶修改initSID.ora 中 lock_sga = true 重新啟動數據庫 HP UNIX Root身份登陸 Create the file /etc/privgroup: vi /etc/privgroup Add line dba MLOCK to file As root, run the command /etc/setprivgrp -f /etc/privgroup: $/etc/setprivgrp -f /etc/privgroup oracle用戶修改initSID.ora中l(wèi)ock_sga=true 重新啟動數據庫 SOLARIS (solaris2.6以上) 8i版本以上數據庫默認使用隱藏參數 use_ism = true ,自動鎖定SGA于內存中,不用設置lock_sga, 如果設置 lock_sga =true 使用非 root 用戶啟動數據庫將返回錯誤。 WINDOWS 不能設置lock_sga=true,可以通過設置pre_page_sga=true,使得數據庫啟動的時候就把所有內存頁裝載,這樣可能起到一定的作用。 2. 應用優(yōu)化 下面我們從技術的角度入手,來探討數據庫優(yōu)化方面的問題。通常作為優(yōu)化Oracle系統(tǒng)的人,或者是DBA,其實很多時候對應用并不很了解甚至可以說是完全不了解,更不要說對應用程序代碼的了解。事實上呢,一個系統(tǒng)運行的快或者慢相信大家都明白,第一重要的是數據庫的設計,然后是應用的設計,SQL語句的編寫,最后才是數據庫參數的調整和硬件、網絡的問題,等等。所以在我們不了解一個系統(tǒng)的時候來優(yōu)化數據庫應用不是一個輕松的容易的事情。那么我們第一步應該怎么做呢? 通常有兩類方法: 其中一個方法就是我們常用的,使用statspack來進行診斷系統(tǒng)的瓶頸所在。在statspack中oracle給出了幾乎涵蓋oracle大部分重要內容的信息。 另外一種方式,就是trace session。假如某個session運行很慢或者某個用戶的某個查詢很慢,那么這個時候我們可以通過trace session的方式來診斷到底是慢在哪里,看究竟執(zhí)行計劃是怎樣的,然后在user_dump_dest下根據該session的進程號或者線程號可以找到一個產生的trace文件。通過使用tkprof格式化文件之后我們就可以看見很多的統(tǒng)計信息,這里包括了執(zhí)行計劃、parse/fetch等步驟消耗cpu的時間。通常我們是觀察query模式下的consistent gets來首先看sql是否使用了索引,然后看執(zhí)行計劃是不是正常,是不是有調整的余地。當然如果您沒有實際做過的話,這些內容說起來很抽象。這是在不了解應用和程序下針對特定session的診斷和調整過程。 trace session的方式是一種自下而上的方法,從sql入手;而statspack是自頂向下的方法,也就是從宏觀上先診斷數據庫的瓶頸在哪里,然后從瓶頸入手來做調整,這個習慣上又可以稱為通過等待事件(wait event)入手的方法。 2.1 使用statspack statspack是一個性能診斷工具,首先發(fā)布于Oracle8.1.6版本,在8.1.7版本中功能得到加強。Statspack除了查找實例中的性能問題外,還可以查找應用程序中高負荷的SQL語句,很容易確定Oracle 數據庫的瓶頸所在,并且記錄數據庫性能狀態(tài)。 在數據庫中Statspack 的腳本位于$ORACLE_HOME/RDBMS/ADMIN 目錄下,對于ORACLE8.1.6,是一組以stat 開頭的文件;對于ORACLE8.1.7,是一組以sp 開頭的文件。 在Statspack 發(fā)布之前,我們通常能夠使用診斷數據庫的工具是兩個腳本UTLBSTAT.SQL 和UTLESTAT.SQL,BSTAT/ESTAT 是一個非常簡單的性能診斷工具。UTLBSTAT 獲得開始時很多V$視圖的快照,UTLESTAT 通過先前的快照和當前視圖生成一個報表。 該報表實際上相當于statspack 中的兩個采樣點。 Statspack 通過連續(xù)的采樣,能夠給我們提供至關重要的趨勢分析數據。這是一個巨大的進步。能夠使用Statspack 的環(huán)境我們就盡量不要使用BSTAT/ESTAT 的方式來診斷數據庫問題。 2.1.1 安裝statapack 步驟一: 為了能夠順利安裝和運行Statspack ,首先需要設置以下兩個系統(tǒng)參數: 1. job_queue_processes 為了能夠建立自動任務,執(zhí)行數據收集,該參數需要大于0。你可以在初試化參數文件中修改該參數(使該參數在重起后以然有效)。 該參數可以在系統(tǒng)級動態(tài)修改(重起后失效)。 SQL alter system set job_queue_processes = 6; System altered 在Oracle9i 當中,可以指定范圍,如 both,這樣該修改在當前及之后保持有效(僅當你使用spfile 時,如果在9i 中仍然使用pfile,那么更改方法同8i 相同): SQL alter system set job_queue_processes = 6 scope=both; System altered 2. timed_statistics 收集操作系統(tǒng)的計時信息,這些信息可被用來顯示時間等統(tǒng)計信息、優(yōu)化數據庫和 SQL 語句。要防止因從操作系統(tǒng)請求時間而引起的開銷,請將該值設置為False。 使用statspack 收集統(tǒng)計信息時建議將該值設置為 TRUE,否則收集的統(tǒng)計信息大約只能起到10%的作用,將timed_statistics 設置為True 所帶來的性能影響與好處相比是微不足道的。 該參數使收集的時間信息存儲在在V$SESSTATS 和V$SYSSTATS 等動態(tài)性能視圖中。 timed_statistics 參數也可以在實例級進行更改 SQL alter system set timed_statistics = true; System altered 如果你擔心一直啟用timed_statistics 對于性能的影響,你可以在使用statspack 之前在system 更改,采樣過后把該參數動態(tài)修改成false。 步驟二: 需要單獨為statspack創(chuàng)建一個存儲數據的表空間,如果采樣間隔較短,周期較長,打算長期使用,那么可能需要一個大一點的表空間,如果每個半個小時采樣一次,連續(xù)采樣一周,數據量是很大的。下面的例子中創(chuàng)建了一個500M 的測試表空間。 注意: 這里創(chuàng)建的表空間不能太小,如果太小的話創(chuàng)建對象會失敗,建議至少建立100M 表空間。 SQL create tablespace perfstat 2 datafile /oracle/oradata/oradata/res/perfstat.dbf 3 size 500M; Tablespace created。 步驟三: 在 sqlplus 中用internal 身份登陸,或者擁有SYSDBA(connect / as sysdba)權限的用戶登陸。 注: 在Oracle9i 中,不存在internal 用戶,可以使用sys 用戶以sysdba 身份連接。 先轉到$ORACLE_HOME/RDBMS/ADMIN 目錄,檢查安裝腳本是否存在,同時我們執(zhí)行腳本也可以方便些。 $ cd $ORACLE_HOME/rdbms/admin $ ls -l sp*.sql -rw-r-r- 1 oracle other 1774 Feb 18 2000 spauto.sql -rw-r-r- 1 oracle other 62545 Jun 15 2000 spcpkg.sql -rw-r-r- 1 oracle other 877 Feb 18 2000 spcreate.sql -rw-r-r- 1 oracle other 31193 Jun 15 2000 spctab.sql -rw-r-r- 1 oracle other 6414 Jun 15 2000 spcusr.sql -rw-r-r- 1 oracle other 758 Jun 15 2000 spdrop.sql -rw-r-r- 1 oracle other 3615 Jun 15 2000 spdtab.sql -rw-r-r- 1 oracle other 1274 Jun 15 2000 spdusr.sql -rw-r-r- 1 oracle other 6760 Jun 15 2000 sppurge.sql -rw-r-r- 1 oracle other 71034 Jul 12 2000 spreport.sql -rw-r-r- 1 oracle other 2191 Jun 15 2000 sptrunc.sql -rw-r-r- 1 oracle other 30133 Jun 15 2000 spup816.sql $ 接下來我們就可以開始安裝Statspack 了。在Oracle8.1.6 版本中運行statscre.sql; 在Oracle8.1.7 版本中運行spcreate.sql。 這期間會提示你輸入缺省表空間和臨時表空間的位置,輸入我們?yōu)?perfstat 用戶創(chuàng)建的表空間和你的臨時表空間。安裝腳本會自動創(chuàng)建perfstat 用戶。 $ sqlplus SQL*Plus: Release .0 - Production on Sat Jul 26 16:27:31 2003 (c) Copyright 2000 Oracle Corporation. All rights reserved. Enter user-name: internal Connected to: Oracle8i Enterprise Edition Release .0 - Production With the Partitioning option JServer Release .0 - Production SQL SQL spcreate . Installing Required Packages Package created. Grant succeeded. View created. Package body created. Package created. Synonym dropped. Synonym created. Specify PERFSTAT users default tablespace Enter value for default_tablespace: perfstat Using perfstat for the default tablespace User altered. User altered. Specify PERFSTAT users temporary tablespace Enter value for temporary_tablespace: temp Using temp for the temporary tablespace User altered. NOTE: SPCUSR complete. Please check spcusr.lis for any errors. 如果安裝成功,你可以接著看到如下的輸出信息: . Creating Package STATSPACK. Package created. No errors. Creating Package Body STATSPACK. Package body created. No errors. NOTE: SPCPKG complete. Please check spcpkg.lis for any errors. 可以查看.lis 文件查看安裝時的錯誤信息。 步驟四: 如果安裝過程中出現錯誤,那么可以運行spdrop.sql 腳本來刪除這些安裝腳本建立的對象。然后重新運行spcreate.sql來創(chuàng)建這些對象。 SQL spdrop Dropping old versions (if any) Synonym dropped. Sequence dropped. Synonym dropped. Table dropped. Synonym dropped. View dropped. NOTE: SPDUSR complete. Please check spdusr.lis for any errors. (以上的安裝過程描述是在 HP 11.11 + Oracle 8.1.7 平臺上得到的) 2.1.2 測試statspack 運行statspack.snap 可以產生系統(tǒng)快照,運行兩次,然后執(zhí)行spreport.sql 就可以生成一個基于兩個時間點的報告。 如果一切正常,說明安裝成功。 SQLexecute statspack.snap PL/SQL procedure successfully completed. SQLexecute statspack.snap PL/SQL procedure successfully completed. SQLspreport.sql 可是有可能你會得到以下錯誤: SQL exec statspack.snap; BEGIN statspack.snap; END; * ERROR at line 1: ORA-01401: inserted value too large for column ORA-06512: at PERFSTAT.STATSPACK, line 978 ORA-06512: at PERFSTAT.STATSPACK, line 1612 ORA-06512: at PERFSTAT.STATSPACK, line 71 ORA-06512: at line 1 這是Oracle 的一個Bug,Bug 號1940915。 該Bug 自 后修正。 這個問題只會出現在多位的字符集, 需要修改spcpkg.sql 腳本,$ORACLE_HOME/rdbms/admin/spcpkg.sql,將substr 修改為 substrb,然后重新運行該腳本。 該腳本錯誤部分: select l_snap_id , p_dbid , p_instance_number , substr(sql_text,1,31) substr 會將多位的字符, 當作一個byte.substrb 則會當作多個byte。在收集數據時, statpack 會將 top10 的 sql 前 31 個字節(jié) 存入數據表中,若在SQL 的前31 個字有中文,就會出現此錯誤。 注意:運行 spcpkg.sql 也需要以 internal 用戶登錄 sqlplus 2.1.3 生成statspack報告 調用spreport.sql 可以生成分析報告: 當調用spreprot.sql 時,系統(tǒng)首先會查詢快照列表,然后要求你選擇生成報告的開始快照ID(begin_snap)和結束快照ID(end_snap),生成一個報告. 為了生成一個report,我們至少需要兩次采樣: SQL spreport DB Id DB Name Inst Num Instance - - - - 2749170756 RES 1 res Completed Snapshots Snap Snap Instance DB Name Id Snap Started Level
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年執(zhí)業(yè)藥師之中藥學綜合知識與技能題庫綜合試卷A卷附答案
- 七年級數學教學設計用同位角第三直線判定平行線教學設計
- 體液潴留的臨床護理
- 枕葉癲癇的臨床護理
- 《市場趨勢分析》課件
- 十二指腸結核的臨床護理
- 人教版九年級化學上冊-《如何正確書寫化學方程式》思維導圖課件
- 上海十五中考試卷及答案
- 山東省初中省考試卷及答案
- 紡織員工培訓與技能提升考核試卷
- ISOTS 22163專題培訓考試
- 六年級下冊數學課件-第4單元 比例 整理和復習 人教版(共21張PPT)
- JJF(魯) 142-2022 稱重式雨量計校準規(guī)范
- Adobe-Illustrator-(Ai)基礎教程
- 程序的運行結果PPT學習教案
- 圓柱鋼模計算書
- 合成寶石特征x
- 查擺問題及整改措施
- 年度研發(fā)費用專項審計報告模板(共22頁)
- 隧道工程隧道支護結構設計實用教案
- 得力打卡機破解Excel工作表保護密碼4頁
評論
0/150
提交評論