數(shù)據(jù)庫(kù)性能優(yōu)化課件_第1頁(yè)
數(shù)據(jù)庫(kù)性能優(yōu)化課件_第2頁(yè)
數(shù)據(jù)庫(kù)性能優(yōu)化課件_第3頁(yè)
數(shù)據(jù)庫(kù)性能優(yōu)化課件_第4頁(yè)
數(shù)據(jù)庫(kù)性能優(yōu)化課件_第5頁(yè)
已閱讀5頁(yè),還剩81頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

性能問(wèn)題探討2009年9月性能問(wèn)題探討2009年9月架構(gòu)我們的系統(tǒng)部署方式雖然多種多樣的,但是從整個(gè)系統(tǒng)架構(gòu)來(lái)說(shuō),不外乎左邊圖所示的結(jié)構(gòu)。架構(gòu)我們的系統(tǒng)部署方式雖然多種多樣的,但是從整個(gè)系統(tǒng)大綱操作系統(tǒng)優(yōu)化網(wǎng)絡(luò)優(yōu)化數(shù)據(jù)庫(kù)優(yōu)化中間件優(yōu)化應(yīng)用優(yōu)化大綱操作系統(tǒng)優(yōu)化目前我公司應(yīng)用系統(tǒng)部署到的操作系統(tǒng)有:AIX、HP-UX、Solaris、Linux、Windows2003。操作系統(tǒng)引起問(wèn)題的地方主要有兩個(gè)方面:內(nèi)核問(wèn)題和資源問(wèn)題。操作系統(tǒng)優(yōu)化目前我公司應(yīng)用系統(tǒng)部署到的操作系統(tǒng)有:AIX操作系統(tǒng)優(yōu)化內(nèi)核問(wèn)題內(nèi)核問(wèn)題主要是內(nèi)核參數(shù)的設(shè)置方面。這個(gè)參數(shù)主要是分為兩部分:內(nèi)存相關(guān)的和網(wǎng)絡(luò)相關(guān)的。比如:我們?cè)诎惭bOracle時(shí)未按照官方說(shuō)明,修改內(nèi)存相關(guān)的內(nèi)核參數(shù),就會(huì)導(dǎo)致無(wú)法使用大的共享內(nèi)存塊。再比如,一些網(wǎng)絡(luò)參數(shù)會(huì)影響weblogic的吞吐量。案例:適當(dāng)調(diào)整udp_sendspace值網(wǎng)絡(luò)參數(shù)udp_sendspace是UDP的發(fā)送緩存,默認(rèn)值為8K,為減少I(mǎi)/O異常,需調(diào)整為32k。操作系統(tǒng)優(yōu)化內(nèi)核問(wèn)題案例:適當(dāng)調(diào)整udp_sendspace操作系統(tǒng)優(yōu)化案例:適錄調(diào)整nofiles值在東莞和南海都遇到了以下錯(cuò)誤:<BEA-002616><Failedtolistenonchannel"Default"on05:7001,failurecount:10,failingfor45seconds,.SocketException:Toomanyopenfiles>這個(gè)錯(cuò)誤主要就是因?yàn)閼?yīng)用系統(tǒng)打開(kāi)了太多的文件句柄。因?yàn)樵赨nix下,默認(rèn)一個(gè)用戶只能打開(kāi)2000個(gè)文件句柄。一旦出現(xiàn)這個(gè)錯(cuò)誤,weblogic將無(wú)法對(duì)外提供響應(yīng)。這個(gè)可以通過(guò)增加資源限制中的nofiles的值來(lái)解決。資源問(wèn)題

Unix和Linux對(duì)每一個(gè)用戶都有一個(gè)資源限制。這些限制可能包括能創(chuàng)建的文件大小、能同時(shí)打開(kāi)的文件數(shù)量、能同時(shí)啟動(dòng)的進(jìn)程數(shù)、能使用的最大內(nèi)存等。UNIX環(huán)境中可以使用ulimit查看。操作系統(tǒng)優(yōu)化案例:適錄調(diào)整nofiles值資源問(wèn)題大綱操作系統(tǒng)優(yōu)化網(wǎng)絡(luò)優(yōu)化數(shù)據(jù)庫(kù)優(yōu)化中間件優(yōu)化應(yīng)用優(yōu)化大綱網(wǎng)絡(luò)優(yōu)化網(wǎng)絡(luò)的問(wèn)題主要是兩個(gè)方面:響應(yīng)時(shí)間和吞吐量。網(wǎng)絡(luò)優(yōu)化網(wǎng)絡(luò)的問(wèn)題主要是兩個(gè)方面:響應(yīng)時(shí)間和吞吐量。網(wǎng)絡(luò)優(yōu)化響應(yīng)時(shí)間這里的響應(yīng)時(shí)間主要是查找和連接網(wǎng)絡(luò)的時(shí)間。響應(yīng)時(shí)間過(guò)長(zhǎng)的常見(jiàn)原因是DNS的解析造成的。案例:DNS解析造成服務(wù)啟動(dòng)慢海南EIP在項(xiàng)目實(shí)施中,遇到服務(wù)啟動(dòng)很慢的問(wèn)題,一個(gè)服務(wù)的啟動(dòng)時(shí)間需要20多分鐘。后來(lái)發(fā)現(xiàn)系統(tǒng)走了DNS解析,沒(méi)有走本地解析。修改為本地解析后,啟動(dòng)時(shí)間縮短為4分鐘左右。網(wǎng)絡(luò)優(yōu)化響應(yīng)時(shí)間案例:DNS解析造成服務(wù)啟動(dòng)慢網(wǎng)絡(luò)優(yōu)化吞吐量吞吐量主要是指網(wǎng)絡(luò)的傳輸速度。這里只討論網(wǎng)絡(luò)設(shè)備的設(shè)置問(wèn)題。案例:交換機(jī)傳輸模式影響網(wǎng)速由于惠州供電局交換機(jī)傳輸模式是“半雙工自適應(yīng)”,造成網(wǎng)速很慢,表現(xiàn)為我們的系統(tǒng)響應(yīng)很慢,后改成“全雙工”模式,系統(tǒng)響應(yīng)速度明顯提高,輸電部、計(jì)量部、變電部登錄系統(tǒng)時(shí)間,及不同設(shè)備界面切換時(shí)間響應(yīng)在2秒以內(nèi)。網(wǎng)絡(luò)優(yōu)化吞吐量案例:交換機(jī)傳輸模式影響網(wǎng)速大綱操作系統(tǒng)優(yōu)化網(wǎng)絡(luò)優(yōu)化數(shù)據(jù)庫(kù)優(yōu)化中間件優(yōu)化應(yīng)用優(yōu)化大綱數(shù)據(jù)庫(kù)優(yōu)化目前我公司系統(tǒng)使用的數(shù)據(jù)庫(kù)主要是Oracle。Oracle優(yōu)化主要從5個(gè)方面來(lái)考慮:軟件版本、內(nèi)存、CPU、IO、數(shù)據(jù)庫(kù)對(duì)象爭(zhēng)用和SQL。數(shù)據(jù)庫(kù)優(yōu)化目前我公司系統(tǒng)使用的數(shù)據(jù)庫(kù)主要是Oracle。數(shù)據(jù)庫(kù)優(yōu)化軟件版本軟件版本可以從兩個(gè)方面考慮,與操作系統(tǒng)響應(yīng)的版本、與版本相關(guān)的補(bǔ)丁。如果版本與操作系統(tǒng)不一致,即便能跑起來(lái),也會(huì)產(chǎn)生系統(tǒng)問(wèn)題。另外,有些版本本身有bug,這些bug可能會(huì)造成性能問(wèn)題,所以需要打上補(bǔ)丁。一般2.4以上的版本被視為穩(wěn)定版本。案例:64位機(jī)器上安裝32位oracle的性能問(wèn)題惠州供電局原來(lái)的數(shù)據(jù)庫(kù)服務(wù)器cpu是64位,但是為了圖方便,安裝了32位windows2003和32位的oracle10g,造成只能使用1.7g左右的內(nèi)存,對(duì)于8g內(nèi)存的機(jī)器來(lái)說(shuō),很浪費(fèi)。后來(lái)按照oracle給出的擴(kuò)大內(nèi)存的方法進(jìn)行調(diào)整,依然無(wú)效。原因就是該機(jī)器cpu是64位的。后來(lái)改裝64位windows2003和64位oracle10g,性能提高了幾倍。數(shù)據(jù)庫(kù)優(yōu)化軟件版本案例:64位機(jī)器上安裝32位oracle的數(shù)據(jù)庫(kù)優(yōu)化內(nèi)存優(yōu)化一般Oracle建議將操作系統(tǒng)物理內(nèi)存的70%分配給它。比如,物理內(nèi)存是8G,則分配給Oracle的內(nèi)存就是5.6G。Oracle的內(nèi)存主要分兩塊:SGA和PGA。按照70%的物理內(nèi)存來(lái)劃分,則是:SGA為60%,PGA為10%。案例:內(nèi)存設(shè)置太小造成性能問(wèn)題有人反映,他的系統(tǒng)很慢,感覺(jué)主要是數(shù)據(jù)庫(kù)慢。連上去看他的數(shù)據(jù)庫(kù),發(fā)現(xiàn)SGA只有300M,PGA只有幾十M。按照70%的比例進(jìn)行調(diào)整后,發(fā)現(xiàn)數(shù)據(jù)庫(kù)性能明顯提高,相應(yīng)的系統(tǒng)吞吐量也大幅提高。數(shù)據(jù)庫(kù)優(yōu)化內(nèi)存優(yōu)化案例:內(nèi)存設(shè)置太小造成性能問(wèn)題數(shù)據(jù)庫(kù)優(yōu)化CPU優(yōu)化這里把Oracle中的Processes歸為CPU方面,其實(shí)也不準(zhǔn)確。主要是考慮到它們和CPU的利用率有關(guān)。

