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

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

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

    Java, Only Java!

    統計

    留言簿(20)

    積分與排名

    好友空間

    文檔技巧

    閱讀排行榜

    評論排行榜

    性能測試之數據庫調優篇(轉-請作者與我聯系)

    前言:

    通過緊張的網通、移動性能測試,雖然測試準備和討論的環節很多,應用服務器測試如果要體現應用服務器的性能,那么在測試環節中,其他環節不能成為瓶頸,否則應用服務器的性能將很難展現。但實際在我們的測試實踐中,無論準備情況,數據庫調優都是永恒的話題,數據庫的優劣直接影響整個測試的性能表現。本文結合了一些測試經驗和一些資料的整理,給出了個人的一些經驗,共大家分享,本文測重于 Unix 環境。

    一般問題的發現及解決:

    Oracle 數據庫服務器是整個系統的核心,它的性能高低直接影響整個系統的性能,為了調整 Oracle 數據庫服務器的性能,主要從以下幾個方面考慮:

    第一步:

    ??? 調整操作系統以適合 Oracle 數據庫服務器運行, Oracle 數據庫服務器很大程度上依賴于運行服務器的操作系統,如果操作系統不能提供最好性能,那么無論如何調整, Oracle 數據庫服務器也無法發揮其應有的性能。

    第二步:

    ? ?? Oracle 數據庫服務器規劃系統資源,據已有計算機可用資源 ,? 規劃分配給 Oracle 服務器資源原則是:盡可能使 Oracle 服務器使用資源最大化 , 特別在 Client/Server 中盡量讓服務器上所有資源都來運行 Oracle 服務。調整計算機系統中的內存配置,多數操作系統都用虛存來模擬計算機上更大的內存,它實際上是硬盤上的一定的磁盤空間。當實際的內存空間不能滿足應用軟件的要求時,操作系統就將用這部分的磁盤空間對內存中的信息進行頁面替換,這將引起大量的磁盤 I/O 操作,使整個服務器的性能下降。為了避免過多地使用虛存,應加大計算機的內存。

    第三步:

    ??? Oracle 數據庫服務器設置操作系統進程優先級,不要在操作系統中調整 Oracle 進程的優先級,因為在 Oracle 數據庫系統中,所有的后臺和前臺數據庫服務器進程執行的是同等重要的工作,需要同等的優先級。所以在安裝時,讓所有的數據庫服務器進程都使用缺省的優先級運行。

    第四步:

    ? ?? 調整內存分配, Oracle 數據庫服務器保留 3 個基本的內存高速緩存,分別對應 3 種不同類型的數據:庫高速緩存,字典高速緩存和緩沖區高速緩存。庫高速緩存和字典高速緩存一起構成共享池,共享池再加上緩沖區高速緩存便構成了系統全程區 (SGA) SGA 是對數據庫數據進行快速訪問的一個系統全程區,若 SGA 本身需要頻繁地進行釋放、分配,則不能達到快速訪問數據的目的,因此應把 SGA 放在主存中,不要放在虛擬內存中。內存的調整主要是指調整組成 SGA 的內存結構的大小來提高系統性能,由于 Oracle 數據庫服務器的內存結構需求與應用密切相關,所以內存結構的調整應在磁盤 I/O 調整之前進行。

    1 、庫緩沖區的調整

      庫緩沖區中包含私用和共享 SQL PL/SQL 區,通過比較庫緩沖區的命中率決定它的大小。要調整庫緩沖區,必須首先了解該庫緩沖區的活動情況,庫緩沖區的活動統計信息保留在動態性能表 v$librarycache 數據字典中,可通過查詢該表來了解其活動情況,以決定如何調整。

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

       Pins 列給出 SQL 語句, PL/SQL 塊及被訪問對象定義的總次數; Reloads 列給出 SQL PL/SQL 塊的隱式分析或對象定義重裝載時在庫程序緩沖區中發生的錯誤。如果 sum(pins)/sum(reloads) 0 ,則庫緩沖區的命中率合適;若 sum(pins)/sum(reloads)>1, 則需調整初始化參數 shared_pool_size 來重新調整分配給共享池的內存量。

    2 數據字典緩沖區的調整

      數據字典緩沖區包含了有關數據庫的結構、用戶、實體信息。數據字典的命中率,對系統性能影響極大。數據字典緩沖區的使用情況記錄在動態性能表 v$librarycache 中,可通過查詢該表來了解其活動情況,以決定如何調整。

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

       Gets 列是對相應項請求次數的統計; Getmisses 列是引起緩沖區出錯的數據的請求次數。對于頻繁訪問的數據字典緩沖區, sum(getmisses)/sum(gets)<10% 15% 。若大于此百分數,則應考慮增加數據字典緩沖區的容量,即需調整初始化參數 shared_pool_size 來重新調整分配給共享池的內存量。

    3 緩沖區高速緩存的調整

      用戶進程所存取的所有數據都是經過緩沖區高速緩存來存取,所以該部分的命中率,對性能至關重要。緩沖區高速緩存的使用情況記錄在動態性能表 v$sysstat 中,可通過查詢該表來了解其活動情況,以決定如何調整。

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

       dbblock gets consistent gets 的值是請求數據緩沖區中讀的總次數。 physical reads 的值是請求數據時引起從盤中讀文件的次數。從緩沖區高速緩存中讀的可能性的高低稱為緩沖區的命中率,計算公式:

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

      如果 Hit Ratio<60% 70% ,則應增大 db_block_buffers 的參數值。 db_block_buffers 可以調整分配給緩沖區高速緩存的內存量,即 db_block_buffers 可設置分配緩沖區高速緩存的數據塊的個數。緩沖區高速緩存的總字節數 =db_block_buffers 的值 *db_block_size 的值。 db_block_size 的值表示數據塊大小的字節數,可查詢 v$parameter 表:

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

      在修改了上述數據庫的初始化參數以后,必須先關閉數據庫,在重新啟動數據庫后才能使新的設置起作用。

    IO 問題的發現及解決:

    很多的時侯,當應用很慢、數據庫很慢的時侯,我們到數據庫時做幾個示例的 Select 也發現同樣的問題時,有些時侯我們會無從下手,因為我們認為數據庫的各種命種率都是滿足 Oracle 文檔的建議。實際上如今的優化己經向優化等待 (waits) 轉型了,實際中性能優化最根本的出現點也都集中在 IO ,這是影響性能最主要的方面,由系統中的等待去發現 Oracle 庫中的不足、操作系統某些資源利用的不合理是一個比較好的辦法。在移動的測試中, Sun 的工程師也推薦這樣的做法。

    ?

    第一步:

    通過操作系統的一些工具檢查系統的狀態,比如 CPU 、內存、交換、磁盤的利用率,根據經驗或與系統正常時的狀態相比對,有時系統表面上看起來看空閑這也可能不是一個正常的狀態,因為 cpu 可能正等待 IO 的完成。除此之外我們還應觀注那些占用系統資源 (cpu 、內存 ) 的進程。

    ?

    1 、如何檢查操作系統是否存在 IO 的問題?使用的工具有 sar, 這是一個比較通用的工具。

    Rp1#sar -u 2 10

    即每隔 2 秒檢察一次,共執行 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 指的是用戶進程使用的 cpu 資源的百分比, %sys 指的是系統資源使用 cpu 資源的百分比, %wio 指的是等待 io 完成的百分比,這是值得我們觀注的一項, %idle 即空閑的百分比。如果 wio 列的值很大,如在 35% 以上,說明你的系統的 IO 存在瓶頸,你的 CPU 花費了很大的時間去等待 IO 的完成。 Idle 很小說明系統 CPU 很忙。

    當你的系統存在 IO 的問題,可以從以下幾個方面解決

    1 、查找 Oracle 中不合理的 sql 語句,對其進行優化。

    2 、對 Oracle 中訪問量頻繁的表除合理建索引外,再就是把這些表分表空間存放以免訪問上產生熱點,再有就是對表合理分區。

    ?

    第二步:

    關注一下內存,常用的工具便是 vmstat ,對于 hp-unix 來說可以用 glance,Aix 來說可以用 topas, 當你發現 vmstat pi 列非零, memory 中的 free 列的值很小, glance,topas 中內存的利用率多于 80% 時,這時說明你的內存方面應該調節一下了,方法大體有以下幾項。

    ?

    1 、劃給 Oracle 使用的內存不要超過系統內存的 1/2, 一般保在系統內存的 40% 為益。

    為系統增加內存

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

    3 、打全補丁,防止內存漏洞。

    ?

    第三步:

    如何找到點用系用資源特別大的 Oracle session 及其執行的語句。 Hp-unix 可以用 glance,top IBM AIX 可以用 topas ;此外可以使用 ps 的命令。通過這些程序我們可以找到占用系統資源特別大的這些進程的進程號,我們就可以通過以下的 sql 語句發現這個 pid 正在執行哪個 sql ,這個 sql 最好在 pl/sql developer,toad 等軟件中執行 , <> 中的 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

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

    另一個有用的腳本:查找前十條性能差的 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 ;

    ?

    注意:在做優化 sql 時,經常碰到使用 in 的語句,這時我們一定要用 exists 把它給換掉,因為 Oracle 在處理 In 時是按 Or 的方式做的,即使使用了索引也會很慢。 ( 這個很有用,我在煙草項目中,大量的 not in 操作對大數據量的查詢是相當的慢,改為 exists 后,性能提高 100 倍左右,視圖中的數量級為百萬 ) ?

    總結

      在性能測試中應當指出,由于客戶機、網絡、服務器這 3 個相互依存的組成部分都必須調整和同步才能產生最佳的性能,因此還應根據系統的具體情況,具體分析和調整。本文涉及的 Oracle 調優是數據庫調優的一小部分,希望同事們不斷的補充我們的知識庫。

    ?

    ?

    ?

    ?

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

    評論

    # re: 性能測試之數據庫調優篇(轉-請作者與我聯系) 2008-03-07 02:28 huliqing

    你好,請問一下,貴公司目前有招聘java相關程序員嗎? 幾天前給貴公司發過求職電子郵件, 呵呵! 如果有空的話,能否給予回復或者交個朋友.
    Email: huliqing@live.com
      回復  更多評論   


    只有注冊用戶登錄后才能發表評論。


    網站導航:
     
    主站蜘蛛池模板: 亚洲成av人片在线天堂无| 亚洲欧洲日本国产| 免费看又黄又爽又猛的视频软件| 成人在线免费观看| 亚洲综合一区二区三区四区五区| 无码国产精品久久一区免费| 亚洲一区二区三区国产精品无码| 99国产精品永久免费视频| 久久精品国产亚洲av麻豆蜜芽 | 亚洲一级免费毛片| 18gay台湾男同亚洲男同| 最新黄色免费网站| 日本亚洲色大成网站www久久| 免费的涩涩视频在线播放| 亚洲欧美日韩中文无线码| 国产一级理论免费版| 亚欧国产一级在线免费| 国产成人精品曰本亚洲79ren| 猫咪免费人成网站在线观看入口| 亚洲国产精品丝袜在线观看| 久久性生大片免费观看性| 久久久影院亚洲精品| 国产亚洲欧美日韩亚洲中文色| 国产大片线上免费看| 久久一区二区三区免费| 亚洲色成人网一二三区| 成人免费毛片观看| 国产VA免费精品高清在线| 亚洲AV乱码一区二区三区林ゆな| 性xxxxx免费视频播放| 亚洲国产人成在线观看69网站| 日本三级2019在线观看免费| 国产亚洲欧美日韩亚洲中文色| 亚洲区小说区图片区QVOD| 久久久久久久91精品免费观看| 男人扒开添女人下部免费视频| 亚洲ⅴ国产v天堂a无码二区| 日本人护士免费xxxx视频| 亚洲国产精品yw在线观看| 无码不卡亚洲成?人片| 午夜精品射精入后重之免费观看 |