oracle性能Statspack使用之命中率調整 軟件測試
影響Oracle的性能的因素有很多,例如oracle自身的sga設置,磁盤(pán)I/O設置等。但需要強調的一點(diǎn)就是oracle調整的原始動(dòng)機都是減少磁盤(pán)I/O。下面舉一個(gè)數據來(lái)說(shuō)明磁盤(pán)I/O的影響之大,ram中獲取數據塊和磁盤(pán)上獲取數據塊的時(shí)間差異相差兩個(gè)數量級,可以認為ram比磁盤(pán)塊14000倍,在磁盤(pán)上的訪(fǎng)問(wèn)時(shí)間是毫秒級(一秒的千分之一),在ram的速度是納秒級的(一秒的10億分之一)。從上面可以看出,如果在理論上將oracle的數據全部緩存在內存中,那訪(fǎng)問(wèn)速度是極快的。
鑒于當前學(xué)習oracle還不深,本文檔的目的是如何通過(guò)statspack來(lái)分析數據庫的命中率和調整oracle的SGA。從oracle自身來(lái)說(shuō),性能最大的兩個(gè)瓶頸就是命中率和等待事件。等待事件作為接下來(lái)第二個(gè)學(xué)習點(diǎn),本文檔當作命中率和oracle內存機制熟悉的一次總結。
本次總結分為以下幾點(diǎn):
1、oracle的SGA介紹;
2、SGA各部分命中率介紹;
3、命中率相關(guān)的Statspack數據表作用介紹;
4、如何使用statspack獲得和分析命中率。
一、 oracle的SGA
通常oracle實(shí)例包括了兩個(gè)組件:系統全局區域SGA和oracle后臺進(jìn)程。當啟動(dòng)oracle的時(shí)候,oracle就會(huì )用malloc()命令去建立一個(gè)內存區域作為SGA。
SGA總容量=共享池(shared pool)+緩存區高速緩存(data buffer cache)《db_keep_cache_size,db_recycle_cache_size,db_nk_cache_size》+日志緩沖區(redo log buffer)《11Kredo log buffer的保護頁(yè)》+大型池(large pool)+java存儲區(java pool)+《streams_pool_size(10g中的新內存池)+16M(sga內部?jì)却嫦,適合于9I及之前版本)》
1、共享池由庫緩存(library cache)與字典緩存(dictionary cache)兩部分,庫緩存包括共享sql區(shared sql areas)、pl/sql存儲過(guò)程和包以及控制結構(如鎖、庫緩存句柄)。
2、大型池屬于可變區,用于共享服務(wù)(shared server mts方式)的會(huì )話(huà)內存和oracle分布式事務(wù)處理的oracle接口,oracle備份和恢復操作(啟用了rman)。
3、Java池的內存用于存儲所有會(huì )話(huà)中特定java代碼和jvm中的數據。屬于可變區。
參數介紹:
1、Sga_max_size ,SGA可用最大物理內存是由該參數決定的?捎胹how parameter sga查詢(xún)。平常查看任務(wù)管理器,你會(huì )發(fā)現oracle進(jìn)程顯示的內存使用數量小于sga最大的內存數量,是因為oracle實(shí)例開(kāi)啟時(shí),只載入內存區最小的大小,其他sga內存只作為虛擬內存分配,這樣就會(huì )有一個(gè)風(fēng)險,產(chǎn)生過(guò)多的page in/out操作,這種磁盤(pán)交換是很耗時(shí)間的。因而可以用pre_page_sga設置為true ,lock_sga(危險,導致數據無(wú)法開(kāi)啟,原因未研究,官方說(shuō)法是跟PC機有關(guān))設置為true解決。
2、db_block_size,執行許多全表收索的oracle數據倉庫和系統將會(huì )從16K大小塊中受益。另外db_file_multiblock_read_count與db_block_size之前有非常重要的關(guān)系,在unlx物理層上,oracle總是以最小64K的數據塊讀入。
3、db_cache_size指定data buffer cache的大小。在oltp系統中,推薦設置為sga_max_siz/2-sga_max_size*2/3.
非標準塊尺寸的塊大小可以在創(chuàng )建表空間(create tablespace)通過(guò)blocksize參數指定,而不同塊尺寸的buffer cache的大小就由相應參數db_nk_cache_size來(lái)指定,其中n可以是2,4,8,16或者32。另外注意一點(diǎn),db_nk_cache_size參數不能設定標準塊尺寸的緩沖區大小,舉例來(lái)說(shuō),如果db_block_size設定為4k,就不能再設定db_4k_cache_size參數了。
4、shared_pool_size決定共享區的大小
5、large_pool_size確定大型池的大小
6、java_pool_size確定java池的大小
文章來(lái)源于領(lǐng)測軟件測試網(wǎng) http://kjueaiud.com/