Processes參數(shù)表明允許同時(shí)運(yùn)行的最大服務(wù)器進(jìn)程數(shù)。在獨(dú)占式連接模式下,一個(gè)

Session就啟動(dòng)一個(gè)Process,你也可以認(rèn)為建立一個(gè)JDBC連接就啟動(dòng)一個(gè)Process。案例:Processes設(shè)置太小造成性能問(wèn)題如果Weblogic中JDBC連接池需要建立的連接數(shù)大于Processes的值時(shí),則會(huì)出現(xiàn)連接失敗而等待。這時(shí)候增大Processes的值就會(huì)消除這種等待而提高性能。數(shù)據(jù)庫(kù)優(yōu)化CPU優(yōu)化案例:Processes設(shè)置太小造成性能數(shù)據(jù)庫(kù)優(yōu)化IO

IO主要是兩個(gè)方面:每個(gè)用戶使用自己?jiǎn)为?dú)的臨時(shí)表空間、盡量關(guān)閉數(shù)據(jù)表空間的自動(dòng)擴(kuò)展功能。案例:每個(gè)用戶使用自己?jiǎn)为?dú)的臨時(shí)表空間如果沒(méi)有給用戶設(shè)置單獨(dú)的臨時(shí)表空間,那么用戶就會(huì)使用系統(tǒng)臨時(shí)表空間,從而引起資源競(jìng)爭(zhēng)。上次東莞供電局邀請(qǐng)第三方做性能診斷時(shí),看到我們的用戶沒(méi)有建立單獨(dú)的臨時(shí)表空間。對(duì)于這種常識(shí)性的錯(cuò)誤,被別人揪出來(lái)會(huì)讓人懷疑我們的專(zhuān)業(yè)性的。案例:盡量關(guān)閉數(shù)據(jù)表空間的自動(dòng)擴(kuò)展功能在建表空間時(shí)就應(yīng)該估算到表空間的大小,至少是未來(lái)一段時(shí)間的空間大小。而不要使用自動(dòng)擴(kuò)展,因?yàn)樽詣?dòng)擴(kuò)展在實(shí)時(shí)系統(tǒng)上也是很影響性能的。數(shù)據(jù)庫(kù)優(yōu)化IO案例:每個(gè)用戶使用自己?jiǎn)为?dú)的臨時(shí)表空間數(shù)據(jù)庫(kù)優(yōu)化數(shù)據(jù)庫(kù)對(duì)象爭(zhēng)用數(shù)據(jù)庫(kù)對(duì)象的爭(zhēng)用,主要是指表、索引、序列等的爭(zhēng)用。爭(zhēng)用這個(gè)意思也很好理解,一個(gè)對(duì)象被引用的多了自然就存在爭(zhēng)用,爭(zhēng)用就會(huì)產(chǎn)生等待,等待就會(huì)影響性能。案例:表被關(guān)聯(lián)的外鍵太多如果表被關(guān)聯(lián)的外健太多,當(dāng)多個(gè)關(guān)聯(lián)表同時(shí)發(fā)生數(shù)據(jù)變更時(shí),就可能產(chǎn)生等待。所以在設(shè)計(jì)上,是不是非要堅(jiān)持范式設(shè)計(jì),也是需要我們自己取舍一下。案例:表上的索引太多如果表上的索引很多,那么在更新表的數(shù)據(jù)時(shí),這些索引都需要被更新。所以對(duì)于沒(méi)有使用過(guò)的索引可以刪除??梢酝ㄟ^(guò)dba_indexes視圖來(lái)查詢哪些索引沒(méi)有使用過(guò)。數(shù)據(jù)庫(kù)優(yōu)化數(shù)據(jù)庫(kù)對(duì)象爭(zhēng)用案例:表被關(guān)聯(lián)的外鍵太多數(shù)據(jù)庫(kù)優(yōu)化數(shù)據(jù)庫(kù)對(duì)象爭(zhēng)用

案例:實(shí)時(shí)表的數(shù)據(jù)太多原則上來(lái)說(shuō),實(shí)時(shí)表的數(shù)據(jù)應(yīng)該保持在一個(gè)比較小的規(guī)模。隨著數(shù)據(jù)的增長(zhǎng),應(yīng)該考慮歷史表和實(shí)時(shí)表并存。但是很多時(shí)候,我們?yōu)榱瞬樵兊姆奖?,所有?shù)據(jù)保存在一個(gè)表中。造成效率的低下。這種情況下,可以采取的措施有:

分表:根據(jù)時(shí)間(比如:年、月或日為單位),把歷史數(shù)據(jù)分成多個(gè)表;

分區(qū):根據(jù)時(shí)間或其他條件字段,對(duì)該表分區(qū);

綁定到內(nèi)存:將整個(gè)表綁定到內(nèi)存,對(duì)數(shù)據(jù)的檢索會(huì)有一定的提高,但是對(duì)于內(nèi)存要求太高。數(shù)據(jù)庫(kù)優(yōu)化數(shù)據(jù)庫(kù)對(duì)象爭(zhēng)用案例:實(shí)時(shí)表的數(shù)據(jù)太多數(shù)據(jù)庫(kù)優(yōu)化數(shù)據(jù)庫(kù)對(duì)象爭(zhēng)用

案例:合理地使用分區(qū)能極大提高查詢效率深圳供電局生產(chǎn)系統(tǒng)中的缺陷模塊,有一個(gè)視圖生產(chǎn)系統(tǒng)中的缺陷模塊,有一個(gè)視圖V_DEFECT_FLOWCONTROL,這個(gè)查詢主要是針對(duì)流程跟蹤表WFT_FLOWCONTROL進(jìn)行查詢的。測(cè)試時(shí),該表約有195萬(wàn)條記錄,缺陷的記錄約有17萬(wàn)條。在對(duì)流程跟蹤表WFT_FLOWCONTROL建立分區(qū)前,這個(gè)視圖的查詢時(shí)間為13.29秒;對(duì)流程跟蹤表的缺陷的數(shù)據(jù)建立分區(qū)后,查詢時(shí)間為02.43秒,查詢效率提高了約5.5倍。將缺陷的數(shù)據(jù)導(dǎo)入另外一個(gè)表,對(duì)該表建立相同的視圖進(jìn)行查詢,時(shí)間為02.26秒。對(duì)比可知,建立合適的分區(qū)與分表的效率是比較接近的。數(shù)據(jù)庫(kù)優(yōu)化數(shù)據(jù)庫(kù)對(duì)象爭(zhēng)用案例:合理地使用分區(qū)能極大提高查詢效數(shù)據(jù)庫(kù)優(yōu)化數(shù)據(jù)庫(kù)對(duì)象爭(zhēng)用

