<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    Java, Only Java!

    統(tǒng)計(jì)

    留言簿(20)

    積分與排名

    好友空間

    文檔技巧

    閱讀排行榜

    評(píng)論排行榜

    性能測(cè)試之?dāng)?shù)據(jù)庫(kù)調(diào)優(yōu)篇(轉(zhuǎn)-請(qǐng)作者與我聯(lián)系)

    前言:

    通過(guò)緊張的網(wǎng)通、移動(dòng)性能測(cè)試,雖然測(cè)試準(zhǔn)備和討論的環(huán)節(jié)很多,應(yīng)用服務(wù)器測(cè)試如果要體現(xiàn)應(yīng)用服務(wù)器的性能,那么在測(cè)試環(huán)節(jié)中,其他環(huán)節(jié)不能成為瓶頸,否則應(yīng)用服務(wù)器的性能將很難展現(xiàn)。但實(shí)際在我們的測(cè)試實(shí)踐中,無(wú)論準(zhǔn)備情況,數(shù)據(jù)庫(kù)調(diào)優(yōu)都是永恒的話題,數(shù)據(jù)庫(kù)的優(yōu)劣直接影響整個(gè)測(cè)試的性能表現(xiàn)。本文結(jié)合了一些測(cè)試經(jīng)驗(yàn)和一些資料的整理,給出了個(gè)人的一些經(jīng)驗(yàn),共大家分享,本文測(cè)重于 Unix 環(huán)境。

    一般問(wèn)題的發(fā)現(xiàn)及解決:

    Oracle 數(shù)據(jù)庫(kù)服務(wù)器是整個(gè)系統(tǒng)的核心,它的性能高低直接影響整個(gè)系統(tǒng)的性能,為了調(diào)整 Oracle 數(shù)據(jù)庫(kù)服務(wù)器的性能,主要從以下幾個(gè)方面考慮:

    第一步:

    ??? 調(diào)整操作系統(tǒng)以適合 Oracle 數(shù)據(jù)庫(kù)服務(wù)器運(yùn)行, Oracle 數(shù)據(jù)庫(kù)服務(wù)器很大程度上依賴于運(yùn)行服務(wù)器的操作系統(tǒng),如果操作系統(tǒng)不能提供最好性能,那么無(wú)論如何調(diào)整, Oracle 數(shù)據(jù)庫(kù)服務(wù)器也無(wú)法發(fā)揮其應(yīng)有的性能。

    第二步:

    ? ?? Oracle 數(shù)據(jù)庫(kù)服務(wù)器規(guī)劃系統(tǒng)資源,據(jù)已有計(jì)算機(jī)可用資源 ,? 規(guī)劃分配給 Oracle 服務(wù)器資源原則是:盡可能使 Oracle 服務(wù)器使用資源最大化 , 特別在 Client/Server 中盡量讓服務(wù)器上所有資源都來(lái)運(yùn)行 Oracle 服務(wù)。調(diào)整計(jì)算機(jī)系統(tǒng)中的內(nèi)存配置,多數(shù)操作系統(tǒng)都用虛存來(lái)模擬計(jì)算機(jī)上更大的內(nèi)存,它實(shí)際上是硬盤(pán)上的一定的磁盤(pán)空間。當(dāng)實(shí)際的內(nèi)存空間不能滿足應(yīng)用軟件的要求時(shí),操作系統(tǒng)就將用這部分的磁盤(pán)空間對(duì)內(nèi)存中的信息進(jìn)行頁(yè)面替換,這將引起大量的磁盤(pán) I/O 操作,使整個(gè)服務(wù)器的性能下降。為了避免過(guò)多地使用虛存,應(yīng)加大計(jì)算機(jī)的內(nèi)存。

    第三步:

    ??? Oracle 數(shù)據(jù)庫(kù)服務(wù)器設(shè)置操作系統(tǒng)進(jìn)程優(yōu)先級(jí),不要在操作系統(tǒng)中調(diào)整 Oracle 進(jìn)程的優(yōu)先級(jí),因?yàn)樵?/span> Oracle 數(shù)據(jù)庫(kù)系統(tǒng)中,所有的后臺(tái)和前臺(tái)數(shù)據(jù)庫(kù)服務(wù)器進(jìn)程執(zhí)行的是同等重要的工作,需要同等的優(yōu)先級(jí)。所以在安裝時(shí),讓所有的數(shù)據(jù)庫(kù)服務(wù)器進(jìn)程都使用缺省的優(yōu)先級(jí)運(yùn)行。

    第四步:

    ? ?? 調(diào)整內(nèi)存分配, Oracle 數(shù)據(jù)庫(kù)服務(wù)器保留 3 個(gè)基本的內(nèi)存高速緩存,分別對(duì)應(yīng) 3 種不同類型的數(shù)據(jù):庫(kù)高速緩存,字典高速緩存和緩沖區(qū)高速緩存。庫(kù)高速緩存和字典高速緩存一起構(gòu)成共享池,共享池再加上緩沖區(qū)高速緩存便構(gòu)成了系統(tǒng)全程區(qū) (SGA) SGA 是對(duì)數(shù)據(jù)庫(kù)數(shù)據(jù)進(jìn)行快速訪問(wèn)的一個(gè)系統(tǒng)全程區(qū),若 SGA 本身需要頻繁地進(jìn)行釋放、分配,則不能達(dá)到快速訪問(wèn)數(shù)據(jù)的目的,因此應(yīng)把 SGA 放在主存中,不要放在虛擬內(nèi)存中。內(nèi)存的調(diào)整主要是指調(diào)整組成 SGA 的內(nèi)存結(jié)構(gòu)的大小來(lái)提高系統(tǒng)性能,由于 Oracle 數(shù)據(jù)庫(kù)服務(wù)器的內(nèi)存結(jié)構(gòu)需求與應(yīng)用密切相關(guān),所以內(nèi)存結(jié)構(gòu)的調(diào)整應(yīng)在磁盤(pán) I/O 調(diào)整之前進(jìn)行。

    1 、庫(kù)緩沖區(qū)的調(diào)整

      庫(kù)緩沖區(qū)中包含私用和共享 SQL PL/SQL 區(qū),通過(guò)比較庫(kù)緩沖區(qū)的命中率決定它的大小。要調(diào)整庫(kù)緩沖區(qū),必須首先了解該庫(kù)緩沖區(qū)的活動(dòng)情況,庫(kù)緩沖區(qū)的活動(dòng)統(tǒng)計(jì)信息保留在動(dòng)態(tài)性能表 v$librarycache 數(shù)據(jù)字典中,可通過(guò)查詢?cè)摫韥?lái)了解其活動(dòng)情況,以決定如何調(diào)整。

       Select sum(pins),sum(reloads) from v$librarycache;

       Pins 列給出 SQL 語(yǔ)句, PL/SQL 塊及被訪問(wèn)對(duì)象定義的總次數(shù); Reloads 列給出 SQL PL/SQL 塊的隱式分析或?qū)ο蠖x重裝載時(shí)在庫(kù)程序緩沖區(qū)中發(fā)生的錯(cuò)誤。如果 sum(pins)/sum(reloads) 0 ,則庫(kù)緩沖區(qū)的命中率合適;若 sum(pins)/sum(reloads)>1, 則需調(diào)整初始化參數(shù) shared_pool_size 來(lái)重新調(diào)整分配給共享池的內(nèi)存量。

    2 數(shù)據(jù)字典緩沖區(qū)的調(diào)整

      數(shù)據(jù)字典緩沖區(qū)包含了有關(guān)數(shù)據(jù)庫(kù)的結(jié)構(gòu)、用戶、實(shí)體信息。數(shù)據(jù)字典的命中率,對(duì)系統(tǒng)性能影響極大。數(shù)據(jù)字典緩沖區(qū)的使用情況記錄在動(dòng)態(tài)性能表 v$librarycache 中,可通過(guò)查詢?cè)摫韥?lái)了解其活動(dòng)情況,以決定如何調(diào)整。

       Select sum(gets),sum(getmisses) from v$rowcache;

       Gets 列是對(duì)相應(yīng)項(xiàng)請(qǐng)求次數(shù)的統(tǒng)計(jì); Getmisses 列是引起緩沖區(qū)出錯(cuò)的數(shù)據(jù)的請(qǐng)求次數(shù)。對(duì)于頻繁訪問(wèn)的數(shù)據(jù)字典緩沖區(qū), sum(getmisses)/sum(gets)<10% 15% 。若大于此百分?jǐn)?shù),則應(yīng)考慮增加數(shù)據(jù)字典緩沖區(qū)的容量,即需調(diào)整初始化參數(shù) shared_pool_size 來(lái)重新調(diào)整分配給共享池的內(nèi)存量。

    3 緩沖區(qū)高速緩存的調(diào)整

      用戶進(jìn)程所存取的所有數(shù)據(jù)都是經(jīng)過(guò)緩沖區(qū)高速緩存來(lái)存取,所以該部分的命中率,對(duì)性能至關(guān)重要。緩沖區(qū)高速緩存的使用情況記錄在動(dòng)態(tài)性能表 v$sysstat 中,可通過(guò)查詢?cè)摫韥?lái)了解其活動(dòng)情況,以決定如何調(diào)整。

       Select name,value from v$sysstat where name in ('dbblock gets','consistent gets','physical reads');

       dbblock gets consistent gets 的值是請(qǐng)求數(shù)據(jù)緩沖區(qū)中讀的總次數(shù)。 physical reads 的值是請(qǐng)求數(shù)據(jù)時(shí)引起從盤(pán)中讀文件的次數(shù)。從緩沖區(qū)高速緩存中讀的可能性的高低稱為緩沖區(qū)的命中率,計(jì)算公式:

       Hit Ratio=1-(physical reds/(dbblock gets+consistent gets))

      如果 Hit Ratio<60% 70% ,則應(yīng)增大 db_block_buffers 的參數(shù)值。 db_block_buffers 可以調(diào)整分配給緩沖區(qū)高速緩存的內(nèi)存量,即 db_block_buffers 可設(shè)置分配緩沖區(qū)高速緩存的數(shù)據(jù)塊的個(gè)數(shù)。緩沖區(qū)高速緩存的總字節(jié)數(shù) =db_block_buffers 的值 *db_block_size 的值。 db_block_size 的值表示數(shù)據(jù)塊大小的字節(jié)數(shù),可查詢 v$parameter 表:

       select name,value from v$parameter where name='db_block_size';

      在修改了上述數(shù)據(jù)庫(kù)的初始化參數(shù)以后,必須先關(guān)閉數(shù)據(jù)庫(kù),在重新啟動(dòng)數(shù)據(jù)庫(kù)后才能使新的設(shè)置起作用。

    IO 問(wèn)題的發(fā)現(xiàn)及解決:

    很多的時(shí)侯,當(dāng)應(yīng)用很慢、數(shù)據(jù)庫(kù)很慢的時(shí)侯,我們到數(shù)據(jù)庫(kù)時(shí)做幾個(gè)示例的 Select 也發(fā)現(xiàn)同樣的問(wèn)題時(shí),有些時(shí)侯我們會(huì)無(wú)從下手,因?yàn)槲覀冋J(rèn)為數(shù)據(jù)庫(kù)的各種命種率都是滿足 Oracle 文檔的建議。實(shí)際上如今的優(yōu)化己經(jīng)向優(yōu)化等待 (waits) 轉(zhuǎn)型了,實(shí)際中性能優(yōu)化最根本的出現(xiàn)點(diǎn)也都集中在 IO ,這是影響性能最主要的方面,由系統(tǒng)中的等待去發(fā)現(xiàn) Oracle 庫(kù)中的不足、操作系統(tǒng)某些資源利用的不合理是一個(gè)比較好的辦法。在移動(dòng)的測(cè)試中, Sun 的工程師也推薦這樣的做法。

    ?

    第一步:

    通過(guò)操作系統(tǒng)的一些工具檢查系統(tǒng)的狀態(tài),比如 CPU 、內(nèi)存、交換、磁盤(pán)的利用率,根據(jù)經(jīng)驗(yàn)或與系統(tǒng)正常時(shí)的狀態(tài)相比對(duì),有時(shí)系統(tǒng)表面上看起來(lái)看空閑這也可能不是一個(gè)正常的狀態(tài),因?yàn)?/span> cpu 可能正等待 IO 的完成。除此之外我們還應(yīng)觀注那些占用系統(tǒng)資源 (cpu 、內(nèi)存 ) 的進(jìn)程。

    ?

    1 、如何檢查操作系統(tǒng)是否存在 IO 的問(wèn)題?使用的工具有 sar, 這是一個(gè)比較通用的工具。

    Rp1#sar -u 2 10

    即每隔 2 秒檢察一次,共執(zhí)行 20 次。示例返回:

    ?

    Linux 2.4.21-20.ELsmp (YY075) 05/19/2005

    10:36:07 AM CPU %user %nice %system %idle

    10:36:09 AM all 0.00 0.00 0.13 99.87

    10:36:11 AM all 0.00 0.00 0.00 100.00

    10:36:13 AM all 0.25 0.00 0.25 99.49

    10:36:15 AM all 0.13 0.00 0.13 99.75

    10:36:17 AM all 0.00 0.00 0.00 100.00

    10:36:17 AM CPU %user %nice %system %idle

    10:36:19 AM all 0.00 0.00 0.00 100.00

    10:36:21 AM all 0.00 0.00 0.00 100.00

    10:36:23 AM all 0.00 0.00 0.00 100.00

    10:36:25 AM all 0.00 0.00 0.00 100.00

    ?

    其中的 %usr 指的是用戶進(jìn)程使用的 cpu 資源的百分比, %sys 指的是系統(tǒng)資源使用 cpu 資源的百分比, %wio 指的是等待 io 完成的百分比,這是值得我們觀注的一項(xiàng), %idle 即空閑的百分比。如果 wio 列的值很大,如在 35% 以上,說(shuō)明你的系統(tǒng)的 IO 存在瓶頸,你的 CPU 花費(fèi)了很大的時(shí)間去等待 IO 的完成。 Idle 很小說(shuō)明系統(tǒng) CPU 很忙。

    當(dāng)你的系統(tǒng)存在 IO 的問(wèn)題,可以從以下幾個(gè)方面解決

    1 、查找 Oracle 中不合理的 sql 語(yǔ)句,對(duì)其進(jìn)行優(yōu)化。

    2 、對(duì) Oracle 中訪問(wèn)量頻繁的表除合理建索引外,再就是把這些表分表空間存放以免訪問(wèn)上產(chǎn)生熱點(diǎn),再有就是對(duì)表合理分區(qū)。

    ?

    第二步:

    關(guān)注一下內(nèi)存,常用的工具便是 vmstat ,對(duì)于 hp-unix 來(lái)說(shuō)可以用 glance,Aix 來(lái)說(shuō)可以用 topas, 當(dāng)你發(fā)現(xiàn) vmstat pi 列非零, memory 中的 free 列的值很小, glance,topas 中內(nèi)存的利用率多于 80% 時(shí),這時(shí)說(shuō)明你的內(nèi)存方面應(yīng)該調(diào)節(jié)一下了,方法大體有以下幾項(xiàng)。

    ?

    1 、劃給 Oracle 使用的內(nèi)存不要超過(guò)系統(tǒng)內(nèi)存的 1/2, 一般保在系統(tǒng)內(nèi)存的 40% 為益。

    為系統(tǒng)增加內(nèi)存

    2 、如果你的連接特別多,可以使用 MTS 的方式

    3 、打全補(bǔ)丁,防止內(nèi)存漏洞。

    ?

    第三步:

    如何找到點(diǎn)用系用資源特別大的 Oracle session 及其執(zhí)行的語(yǔ)句。 Hp-unix 可以用 glance,top IBM AIX 可以用 topas ;此外可以使用 ps 的命令。通過(guò)這些程序我們可以找到占用系統(tǒng)資源特別大的這些進(jìn)程的進(jìn)程號(hào),我們就可以通過(guò)以下的 sql 語(yǔ)句發(fā)現(xiàn)這個(gè) pid 正在執(zhí)行哪個(gè) sql ,這個(gè) sql 最好在 pl/sql developer,toad 等軟件中執(zhí)行 , <> 中的 spid 換成你的 spid 就可以了。

    SELECT a.username,a.machine,a.program,a.sid,a.serial#,a.status,c.piece,c.sql_text from v$session a,v$process b,v$sqltext c WHERE b.spid='<>' AND b.addr=a.paddr AND a.sql_address=c.address(+)order BY c.piece

    我們就可以把得到的這個(gè) sql 分析一下,看一下它的執(zhí)行計(jì)劃是否走索引,對(duì)其優(yōu)化避免全表掃描,以減少 IO 等待,從而加快語(yǔ)句的執(zhí)行速度。

    另一個(gè)有用的腳本:查找前十條性能差的 sql:

    SELECT * FROM (select PARSING_USER_ID,EXECUTIONS,SORTS,COMMAND_TYPE,DISK_READS,sql_text FROM v$sqlarea

    order BY disk_reads DESC )where ROWNUM<10 ;

    ?

    注意:在做優(yōu)化 sql 時(shí),經(jīng)常碰到使用 in 的語(yǔ)句,這時(shí)我們一定要用 exists 把它給換掉,因?yàn)?/span> Oracle 在處理 In 時(shí)是按 Or 的方式做的,即使使用了索引也會(huì)很慢。 ( 這個(gè)很有用,我在煙草項(xiàng)目中,大量的 not in 操作對(duì)大數(shù)據(jù)量的查詢是相當(dāng)?shù)穆臑?/span> exists 后,性能提高 100 倍左右,視圖中的數(shù)量級(jí)為百萬(wàn) ) ?

    總結(jié)

      在性能測(cè)試中應(yīng)當(dāng)指出,由于客戶機(jī)、網(wǎng)絡(luò)、服務(wù)器這 3 個(gè)相互依存的組成部分都必須調(diào)整和同步才能產(chǎn)生最佳的性能,因此還應(yīng)根據(jù)系統(tǒng)的具體情況,具體分析和調(diào)整。本文涉及的 Oracle 調(diào)優(yōu)是數(shù)據(jù)庫(kù)調(diào)優(yōu)的一小部分,希望同事們不斷的補(bǔ)充我們的知識(shí)庫(kù)。

    ?

    ?

    ?

    ?

    posted on 2008-03-06 21:37 zYx.Tom 閱讀(1279) 評(píng)論(1)  編輯  收藏

    評(píng)論

    # re: 性能測(cè)試之?dāng)?shù)據(jù)庫(kù)調(diào)優(yōu)篇(轉(zhuǎn)-請(qǐng)作者與我聯(lián)系) 2008-03-07 02:28 huliqing

    你好,請(qǐng)問(wèn)一下,貴公司目前有招聘java相關(guān)程序員嗎? 幾天前給貴公司發(fā)過(guò)求職電子郵件, 呵呵! 如果有空的話,能否給予回復(fù)或者交個(gè)朋友.
    Email: huliqing@live.com
      回復(fù)  更多評(píng)論   


    只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 亚洲一区二区三区香蕉| 日韩在线不卡免费视频一区| 亚洲av成人中文无码专区| 亚洲av永久无码嘿嘿嘿 | 日韩免费无码一区二区三区| GOGOGO免费观看国语| 香蕉免费看一区二区三区| 国产精品视频全国免费观看| 精品久久久久久无码免费| 国产免费一级高清淫曰本片 | 亚洲码在线中文在线观看| 亚洲精品视频观看| 亚洲大尺码专区影院| 亚洲a级在线观看| 亚洲人成人网站18禁| 精品亚洲av无码一区二区柚蜜| 偷自拍亚洲视频在线观看99| 成人精品综合免费视频| gogo免费在线观看| 十八禁视频在线观看免费无码无遮挡骂过 | 亚洲av无码日韩av无码网站冲| 偷自拍亚洲视频在线观看99| 国产美女视频免费观看的网站| 3344在线看片免费| 91人成网站色www免费下载| 精品熟女少妇AV免费观看| 国产日产成人免费视频在线观看| 免费不卡中文字幕在线| 久久久久亚洲AV综合波多野结衣| 亚洲av无码国产精品夜色午夜| 亚洲视频一区二区三区| 亚洲精品久久久久无码AV片软件| 美女露100%胸无遮挡免费观看| 狠狠躁狠狠爱免费视频无码 | 亚洲AV无码专区亚洲AV桃| 老司机精品视频免费| 国产一区二区三区免费观看在线| 真人做A免费观看| 国产免费午夜a无码v视频| 亚洲色无码专区在线观看| 亚洲精品午夜久久久伊人|