案例:避免字段太多的大表字段太多的表和JAVA中的大類(lèi)相似,閱讀困難,更主要的是會(huì)影響性能。每次Insert、Update操作針對(duì)部分字段,而我們要操作全部字段。案例:避免Blob、Clob字段與其他類(lèi)型的字段放在一張表中對(duì)于EJB的實(shí)體bean來(lái)說(shuō),每次讀寫(xiě)都要操作這些大字段,很影響性能,并且操作時(shí),加鎖時(shí)間也長(zhǎng),影響其他用戶操作。案例:定長(zhǎng)字符串應(yīng)該使用char類(lèi)型字段定長(zhǎng)的char類(lèi)型字段比可變的varchar2有更好的性能數(shù)據(jù)庫(kù)優(yōu)化數(shù)據(jù)庫(kù)對(duì)象爭(zhēng)用案例:避免字段太多的大表數(shù)據(jù)庫(kù)優(yōu)化SQL

SQL語(yǔ)句對(duì)性能的影響是顯而易見(jiàn)的。案例:使用綁定變量綁定變量可以減少我們相同SQL語(yǔ)句的解析時(shí)間,從而提高執(zhí)行效率。但是通過(guò)東莞的那次性能診斷,還是看到系統(tǒng)中有不少地方?jīng)]有使用綁定變量。案例:合理的使用索引索引對(duì)于在大表中檢索少量數(shù)據(jù),其效率是非常高的。但是很多時(shí)候我們對(duì)索引的使用不正確而造成效率低下。主要有以下幾個(gè)方面:沒(méi)有建立索引:數(shù)據(jù)量小的時(shí)候無(wú)所謂,大了就看到效率低下了;索引使用不上:建了和查詢條件不匹配的索引,根本用不上。要知道,數(shù)據(jù)庫(kù)不是有索引就一定會(huì)用,而且對(duì)于一張表來(lái)說(shuō),一次查詢只能使用一個(gè)索引;索引統(tǒng)計(jì)信息沒(méi)有更新:還有些情況下,由于索引的統(tǒng)計(jì)信息沒(méi)有更新,導(dǎo)致數(shù)據(jù)庫(kù)選擇不使用索引。這時(shí)候就需要更新索引狀態(tài)。Oracle10g以后默認(rèn)自動(dòng)更新。數(shù)據(jù)庫(kù)優(yōu)化SQL案例:使用綁定變量數(shù)據(jù)庫(kù)優(yōu)化SQL

SQL語(yǔ)句對(duì)性能的影響是顯而易見(jiàn)的。案例:正確的使用臨時(shí)表正確的使用臨時(shí)表也會(huì)大幅提高系統(tǒng)的性能。因?yàn)榕R時(shí)表是和會(huì)話綁定的,一個(gè)會(huì)話一個(gè)臨時(shí)表,所以它不存在鎖的問(wèn)題,而且臨時(shí)表的數(shù)據(jù)都是在內(nèi)存中。有時(shí)候當(dāng)查詢很復(fù)雜的時(shí)候,我們可以把查詢分解,把一下中間過(guò)程數(shù)據(jù)放到臨時(shí)表中,然后對(duì)臨時(shí)表查詢,這樣會(huì)大大提高性能。案例:合理的使用hint

Hint主要用來(lái)告訴數(shù)據(jù)庫(kù)按照我們?cè)O(shè)定的執(zhí)行計(jì)劃來(lái)抽取數(shù)據(jù)。比如,盡管索引的統(tǒng)計(jì)信息沒(méi)有更新,我們也可以通過(guò)Hint來(lái)使用索引。但是如果數(shù)據(jù)量變少了,可能使用索引的效率還不如全表掃描,但是你使用了Hint,它還是會(huì)走索引。所以說(shuō),Hint是一把雙刃劍,需要謹(jǐn)慎使用。案例:合理的使用視圖的索引視圖使用索引,實(shí)際上是使用視圖中原始表的索引。但是如果在視圖定義中對(duì)原始表的索引字段定義了別名,則不會(huì)用到原始表的索引。這一點(diǎn)要注意。數(shù)據(jù)庫(kù)優(yōu)化SQL案例:正確的使用臨時(shí)表大綱操作系統(tǒng)優(yōu)化網(wǎng)絡(luò)優(yōu)化數(shù)據(jù)庫(kù)優(yōu)化中間件優(yōu)化應(yīng)用優(yōu)化大綱中間件優(yōu)化目前我司系統(tǒng)使用的中間件主要是Weblogic。中間件優(yōu)化包括內(nèi)存設(shè)置和參數(shù)調(diào)整。中間件優(yōu)化目前我司系統(tǒng)使用的中間件主要是Weblogic中間件優(yōu)化Weblogic建域模式

Weblogic的建域模式分為開(kāi)發(fā)模式和產(chǎn)品模式,兩者有些參數(shù)的設(shè)置是不同的。案例:Weblogic產(chǎn)品模式提升性能我在進(jìn)行南海EIP測(cè)試時(shí),使用產(chǎn)品模式的性能要比開(kāi)發(fā)模式的性能高。中間件優(yōu)化Weblogic建域模式案例:Weblogic產(chǎn)品中間件優(yōu)化Weblogic集群如果應(yīng)用因?yàn)樨?fù)載過(guò)重而導(dǎo)致性能問(wèn)題,應(yīng)該考慮集群Weblogic日志級(jí)別設(shè)置要適當(dāng)生成日志會(huì)影響性能,盡可能少的生成日志有助于提升性能。中間件優(yōu)化Weblogic集群Weblogic日志級(jí)別設(shè)置要中間件優(yōu)化Weblogic內(nèi)存設(shè)置

Weblogic的內(nèi)存調(diào)整就是調(diào)整Java虛擬機(jī)的內(nèi)存。32位系統(tǒng)上JVM的可配置的最大內(nèi)存在1.5G左右。64位則不受此限制。通常情況在設(shè)置普通堆的大小時(shí),為了避免擴(kuò)展帶來(lái)的性能問(wèn)題,建議普通堆的最小值和最大值相同。但是一個(gè)非常重要的例外是IBM的JVM則要求兩個(gè)不能相同,否則會(huì)出現(xiàn)垃圾回收方面的性能問(wèn)題。案例:設(shè)置IBM的JVM普通堆的最小值和最大值不同海南局的EIP是基于IBM的JVM,開(kāi)始的時(shí)候基于以前的習(xí)慣將普通堆的最小值和最大值設(shè)置相同(-Xms4096m–Xmx4096m),后來(lái)根據(jù)網(wǎng)上同行的意見(jiàn)設(shè)置為(-Xms1024m–Xmx4096m)。中間件優(yōu)化Weblogic內(nèi)存設(shè)置案例:設(shè)置IBM的JVM普中間件優(yōu)化Weblogic參數(shù)調(diào)整案例:合理調(diào)整ExecuteQueueandThreadsCount值執(zhí)行隊(duì)列可以理解為一個(gè)排隊(duì)的任務(wù)群。每當(dāng)客戶端發(fā)出一個(gè)任務(wù)請(qǐng)求,就會(huì)被放到執(zhí)行隊(duì)列中。執(zhí)行隊(duì)列的線程數(shù)的意思是同時(shí)啟動(dòng)多少個(gè)線程來(lái)執(zhí)行隊(duì)列中的任務(wù)。如果隊(duì)列中的任務(wù)數(shù)大于線程數(shù),那就表明有的任務(wù)需要等待。所以線程數(shù)的最大值應(yīng)該和系統(tǒng)的最大并發(fā)數(shù)一致,相應(yīng)的,最小值應(yīng)該和系統(tǒng)的最小并發(fā)量一致。如果是WebLogic9以上版本,線程數(shù)由系統(tǒng)自己分配,無(wú)需配置。中間件優(yōu)化Weblogic參數(shù)調(diào)整案例:合理調(diào)整Execut中間件優(yōu)化Weblogic參數(shù)調(diào)整案例:合理調(diào)整AcceptBacklog值

AcceptBacklog參數(shù)表明Weblogic向操作系統(tǒng)請(qǐng)求的隊(duì)列大小??蛻舳诉B接weblogic服務(wù)器時(shí),在服務(wù)器上就監(jiān)聽(tīng)到一個(gè)客戶端的連接請(qǐng)求。但是管理客戶端連接請(qǐng)求的任務(wù)是由操作系統(tǒng)來(lái)完成的,而非Weblogic。操作系統(tǒng)把這些連接請(qǐng)求存儲(chǔ)在一個(gè)先進(jìn)先出的隊(duì)列中。當(dāng)隊(duì)列中的連接請(qǐng)求達(dá)到了隊(duì)列的最大數(shù)時(shí),Weblogic服務(wù)器所在的主機(jī)操作系統(tǒng)會(huì)拒絕新的連接請(qǐng)求。只有當(dāng)隊(duì)列中的連接請(qǐng)求和Weblogic成功建立連接后,才會(huì)使隊(duì)列騰出空位,這時(shí)隊(duì)列才能繼續(xù)加入新的連接請(qǐng)求。所以,當(dāng)客戶端收到類(lèi)似connectionrefused的信息,就表明隊(duì)列已經(jīng)滿了,這時(shí)候可以調(diào)大AcceptBacklog的值。目前在部署的過(guò)程中,一般都設(shè)置為100。中間件優(yōu)化Weblogic參數(shù)調(diào)整案例:合理調(diào)整Accept中間件優(yōu)化Weblogic參數(shù)調(diào)整案例:合理的調(diào)整JDBC連接數(shù)這里主要是指JDBC連接池中的連接數(shù)。當(dāng)操作數(shù)據(jù)庫(kù)的事務(wù)并發(fā)量很大時(shí),需要調(diào)大JDBC連接數(shù)的最大值,否則會(huì)報(bào)得不到JDBC連接的問(wèn)題。一般最大值的設(shè)置不應(yīng)該超過(guò)執(zhí)行隊(duì)列中線程最大值的設(shè)置,更不要超過(guò)數(shù)據(jù)庫(kù)中的Processes值。中間件優(yōu)化Weblogic參數(shù)調(diào)整案例:合理的調(diào)整JDBC連中間件優(yōu)化Weblogic參數(shù)調(diào)整案例:合理的調(diào)整JTA的事務(wù)超時(shí)時(shí)間

JTA就是Java事務(wù)管理接口,主要用來(lái)管理EJB的事務(wù)。我們通常關(guān)注的就是事務(wù)的超時(shí)時(shí)間。因?yàn)橛行┦聞?wù)比較大,如果超時(shí)時(shí)間設(shè)置過(guò)短,會(huì)造成事務(wù)處理失敗并回滾。中間件優(yōu)化Weblogic參數(shù)調(diào)整案例:合理的調(diào)整JTA的事中間件優(yōu)化Weblogic參數(shù)調(diào)整案例:使用NativeIO服務(wù)器啟動(dòng),接受到連接請(qǐng)求并建立好連接以后,監(jiān)聽(tīng)線程將處理權(quán)交給Socket復(fù)用器,放置到執(zhí)行隊(duì)列中。當(dāng)有一個(gè)請(qǐng)求進(jìn)入執(zhí)行隊(duì)列,就會(huì)有一個(gè)空閑的執(zhí)行線程從該隊(duì)列里面取走并向調(diào)用者返回結(jié)果。Weblogic帶有兩個(gè)版本的Socket復(fù)用器,純Java版和本地接口版(JNI)。訪問(wèn)量?。篔ava版性能要好一些。JNI的API調(diào)用會(huì)損失一部分性能。訪問(wèn)量大:JNI版的性能比較好,所以盡量保證Weblogic使用本地接口版的Socket復(fù)用器。中間件優(yōu)化Weblogic參數(shù)調(diào)整案例:使用NativeI大綱操作系統(tǒng)優(yōu)化網(wǎng)絡(luò)優(yōu)化數(shù)據(jù)庫(kù)優(yōu)化中間件優(yōu)化應(yīng)用優(yōu)化大綱應(yīng)用優(yōu)化EJB、大數(shù)據(jù)量讀、DAO中的SQL語(yǔ)句、常用數(shù)據(jù)的緩存、特定結(jié)構(gòu)、Java代碼編寫(xiě)、JSP編寫(xiě)應(yīng)用優(yōu)化EJB、大數(shù)據(jù)量讀、DAO中的SQL語(yǔ)句、常用數(shù)據(jù)的應(yīng)用優(yōu)化EJB優(yōu)化案例:使用容器管理的持久性CMP使用CMP不僅可以減少代碼的編寫(xiě)量,而且可以允許容器進(jìn)行很多優(yōu)化,包括數(shù)據(jù)庫(kù)訪問(wèn)代碼的優(yōu)化。案例:遵循粗粒度設(shè)計(jì)原則

由于調(diào)用EJB的方法都屬于遠(yuǎn)程調(diào)用,對(duì)于大多數(shù)細(xì)粒度的對(duì)象來(lái)說(shuō)調(diào)用中間件的開(kāi)銷(xiāo)大得簡(jiǎn)直讓人無(wú)法承受。案例:減少JNDI的查找次數(shù)由于各種應(yīng)用服務(wù)器的命名和目錄服務(wù)在具體實(shí)現(xiàn)方法上的差異,JNDI的查找過(guò)程比較費(fèi)時(shí)。JNDI對(duì)EJB資源,如:數(shù)據(jù)源、bean引用,乃至環(huán)境項(xiàng)的查找可能花費(fèi)巨大,且避免重復(fù)查找并非易事。在這種情況下可以利用緩存home的方法來(lái)提升性能。應(yīng)用優(yōu)化EJB優(yōu)化案例:使用容器管理的持久性CMP應(yīng)用優(yōu)化DAO中的SQL語(yǔ)句案例:三層嵌套的分頁(yè)查詢SQL語(yǔ)句更高效每次只需要一頁(yè)數(shù)據(jù),所以從數(shù)據(jù)庫(kù)中也只需要查詢一頁(yè)的數(shù)據(jù),特別是對(duì)于大數(shù)據(jù)量的表。原來(lái)把所有數(shù)據(jù)全取得后,再顯示一頁(yè)數(shù)據(jù)的性能較低。應(yīng)用優(yōu)化DAO中的SQL語(yǔ)句案例:三層嵌套的分頁(yè)查詢SQL語(yǔ)應(yīng)用優(yōu)化DAO與EJB案例:對(duì)只讀數(shù)據(jù)采用DAO直接讀取通過(guò)DAO直接訪問(wèn)那些更新不是很頻繁的數(shù)據(jù),從而避免了使用EJB所帶來(lái)的負(fù)擔(dān),加快數(shù)據(jù)的訪問(wèn)。特別是取多條記錄時(shí),使用DAO讀取更快并且消耗資源少。應(yīng)用優(yōu)化DAO與EJB案例:對(duì)只讀數(shù)據(jù)采用DAO直接讀取應(yīng)用優(yōu)化緩存案例:加入緩存機(jī)制,可極大的減少字典表和常用表的訪問(wèn)次數(shù)字典表、查詢字段對(duì)應(yīng)表、用戶表、部門(mén)表、角色表都是訪問(wèn)頻率很高的表。加入緩存,減少訪問(wèn)次數(shù)。

應(yīng)用優(yōu)化緩存案例:加入緩存機(jī)制,可極大的減少字典表和常用表的應(yīng)用優(yōu)化特定操作的結(jié)構(gòu)優(yōu)化案例:審批操作時(shí)要關(guān)聯(lián)對(duì)象授權(quán)和工作流表三張或更多張表的關(guān)聯(lián),性能下除的很快。對(duì)于特定操作的結(jié)構(gòu)優(yōu)化,可加速局部的響應(yīng)速度。工作流表:可分成將要處理數(shù)據(jù)和歷史數(shù)據(jù);對(duì)象授權(quán)表:可改進(jìn)授權(quán)表的權(quán)限字段結(jié)構(gòu),使關(guān)聯(lián)速度更快。應(yīng)用優(yōu)化特定操作的結(jié)構(gòu)優(yōu)化案例:審批操作時(shí)要關(guān)聯(lián)對(duì)象授權(quán)和工應(yīng)用優(yōu)化JAVA編碼使用緊湊字節(jié)碼的解釋性語(yǔ)言。速度通常是Java應(yīng)用的最大問(wèn)題,編碼技術(shù)影響了Java應(yīng)用的性能。避免創(chuàng)建不必要的對(duì)象大量對(duì)象的創(chuàng)建仍然會(huì)占用系統(tǒng)的資源。避免應(yīng)用同步系統(tǒng)要實(shí)現(xiàn)同步就必須序列化所有當(dāng)前正在執(zhí)行的線程,這將會(huì)降低系統(tǒng)的可伸縮性,并且設(shè)置同步也需要耗費(fèi)JVM的大量的資源。因此應(yīng)該盡量避免應(yīng)用同步,僅僅在必須用到它們的時(shí)候才應(yīng)用。一些容器類(lèi)使用時(shí)要注意初始化空間大小如:StringBuffer、ArrayList、HashMap。合理的初始化空間,避免擴(kuò)展空間時(shí)的性能消耗。應(yīng)用優(yōu)化JAVA編碼避免創(chuàng)建不必要的對(duì)象應(yīng)用優(yōu)化JAVA編碼使用靜態(tài)檢查插件檢查性能問(wèn)題靜態(tài)檢查插件可以檢查出一些性能不好的語(yǔ)句。如:tptp-analysis、PMD、findbugs、checkStyle。這些插件還能檢查出一些邏輯錯(cuò)誤和不好的格式問(wèn)題。改進(jìn)局部消耗時(shí)間長(zhǎng)的代碼算法可以根據(jù)性能測(cè)試結(jié)果,找出消耗時(shí)間長(zhǎng)的代碼片段,集中優(yōu)勢(shì)力量對(duì)其改進(jìn)。改變局部高耗模塊的功能對(duì)于很大數(shù)據(jù)量的列表頁(yè)面,可以去除一些小功能,如:題頭排序功能等。應(yīng)用優(yōu)化JAVA編碼使用靜態(tài)檢查插件檢查性能問(wèn)題應(yīng)用優(yōu)化JSP優(yōu)化案例:選擇合適的include最好將頁(yè)眉、頁(yè)腳和導(dǎo)航條內(nèi)容存儲(chǔ)在單個(gè)文件中,并且不要重新動(dòng)態(tài)產(chǎn)生它們。合理使用自定義標(biāo)簽庫(kù)

jsp自定義的標(biāo)簽庫(kù)可以封裝大量的、復(fù)雜的操作,有效地實(shí)現(xiàn)Java程序員和Web設(shè)計(jì)人員工作的劃分。然而,在頁(yè)面上應(yīng)用的每一個(gè)標(biāo)簽,Web容器都必須創(chuàng)建一個(gè)新的標(biāo)簽句柄對(duì)象或從標(biāo)簽緩沖中提取它。因此,過(guò)多的使用標(biāo)簽將會(huì)帶來(lái)不必要的浪費(fèi)。應(yīng)用優(yōu)化JSP優(yōu)化案例:選擇合適的include結(jié)束結(jié)束性能問(wèn)題探討2009年9月性能問(wèn)題探討2009年9月架構(gòu)我們的系統(tǒng)部署方式雖然多種多樣的,但是從整個(gè)系統(tǒng)架構(gòu)來(lái)說(shuō),不外乎左邊圖所示的結(jié)構(gòu)。架構(gòu)我們的系統(tǒng)部署方式雖然多種多樣的,但是從整個(gè)系統(tǒng)大綱操作系統(tǒng)優(yōu)化網(wǎng)絡(luò)優(yōu)化數(shù)據(jù)庫(kù)優(yōu)化中間件優(yōu)化應(yīng)用優(yōu)化大綱操作系統(tǒng)優(yōu)化目前我公司應(yīng)用系統(tǒng)部署到的操作系統(tǒng)有:AIX、HP-UX、Solaris、Linux、Windows2003。操作系統(tǒng)引起問(wèn)題的地方主要有兩個(gè)方面:內(nèi)核問(wèn)題和資源問(wèn)題。操作系統(tǒng)優(yōu)化目前我公司應(yīng)用系統(tǒng)部署到的操作系統(tǒng)有:AIX操作系統(tǒng)優(yōu)化內(nèi)核問(wèn)題內(nèi)核問(wèn)題主要是內(nèi)核參數(shù)的設(shè)置方面。這個(gè)參數(shù)主要是分為兩部分:內(nèi)存相關(guān)的和網(wǎng)絡(luò)相關(guān)的。比如:我們?cè)诎惭bOracle時(shí)未按照官方說(shuō)明,修改內(nèi)存相關(guān)的內(nèi)核參數(shù),就會(huì)導(dǎo)致無(wú)法使用大的共享內(nèi)存塊。再比如,一些網(wǎng)絡(luò)參數(shù)會(huì)影響weblogic的吞吐量。案例:適當(dāng)調(diào)整udp_sendspace值網(wǎng)絡(luò)參數(shù)udp_sendspace是UDP的發(fā)送緩存,默認(rèn)值為8K,為減少I(mǎi)/O異常,需調(diào)整為32k。操作系統(tǒng)優(yōu)化內(nèi)核問(wèn)題案例:適當(dāng)調(diào)整udp_sendspace操作系統(tǒng)優(yōu)化案例:適錄調(diào)整nofiles值在東莞和南海都遇到了以下錯(cuò)誤:<BEA-002616><Failedtolistenonchannel"Default"on05:7001,failurecount:10,failingfor45seconds,.SocketException:Toomanyopenfiles>這個(gè)錯(cuò)誤主要就是因?yàn)閼?yīng)用系統(tǒng)打開(kāi)了太多的文件句柄。因?yàn)樵赨nix下,默認(rèn)一個(gè)用戶只能打開(kāi)2000個(gè)文件句柄。一旦出現(xiàn)這個(gè)錯(cuò)誤,weblogic將無(wú)法對(duì)外提供響應(yīng)。這個(gè)可以通過(guò)增加資源限制中的nofiles的值來(lái)解決。資源問(wèn)題

Unix和Linux對(duì)每一個(gè)用戶都有一個(gè)資源限制。這些限制可能包括能創(chuàng)建的文件大小、能同時(shí)打開(kāi)的文件數(shù)量、能同時(shí)啟動(dòng)的進(jìn)程數(shù)、能使用的最大內(nèi)存等。UNIX環(huán)境中可以使用ulimit查看。操作系統(tǒng)優(yōu)化案例:適錄調(diào)整nofiles值資源問(wèn)題大綱操作系統(tǒng)優(yōu)化網(wǎng)絡(luò)優(yōu)化數(shù)據(jù)庫(kù)優(yōu)化中間件優(yōu)化應(yīng)用優(yōu)化大綱網(wǎng)絡(luò)優(yōu)化網(wǎng)絡(luò)的問(wèn)題主要是兩個(gè)方面:響應(yīng)時(shí)間和吞吐量。網(wǎng)絡(luò)優(yōu)化網(wǎng)絡(luò)的問(wèn)題主要是兩個(gè)方面:響應(yīng)時(shí)間和吞吐量。網(wǎng)絡(luò)優(yōu)化響應(yīng)時(shí)間這里的響應(yīng)時(shí)間主要是查找和連接網(wǎng)絡(luò)的時(shí)間。響應(yīng)時(shí)間過(guò)長(zhǎng)的常見(jiàn)原因是DNS的解析造成的。案例:DNS解析造成服務(wù)啟動(dòng)慢海南EIP在項(xiàng)目實(shí)施中,遇到服務(wù)啟動(dòng)很慢的問(wèn)題,一個(gè)服務(wù)的啟動(dòng)時(shí)間需要20多分鐘。后來(lái)發(fā)現(xiàn)系統(tǒng)走了DNS解析,沒(méi)有走本地解析。修改為本地解析后,啟動(dòng)時(shí)間縮短為4分鐘左右。網(wǎng)絡(luò)優(yōu)化響應(yīng)時(shí)間案例:DNS解析造成服務(wù)啟動(dòng)慢網(wǎng)絡(luò)優(yōu)化吞吐量吞吐量主要是指網(wǎng)絡(luò)的傳輸速度。這里只討論網(wǎng)絡(luò)設(shè)備的設(shè)置問(wèn)題。案例:交換機(jī)傳輸模式影響網(wǎng)速由于惠州供電局交換機(jī)傳輸模式是“半雙工自適應(yīng)”,造成網(wǎng)速很慢,表現(xiàn)為我們的系統(tǒng)響應(yīng)很慢,后改成“全雙工”模式,系統(tǒng)響應(yīng)速度明顯提高,輸電部、計(jì)量部、變電部登錄系統(tǒng)時(shí)間,及不同設(shè)備界面切換時(shí)間響應(yīng)在2秒以內(nèi)。網(wǎng)絡(luò)優(yōu)化吞吐量案例:交換機(jī)傳輸模式影響網(wǎng)速大綱操作系統(tǒng)優(yōu)化網(wǎng)絡(luò)優(yōu)化數(shù)據(jù)庫(kù)優(yōu)化中間件優(yōu)化應(yīng)用優(yōu)化大綱數(shù)據(jù)庫(kù)優(yōu)化目前我公司系統(tǒng)使用的數(shù)據(jù)庫(kù)主要是Oracle。Oracle優(yōu)化主要從5個(gè)方面來(lái)考慮:軟件版本、內(nèi)存、CPU、IO、數(shù)據(jù)庫(kù)對(duì)象爭(zhēng)用和SQL。數(shù)據(jù)庫(kù)優(yōu)化目前我公司系統(tǒng)使用的數(shù)據(jù)庫(kù)主要是Oracle。數(shù)據(jù)庫(kù)優(yōu)化軟件版本軟件版本可以從兩個(gè)方面考慮,與操作系統(tǒng)響應(yīng)的版本、與版本相關(guān)的補(bǔ)丁。如果版本與操作系統(tǒng)不一致,即便能跑起來(lái),也會(huì)產(chǎn)生系統(tǒng)問(wèn)題。另外,有些版本本身有bug,這些bug可能會(huì)造成性能問(wèn)題,所以需要打上補(bǔ)丁。一般2.4以上的版本被視為穩(wěn)定版本。案例:64位機(jī)器上安裝32位oracle的性能問(wèn)題惠州供電局原來(lái)的數(shù)據(jù)庫(kù)服務(wù)器cpu是64位,但是為了圖方便,安裝了32位windows2003和32位的oracle10g,造成只能使用1.7g左右的內(nèi)存,對(duì)于8g內(nèi)存的機(jī)器來(lái)說(shuō),很浪費(fèi)。后來(lái)按照oracle給出的擴(kuò)大內(nèi)存的方法進(jìn)行調(diào)整,依然無(wú)效。原因就是該機(jī)器cpu是64位的。后來(lái)改裝64位windows2003和64位oracle10g,性能提高了幾倍。數(shù)據(jù)庫(kù)優(yōu)化軟件版本案例:64位機(jī)器上安裝32位oracle的數(shù)據(jù)庫(kù)優(yōu)化內(nèi)存優(yōu)化一般Oracle建議將操作系統(tǒng)物理內(nèi)存的70%分配給它。比如,物理內(nèi)存是8G,則分配給Oracle的內(nèi)存就是5.6G。Oracle的內(nèi)存主要分兩塊:SGA和PGA。按照70%的物理內(nèi)存來(lái)劃分,則是:SGA為60%,PGA為10%。案例:內(nèi)存設(shè)置太小造成性能問(wèn)題有人反映,他的系統(tǒng)很慢,感覺(jué)主要是數(shù)據(jù)庫(kù)慢。連上去看他的數(shù)據(jù)庫(kù),發(fā)現(xiàn)SGA只有300M,PGA只有幾十M。按照70%的比例進(jìn)行調(diào)整后,發(fā)現(xiàn)數(shù)據(jù)庫(kù)性能明顯提高,相應(yīng)的系統(tǒng)吞吐量也大幅提高。數(shù)據(jù)庫(kù)優(yōu)化內(nèi)存優(yōu)化案例:內(nèi)存設(shè)置太小造成性能問(wèn)題數(shù)據(jù)庫(kù)優(yōu)化CPU優(yōu)化這里把Oracle中的Processes歸為CPU方面,其實(shí)也不準(zhǔn)確。主要是考慮到它們和CPU的利用率有關(guān)。

Processes參數(shù)表明允許同時(shí)運(yùn)行的最大服務(wù)器進(jìn)程數(shù)。在獨(dú)占式連接模式下,一個(gè)

Session就啟動(dòng)一個(gè)Process,你也可以認(rèn)為建立一個(gè)JDBC連接就啟動(dòng)一個(gè)Process。案例:Processes設(shè)置太小造成性能問(wèn)題如果Weblogic中JDBC連接池需要建立的連接數(shù)大于Processes的值時(shí),則會(huì)出現(xiàn)連接失敗而等待。這時(shí)候增大Processes的值就會(huì)消除這種等待而提高性能。數(shù)據(jù)庫(kù)優(yōu)化CPU優(yōu)化案例:Processes設(shè)置太小造成性能數(shù)據(jù)庫(kù)優(yōu)化IO

IO主要是兩個(gè)方面:每個(gè)用戶使用自己?jiǎn)为?dú)的臨時(shí)表空間、盡量關(guān)閉數(shù)據(jù)表空間的自動(dòng)擴(kuò)展功能。案例:每個(gè)用戶使用自己?jiǎn)为?dú)的臨時(shí)表空間如果沒(méi)有給用戶設(shè)置單獨(dú)的臨時(shí)表空間,那么用戶就會(huì)使用系統(tǒng)臨時(shí)表空間,從而引起資源競(jìng)爭(zhēng)。上次東莞供電局邀請(qǐng)第三方做性能診斷時(shí),看到我們的用戶沒(méi)有建立單獨(dú)的臨時(shí)表空間。對(duì)于這種常識(shí)性的錯(cuò)誤,被別人揪出來(lái)會(huì)讓人懷疑我們的專(zhuān)業(yè)性的。案例:盡量關(guān)閉數(shù)據(jù)表空間的自動(dòng)擴(kuò)展功能在建表空間時(shí)就應(yīng)該估算到表空間的大小,至少是未來(lái)一段時(shí)間的空間大小。而不要使用自動(dòng)擴(kuò)展,因?yàn)樽詣?dòng)擴(kuò)展在實(shí)時(shí)系統(tǒng)上也是很影響性能的。數(shù)據(jù)庫(kù)優(yōu)化IO案例:每個(gè)用戶使用自己?jiǎn)为?dú)的臨時(shí)表空間數(shù)據(jù)庫(kù)優(yōu)化數(shù)據(jù)庫(kù)對(duì)象爭(zhēng)用數(shù)據(jù)庫(kù)對(duì)象的爭(zhēng)用,主要是指表、索引、序列等的爭(zhēng)用。爭(zhēng)用這個(gè)意思也很好理解,一個(gè)對(duì)象被引用的多了自然就存在爭(zhēng)用,爭(zhēng)用就會(huì)產(chǎn)生等待,等待就會(huì)影響性能。案例:表被關(guān)聯(lián)的外鍵太多如果表被關(guān)聯(lián)的外健太多,當(dāng)多個(gè)關(guān)聯(lián)表同時(shí)發(fā)生數(shù)據(jù)變更時(shí),就可能產(chǎn)生等待。所以在設(shè)計(jì)上,是不是非要堅(jiān)持范式設(shè)計(jì),也是需要我們自己取舍一下。案例:表上的索引太多如果表上的索引很多,那么在更新表的數(shù)據(jù)時(shí),這些索引都需要被更新。所以對(duì)于沒(méi)有使用過(guò)的索引可以刪除。可以通過(guò)dba_indexes視圖來(lái)查詢哪些索引沒(méi)有使用過(guò)。數(shù)據(jù)庫(kù)優(yōu)化數(shù)據(jù)庫(kù)對(duì)象爭(zhēng)用案例:表被關(guān)聯(lián)的外鍵太多數(shù)據(jù)庫(kù)優(yōu)化數(shù)據(jù)庫(kù)對(duì)象爭(zhēng)用

案例:實(shí)時(shí)表的數(shù)據(jù)太多原則上來(lái)說(shuō),實(shí)時(shí)表的數(shù)據(jù)應(yīng)該保持在一個(gè)比較小的規(guī)模。隨著數(shù)據(jù)的增長(zhǎng),應(yīng)該考慮歷史表和實(shí)時(shí)表并存。但是很多時(shí)候,我們?yōu)榱瞬樵兊姆奖?,所有?shù)據(jù)保存在一個(gè)表中。造成效率的低下。這種情況下,可以采取的措施有:

分表:根據(jù)時(shí)間(比如:年、月或日為單位),把歷史數(shù)據(jù)分成多個(gè)表;

分區(qū):根據(jù)時(shí)間或其他條件字段,對(duì)該表分區(qū);

綁定到內(nèi)存:將整個(gè)表綁定到內(nèi)存,對(duì)數(shù)據(jù)的檢索會(huì)有一定的提高,但是對(duì)于內(nèi)存要求太高。數(shù)據(jù)庫(kù)優(yōu)化數(shù)據(jù)庫(kù)對(duì)象爭(zhēng)用案例:實(shí)時(shí)表的數(shù)據(jù)太多數(shù)據(jù)庫(kù)優(yōu)化數(shù)據(jù)庫(kù)對(duì)象爭(zhēng)用

案例:合理地使用分區(qū)能極大提高查詢效率深圳供電局生產(chǎn)系統(tǒng)中的缺陷模塊,有一個(gè)視圖生產(chǎn)系統(tǒng)中的缺陷模塊,有一個(gè)視圖V_DEFECT_FLOWCONTROL,這個(gè)查詢主要是針對(duì)流程跟蹤表WFT_FLOWCONTROL進(jìn)行查詢的。測(cè)試時(shí),該表約有195萬(wàn)條記錄,缺陷的記錄約有17萬(wàn)條。在對(duì)流程跟蹤表WFT_FLOWCONTROL建立分區(qū)前,這個(gè)視圖的查詢時(shí)間為13.29秒;對(duì)流程跟蹤表的缺陷的數(shù)據(jù)建立分區(qū)后,查詢時(shí)間為02.43秒,查詢效率提高了約5.5倍。將缺陷的數(shù)據(jù)導(dǎo)入另外一個(gè)表,對(duì)該表建立相同的視圖進(jìn)行查詢,時(shí)間為02.26秒。對(duì)比可知,建立合適的分區(qū)與分表的效率是比較接近的。數(shù)據(jù)庫(kù)優(yōu)化數(shù)據(jù)庫(kù)對(duì)象爭(zhēng)用案例:合理地使用分區(qū)能極大提高查詢效數(shù)據(jù)庫(kù)優(yōu)化數(shù)據(jù)庫(kù)對(duì)象爭(zhēng)用

案例:避免字段太多的大表字段太多的表和JAVA中的大類(lèi)相似,閱讀困難,更主要的是會(huì)影響性能。每次Insert、Update操作針對(duì)部分字段,而我們要操作全部字段。案例:避免Blob、Clob字段與其他類(lèi)型的字段放在一張表中對(duì)于EJB的實(shí)體bean來(lái)說(shuō),每次讀寫(xiě)都要操作這些大字段,很影響性能,并且操作時(shí),加鎖時(shí)間也長(zhǎng),影響其他用戶操作。案例:定長(zhǎng)字符串應(yīng)該使用char類(lèi)型字段定長(zhǎng)的char類(lèi)型字段比可變的varchar2有更好的性能數(shù)據(jù)庫(kù)優(yōu)化數(shù)據(jù)庫(kù)對(duì)象爭(zhēng)用案例:避免字段太多的大表數(shù)據(jù)庫(kù)優(yōu)化SQL

SQL語(yǔ)句對(duì)性能的影響是顯而易見(jiàn)的。案例:使用綁定變量綁定變量可以減少我們相同SQL語(yǔ)句的解析時(shí)間,從而提高執(zhí)行效率。但是通過(guò)東莞的那次性能診斷,還是看到系統(tǒng)中有不少地方?jīng)]有使用綁定變量。案例:合理的使用索引索引對(duì)于在大表中檢索少量數(shù)據(jù),其效率是非常高的。但是很多時(shí)候我們對(duì)索引的使用不正確而造成效率低下。主要有以下幾個(gè)方面:沒(méi)有建立索引:數(shù)據(jù)量小的時(shí)候無(wú)所謂,大了就看到效率低下了;索引使用不上:建了和查詢條件不匹配的索引,根本用不上。要知道,數(shù)據(jù)庫(kù)不是有索引就一定會(huì)用,而且對(duì)于一張表來(lái)說(shuō),一次查詢只能使用一個(gè)索引;索引統(tǒng)計(jì)信息沒(méi)有更新:還有些情況下,由于索引的統(tǒng)計(jì)信息沒(méi)有更新,導(dǎo)致數(shù)據(jù)庫(kù)選擇不使用索引。這時(shí)候就需要更新索引狀態(tài)。Oracle10g以后默認(rèn)自動(dòng)更新。數(shù)據(jù)庫(kù)優(yōu)化SQL案例:使用綁定變量數(shù)據(jù)庫(kù)優(yōu)化SQL

SQL語(yǔ)句對(duì)性能的影響是顯而易見(jiàn)的。案例:正確的使用臨時(shí)表正確的使用臨時(shí)表也會(huì)大幅提高系統(tǒng)的性能。因?yàn)榕R時(shí)表是和會(huì)話綁定的,一個(gè)會(huì)話一個(gè)臨時(shí)表,所以它不存在鎖的問(wèn)題,而且臨時(shí)表的數(shù)據(jù)都是在內(nèi)存中。有時(shí)候當(dāng)查詢很復(fù)雜的時(shí)候,我們可以把查詢分解,把一下中間過(guò)程數(shù)據(jù)放到臨時(shí)表中,然后對(duì)臨時(shí)表查詢,這樣會(huì)大大提高性能。案例:合理的使用hint

Hint主要用來(lái)告訴數(shù)據(jù)庫(kù)按照我們?cè)O(shè)定的執(zhí)行計(jì)劃來(lái)抽取數(shù)據(jù)。比如,盡管索引的統(tǒng)計(jì)信息沒(méi)有更新,我們也可以通過(guò)Hint來(lái)使用索引。但是如果數(shù)據(jù)量變少了,可能使用索引的效率還不如全表掃描,但是你使用了Hint,它還是會(huì)走索引。所以說(shuō),Hint是一把雙刃劍,需要謹(jǐn)慎使用。案例:合理的使用視圖的索引視圖使用索引,實(shí)際上是使用視圖中原始表的索引。但是如果在視圖定義中對(duì)原始表的索引字段定義了別名,則不會(huì)用到原始表的索引。這一點(diǎn)要注意。數(shù)據(jù)庫(kù)優(yōu)化SQL案例:正確的使用臨時(shí)表大綱操作系統(tǒng)優(yōu)化網(wǎng)絡(luò)優(yōu)化數(shù)據(jù)庫(kù)優(yōu)化中間件優(yōu)化應(yīng)用優(yōu)化大綱中間件優(yōu)化目前我司系統(tǒng)使用的中間件主要是Weblogic。中間件優(yōu)化包括內(nèi)存設(shè)置和參數(shù)調(diào)整。中間件優(yōu)化目前我司系統(tǒng)使用的中間件主要是Weblogic中間件優(yōu)化Weblogic建域模式

Weblogic的建域模式分為開(kāi)發(fā)模式和產(chǎn)品模式,兩者有些參數(shù)的設(shè)置是不同的。案例:Weblogic產(chǎn)品模式提升性能我在進(jìn)行南海EIP測(cè)試時(shí),使用產(chǎn)品模式的性能要比開(kāi)發(fā)模式的性能高。中間件優(yōu)化Weblogic建域模式案例:Weblogic產(chǎn)品中間件優(yōu)化Weblogic集群如果應(yīng)用因?yàn)樨?fù)載過(guò)重而導(dǎo)致性能問(wèn)題,應(yīng)該考慮集群Weblogic日志級(jí)別設(shè)置要適當(dāng)生成日志會(huì)影響性能,盡可能少的生成日志有助于提升性能。中間件優(yōu)化Weblogic集群Weblogic日志級(jí)別設(shè)置要中間件優(yōu)化Weblogic內(nèi)存設(shè)置

Weblogic的內(nèi)存調(diào)整就是調(diào)整Java虛擬機(jī)的內(nèi)存。32位系統(tǒng)上JVM的可配置的最大內(nèi)存在1.5G左右。64位則不受此限制。通常情況在設(shè)置普通堆的大小時(shí),為了避免擴(kuò)展帶來(lái)的性能問(wèn)題,建議普通堆的最小值和最大值相同。但是一個(gè)非常重要的例外是IBM的JVM則要求兩個(gè)不能相同,否則會(huì)出現(xiàn)垃圾回收方面的性能問(wèn)題。案例:設(shè)置IBM的JVM普通堆的最小值和最大值不同海南局的EIP是基于IBM的JVM,開(kāi)始的時(shí)候基于以前的習(xí)慣將普通堆的最小值和最大值設(shè)置相同(-Xms4096m–Xmx4096m),后來(lái)根據(jù)網(wǎng)上同行的意見(jiàn)設(shè)置為(-Xms1024m–Xmx4096m)。中間件優(yōu)化Weblogic內(nèi)存設(shè)置案例:設(shè)置IBM的JVM普中間件優(yōu)化Weblogic參數(shù)調(diào)整案例:合理調(diào)整ExecuteQueueandThreadsCount值執(zhí)行隊(duì)列可以理解為一個(gè)排隊(duì)的任務(wù)群。每當(dāng)客戶端發(fā)出一個(gè)任務(wù)請(qǐng)求,就會(huì)被放到執(zhí)行隊(duì)列中。執(zhí)行隊(duì)列的線程數(shù)的意思是同時(shí)啟動(dòng)多少個(gè)線程來(lái)執(zhí)行隊(duì)列中的任務(wù)。如果隊(duì)列中的任務(wù)數(shù)大于線程數(shù),那就表明有的任務(wù)需要等待。所以線程數(shù)的最大值應(yīng)該和系統(tǒng)的最大并發(fā)數(shù)一致,相應(yīng)的,最小值應(yīng)該和系統(tǒng)的最小并發(fā)量一致。如果是WebLogic9以上版本,線程數(shù)由系統(tǒng)自己分配,無(wú)需配置。中間件優(yōu)化Weblogic參數(shù)調(diào)整案例:合理調(diào)整Execut中間件優(yōu)化Weblogic參數(shù)調(diào)整案例:合理調(diào)整AcceptBacklog值

AcceptBacklog參數(shù)表明Weblogic向操作系統(tǒng)請(qǐng)求的隊(duì)列大小??蛻舳诉B接weblogic服務(wù)器時(shí),在服務(wù)器上就監(jiān)聽(tīng)到一個(gè)客戶端的連接請(qǐng)求。但是管理客戶端連接請(qǐng)求的任務(wù)是由操作系統(tǒng)來(lái)完成的,而非Weblogic。操作系統(tǒng)把這些連接請(qǐng)求存儲(chǔ)在一個(gè)先進(jìn)先出的隊(duì)列中。當(dāng)隊(duì)列中的連接請(qǐng)求達(dá)到了隊(duì)列的最大數(shù)時(shí),Weblogic服務(wù)器所在的主機(jī)操作系統(tǒng)會(huì)拒絕新的連接請(qǐng)求。只有當(dāng)隊(duì)列中的連接請(qǐng)求和Weblogic成功建立連接后,才會(huì)使隊(duì)列騰出空位,這時(shí)隊(duì)列才能繼續(xù)加入新的連接請(qǐng)求。所以,當(dāng)客戶端收到類(lèi)似connectionrefused的信息,就表明隊(duì)列已經(jīng)滿了,這時(shí)候可以調(diào)大AcceptBacklog的值。目前在部署的過(guò)程中,一般都設(shè)置為100。中間件優(yōu)化Weblogic參數(shù)調(diào)整案例:合理調(diào)整Accept中間件優(yōu)化Weblogic參數(shù)調(diào)整案例:合理的調(diào)整JDBC連接數(shù)這里主要是指JDBC連接池中的連接數(shù)。當(dāng)操作數(shù)據(jù)庫(kù)的事務(wù)并發(fā)量很大時(shí),需要調(diào)大JDBC連接數(shù)的最大值,否則會(huì)報(bào)得不到JDBC連接的問(wèn)題。一般最大值的設(shè)置不應(yīng)該超過(guò)執(zhí)行隊(duì)列中線程最大值的設(shè)置,更不要超過(guò)數(shù)據(jù)庫(kù)中的Processes值。中間件優(yōu)化Weblogic參數(shù)調(diào)整案例:合理的調(diào)整JDBC連中間件優(yōu)化Weblogic參數(shù)調(diào)整案例:合理的調(diào)整JTA的事務(wù)超時(shí)時(shí)間

JTA就是Java事務(wù)管理接口,主要用來(lái)管理EJB的事務(wù)。我們通常關(guān)注的就是事務(wù)的超時(shí)時(shí)間。因?yàn)橛行┦聞?wù)比較大,如果超時(shí)時(shí)間設(shè)置過(guò)短,會(huì)造成事務(wù)處理失敗并回滾。中間件優(yōu)化Weblogic參數(shù)調(diào)整案例:合理的調(diào)整JTA的事中間件優(yōu)化Weblogic參數(shù)調(diào)整案例:使用NativeIO服務(wù)器啟動(dòng),接受到連接請(qǐng)求并建立好連接以后,監(jiān)聽(tīng)線程將處理權(quán)交給Socket復(fù)用器,放置到執(zhí)行隊(duì)列中。當(dāng)有一個(gè)請(qǐng)求進(jìn)入執(zhí)行隊(duì)列,就會(huì)有一個(gè)空閑的執(zhí)行線程從該隊(duì)列里面取走并向調(diào)用者返回結(jié)果。Weblogic帶有兩個(gè)版本的Socket復(fù)用器,純Java版和本地接口版(JNI)。訪問(wèn)量?。篔ava版性能要好一些。JNI的API調(diào)用會(huì)損失一部分性能。訪問(wèn)量大:JNI版的性能比較好,所以盡量保證Weblogic使用本地接口版的Socket復(fù)用器。中間件優(yōu)化Weblogic參數(shù)調(diào)整案例:使用NativeI大綱操作系統(tǒng)優(yōu)化網(wǎng)絡(luò)優(yōu)

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論