版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
Oracle應(yīng)用系統(tǒng)優(yōu)化向-mail:xiang-xj@139.com目錄性能優(yōu)化誤區(qū)性能優(yōu)化概述線性可擴(kuò)充性硬件規(guī)劃與軟件規(guī)劃系統(tǒng)架構(gòu)規(guī)劃與設(shè)計(jì)應(yīng)用設(shè)計(jì)原則性能檢測(cè)與優(yōu)化常用優(yōu)化技術(shù)的分析性能優(yōu)化實(shí)踐內(nèi)存管理及調(diào)整性能優(yōu)化實(shí)踐常用的優(yōu)化檢測(cè)腳本數(shù)據(jù)庫(kù)性能檢測(cè)指南數(shù)據(jù)庫(kù)索引的維護(hù)性能優(yōu)化的擴(kuò)展如何收集性能問(wèn)題優(yōu)化案例簡(jiǎn)介Oracle應(yīng)用優(yōu)化誤區(qū)不重視應(yīng)用設(shè)計(jì)期的前期規(guī)劃簡(jiǎn)單增加/升級(jí)計(jì)算機(jī)硬件只強(qiáng)調(diào)數(shù)據(jù)庫(kù)參數(shù)優(yōu)化技術(shù)沒(méi)有考慮負(fù)載平衡數(shù)據(jù)庫(kù)以外的優(yōu)化占優(yōu)化工作60%以上沒(méi)有利用數(shù)據(jù)庫(kù)已有的資源只注意優(yōu)化數(shù)據(jù)庫(kù)本身性能優(yōu)化概述性能問(wèn)題常常由于對(duì)系統(tǒng)資源競(jìng)爭(zhēng),使得某些資源被耗盡所產(chǎn)生新的性能調(diào)優(yōu)方法論是基于仔細(xì)地規(guī)劃和設(shè)計(jì)數(shù)據(jù)庫(kù)系統(tǒng),避免系統(tǒng)資源被耗盡而引起系統(tǒng)崩潰。通過(guò)消除系統(tǒng)資源競(jìng)爭(zhēng),系統(tǒng)可以通過(guò)擴(kuò)展來(lái)滿足業(yè)務(wù)發(fā)展的需要。性能優(yōu)化,不是一個(gè)一蹴而就的工作,也不是一個(gè)一勞永逸的工作,需要定期維護(hù),定期觀察,在發(fā)現(xiàn)性能瓶頸時(shí)及時(shí)進(jìn)行調(diào)整。所以在優(yōu)化前,我們需要確定一個(gè)優(yōu)化目標(biāo),我們的目標(biāo)是滿足我們的應(yīng)用性能要求就可以了。Oracle優(yōu)化,涉及的范圍太廣泛,包含的有主機(jī)性能,內(nèi)存使用性能,網(wǎng)絡(luò)傳輸性能,SQL語(yǔ)句執(zhí)行性能等應(yīng)用實(shí)施初期,應(yīng)用使用的用戶(hù)數(shù)不多,進(jìn)入系統(tǒng)的數(shù)據(jù)量也不太大。因此往往會(huì)掩蓋性能問(wèn)題性能優(yōu)化概述Oracle優(yōu)化內(nèi)存等參數(shù)配置的優(yōu)化。內(nèi)存優(yōu)化,是性能受益最快的地方。減少物理讀寫(xiě)的優(yōu)化。內(nèi)存邏輯I/O操作的時(shí)間,遠(yuǎn)遠(yuǎn)小于物理I/O的操作時(shí)間。減少物理讀寫(xiě)的優(yōu)化,一般所用的方法有:增加內(nèi)存databuffer的大小,盡可能讓數(shù)據(jù)庫(kù)操作的數(shù)據(jù)都能在內(nèi)存里找到,不需要進(jìn)行物理讀寫(xiě)操作。通過(guò)使用索引,避免不必要的全表掃描。大表物理分區(qū),Oracle具有很好的分區(qū)識(shí)別功能,減少數(shù)據(jù)掃描范圍。其他的一些減少物理讀寫(xiě)的優(yōu)化方法,比如使用materializedview,Cluster等方法;還有一些分散I/O的方法,比如Oracle日志文件不與數(shù)據(jù)文件放在一個(gè)物理硬盤(pán),數(shù)據(jù)熱點(diǎn)文件物理I/O分開(kāi)等等方法批量重復(fù)操作的SQL語(yǔ)句及大表操作的優(yōu)化。減少SQL執(zhí)行次數(shù),減少大表操作次數(shù)。性能優(yōu)化概述-可擴(kuò)充性系統(tǒng)可擴(kuò)展性是當(dāng)增加新的系統(tǒng)資源時(shí)能夠處理更多的業(yè)務(wù)負(fù)荷的能力,性能的提高為線形。影響線形可擴(kuò)充性的因素:當(dāng)用戶(hù)數(shù)增加時(shí)需要更多的并發(fā)管理等待資源的鎖的增加保證數(shù)據(jù)一致性帶來(lái)的負(fù)荷操作系統(tǒng)負(fù)荷增加數(shù)據(jù)容量增加時(shí)交易處理需要訪問(wèn)更多的數(shù)據(jù)沒(méi)有很好設(shè)計(jì)的SQL語(yǔ)句和索引會(huì)產(chǎn)生大量的邏輯I/O數(shù)據(jù)庫(kù)對(duì)象維護(hù)需要更多的時(shí)間,從而減少了系統(tǒng)可用性性能優(yōu)化概述-可擴(kuò)充性一個(gè)應(yīng)用不可擴(kuò)展時(shí)是當(dāng)系統(tǒng)的一個(gè)資源被耗盡以至當(dāng)負(fù)載增加時(shí)不能提供更多的處理能力的那一個(gè)點(diǎn)。硬件資源耗盡掃描高容量數(shù)據(jù)表的處理引起磁盤(pán)I/O短缺過(guò)度的網(wǎng)絡(luò)請(qǐng)求導(dǎo)致網(wǎng)絡(luò)瓶頸內(nèi)存分配引起頁(yè)對(duì)換過(guò)多的進(jìn)程和線索分配引起操作系統(tǒng)失效性能優(yōu)化概述-線性可擴(kuò)充性影響線形化可擴(kuò)充性的因素低劣的應(yīng)用設(shè)計(jì)\開(kāi)發(fā)\系統(tǒng)配置硬件配置不合理軟件組件的限制硬件組件的限制性能優(yōu)化概述-線性可擴(kuò)充性影響線形化可擴(kuò)充性的因素低劣的應(yīng)用設(shè)計(jì)\開(kāi)發(fā)\系統(tǒng)配置應(yīng)用本身是影響線性可擴(kuò)充性的最大因素:低劣的方案設(shè)計(jì)造成了nPoorschemadesigncancauseexpensiveSQLthatdoesnotscale.低劣的事務(wù)處理設(shè)計(jì)產(chǎn)生了鎖和串行化問(wèn)題低劣的連接管理–
響應(yīng)速度低/系統(tǒng)不可靠應(yīng)用實(shí)施也會(huì)成為一個(gè)薄弱環(huán)節(jié):nSystemscanmovetoproductionenvironmentswithbadI/Ostrategies.生產(chǎn)環(huán)境使用與測(cè)試環(huán)境產(chǎn)生的不同的執(zhí)行計(jì)劃給內(nèi)存密集型應(yīng)用分配大量的內(nèi)存卻沒(méi)有考慮在運(yùn)行時(shí)釋放內(nèi)存分配不合理以及內(nèi)存不足會(huì)產(chǎn)生頁(yè)面的對(duì)換影響性能和系統(tǒng)可用性硬件配置不合理軟件組件的限制硬件組件的限制性能優(yōu)化概述-線性可擴(kuò)充性影響線形化可擴(kuò)充性的因素低劣的應(yīng)用設(shè)計(jì)\開(kāi)發(fā)\配置硬件配置不合理逐漸降低的硬件價(jià)格可以彌補(bǔ)硬件能力規(guī)劃的不足過(guò)多的硬件配置往往會(huì)掩蓋系統(tǒng)可擴(kuò)充性的問(wèn)題(本可以花較少的錢(qián))軟件組件的限制硬件組件的限制性能優(yōu)化概述-線性可擴(kuò)充性影響線形化可擴(kuò)充性的因素低劣的應(yīng)用設(shè)計(jì)\開(kāi)發(fā)\配置硬件配置不合理軟件組件的限制所有的軟件組件都有可擴(kuò)充性和資源使用的限制(包括:應(yīng)用服務(wù)器,數(shù)據(jù)庫(kù)服務(wù)器和操作系統(tǒng))應(yīng)用設(shè)計(jì)者不能指望軟件能夠超過(guò)它的處理能力硬件組件的限制性能優(yōu)化概述-線性可擴(kuò)充性影響線形化可擴(kuò)充性的因素低劣的應(yīng)用設(shè)計(jì)\開(kāi)發(fā)\系統(tǒng)配置硬件配置不合理軟件組件的限制硬件組件的限制硬件不完全具有可伸縮性的例如:在一定數(shù)量之內(nèi),多CPU系統(tǒng)的性能可以線性提升(<=32),但超過(guò)以后性能的提升就是非線性的。甚至?xí)霈F(xiàn)增加CPU會(huì)降低性能。這主要是由于系統(tǒng)管理,資源競(jìng)爭(zhēng),同步等因素造成的。這種現(xiàn)象與系統(tǒng)負(fù)載和操作系統(tǒng)設(shè)置關(guān)系很大。性能優(yōu)化概述-互連網(wǎng)環(huán)境下的可擴(kuò)充性問(wèn)題在Internet下運(yùn)行的應(yīng)用其性能問(wèn)題和可用性問(wèn)題更加復(fù)雜,Internet環(huán)境下的應(yīng)用系統(tǒng)特點(diǎn):需要24X7X365天并發(fā)用戶(hù)數(shù)不可預(yù)測(cè)和不確定系統(tǒng)容量規(guī)劃方面困難允許任何類(lèi)型的查詢(xún)多層架構(gòu)無(wú)狀態(tài)的中間件快速擴(kuò)充沒(méi)有大量的時(shí)間測(cè)試性能優(yōu)化概述-系統(tǒng)架構(gòu)系統(tǒng)架構(gòu)由兩部分組成:硬件與軟件組件配置適合的系統(tǒng)架構(gòu)以滿足應(yīng)用的要求性能優(yōu)化概述-硬件規(guī)劃硬件資源包括:CPU內(nèi)存I/O子系統(tǒng)網(wǎng)絡(luò)資源目標(biāo):規(guī)劃多層環(huán)境下每一層的處理能力平衡的設(shè)計(jì)盡可能讓所有的組件同時(shí)達(dá)到它們的設(shè)計(jì)極限優(yōu)化的考慮:通過(guò)增加硬件的方法來(lái)獲得的性能提高只能是對(duì)當(dāng)前性能問(wèn)題的短期補(bǔ)救措施,如果應(yīng)用的負(fù)荷繼續(xù)增加,我們將在不久的將來(lái)還要面對(duì)同樣的性能問(wèn)題.一個(gè)沒(méi)有很好地設(shè)計(jì)的系統(tǒng),不論增加多少硬件資源都不能提高其性能.在購(gòu)買(mǎi)新的硬件前,要確認(rèn)應(yīng)用中沒(méi)有存在串行化問(wèn)題或單線索問(wèn)題性能優(yōu)化概述-軟件規(guī)劃大多數(shù)應(yīng)用軟件包括下列組件:管理用戶(hù)界面的組件處理業(yè)務(wù)邏輯的組件(執(zhí)行應(yīng)用的核心功能)管理用戶(hù)請(qǐng)求和資源分配的組件管理數(shù)據(jù)和事務(wù)處理的組件性能優(yōu)化概述-軟件規(guī)劃大多數(shù)應(yīng)用軟件包括下列組件:管理用戶(hù)界面的組件繪制顯示屏幕收集并傳遞用戶(hù)數(shù)據(jù)到業(yè)務(wù)邏輯組件校驗(yàn)數(shù)據(jù)錄入有效性在不同的應(yīng)用級(jí)別和狀態(tài)之間導(dǎo)航用戶(hù)處理業(yè)務(wù)邏輯的組件(執(zhí)行應(yīng)用的核心功能)管理用戶(hù)請(qǐng)求和資源分配的組件管理數(shù)據(jù)和事務(wù)處理的組件性能優(yōu)化概述-軟件規(guī)劃大多數(shù)應(yīng)用軟件包括下列組件:管理用戶(hù)界面的組件處理業(yè)務(wù)邏輯的組件(執(zhí)行應(yīng)用的核心功能)轉(zhuǎn)化數(shù)據(jù)模型到一個(gè)關(guān)系數(shù)據(jù)表結(jié)構(gòu)定義關(guān)系表結(jié)構(gòu)的約束條件編寫(xiě)過(guò)程邏輯代碼執(zhí)行業(yè)務(wù)規(guī)則管理用戶(hù)請(qǐng)求和資源分配的組件管理數(shù)據(jù)和事務(wù)處理的組件性能優(yōu)化概述-軟件規(guī)劃大多數(shù)應(yīng)用軟件包括下列組件:管理用戶(hù)界面的組件處理業(yè)務(wù)邏輯的組件(執(zhí)行應(yīng)用的核心功能)管理用戶(hù)請(qǐng)求和資源分配的組件負(fù)責(zé)數(shù)據(jù)庫(kù)連接管理高效地執(zhí)行SQL(通過(guò)使用cursors和共享SQL技術(shù))管理客戶(hù)端狀態(tài)信息在硬件資源中平衡客戶(hù)請(qǐng)求的負(fù)載設(shè)置硬件、軟件組件的操作對(duì)象不斷建立異步執(zhí)行任務(wù)隊(duì)列管理數(shù)據(jù)和事務(wù)處理的組件性能優(yōu)化概述-軟件規(guī)劃大多數(shù)應(yīng)用軟件包括下列組件:管理用戶(hù)界面的組件處理業(yè)務(wù)邏輯的組件(執(zhí)行應(yīng)用的核心功能)管理用戶(hù)請(qǐng)求和資源分配的組件管理數(shù)據(jù)和事務(wù)處理的組件使用鎖機(jī)制和事務(wù)處理規(guī)則提供并發(fā)訪問(wèn)數(shù)據(jù)的能力使用索引和內(nèi)存緩存技術(shù)提供優(yōu)化的數(shù)據(jù)訪問(wèn)能力保證數(shù)據(jù)的修改被記錄以防硬件失效對(duì)數(shù)據(jù)執(zhí)行已定義的任何規(guī)則如何合理配置系統(tǒng)架構(gòu)配置初始化系統(tǒng)架構(gòu)在很大程度上是個(gè)反復(fù)的過(guò)程架構(gòu)設(shè)計(jì)師必須保證在受到預(yù)算和時(shí)間計(jì)劃的限制的情況下滿足系統(tǒng)的需求如果系統(tǒng)是需要用戶(hù)不斷地與系統(tǒng)進(jìn)行交互來(lái)完成交易處理并根據(jù)數(shù)據(jù)庫(kù)內(nèi)容進(jìn)行決策,那么架構(gòu)是由用戶(hù)需求驅(qū)動(dòng)的(OLTP)如果系統(tǒng)上只有少數(shù)交互用戶(hù),那么系統(tǒng)架構(gòu)是由流程驅(qū)動(dòng)的(OLAP/DSS)注意:產(chǎn)生一個(gè)系統(tǒng)架構(gòu)不是一個(gè)確定的過(guò)程,它需要仔細(xì)考慮業(yè)務(wù)需求,技術(shù)路線的選擇,已有的系統(tǒng)和架構(gòu)以及實(shí)際可以使用的物理資源,例如:預(yù)算和人力資源等。性能優(yōu)化概述-常用的應(yīng)用系統(tǒng)交互式應(yīng)用系統(tǒng)帳務(wù)管理系統(tǒng)定單錄入系統(tǒng)郵件服務(wù)器Web-based的零售系統(tǒng)交易系統(tǒng)面向流程的應(yīng)用系統(tǒng)公用事業(yè)帳單系統(tǒng)欺詐偵測(cè)系統(tǒng)直遞郵件系統(tǒng)性能優(yōu)化概述-配置系統(tǒng)架構(gòu)-問(wèn)題一系統(tǒng)支持多少用戶(hù)?在負(fù)載很輕的系統(tǒng)或?qū)S脵C(jī)上只有很少的用戶(hù)效率/短的響應(yīng)時(shí)間/很少的管理/很少的用戶(hù)間交互/無(wú)資源沖突在企業(yè)內(nèi)有中等規(guī)模到大量的用戶(hù)用戶(hù)數(shù)受限/業(yè)務(wù)明確/可靠的系統(tǒng)服務(wù)/響應(yīng)速度/減少資源沖突/提供擴(kuò)展空間在互聯(lián)網(wǎng)上的無(wú)數(shù)用戶(hù)群系統(tǒng)組件不超出設(shè)計(jì)極限/負(fù)載平衡/無(wú)狀態(tài)應(yīng)用服務(wù)器(webservices)/高效數(shù)據(jù)庫(kù)連接管理/統(tǒng)計(jì)/監(jiān)控性能優(yōu)化概述-配置系統(tǒng)架構(gòu)-問(wèn)題二用戶(hù)與系統(tǒng)的交互方法是什么?客戶(hù)/服務(wù)器模式(Client/Server)主機(jī)/終端模式(Host)Web/Server性能優(yōu)化概述-配置系統(tǒng)架構(gòu)-問(wèn)題三用戶(hù)的分布如何?網(wǎng)絡(luò)布局(LAN/WAN/Internet)網(wǎng)絡(luò)延時(shí)使用高峰期批任務(wù)的執(zhí)行系統(tǒng)維護(hù)的工作性能優(yōu)化概述-配置系統(tǒng)架構(gòu)-問(wèn)題四網(wǎng)絡(luò)速度如何?高交互式界面的實(shí)現(xiàn)大量數(shù)據(jù)的下載,本地處理用戶(hù)訪問(wèn)的數(shù)據(jù)量有多少,有多少數(shù)據(jù)是只讀的?數(shù)據(jù)表設(shè)計(jì)索引的設(shè)計(jì)本地?cái)?shù)據(jù)緩沖實(shí)現(xiàn)數(shù)據(jù)復(fù)制實(shí)現(xiàn)用戶(hù)響應(yīng)時(shí)間的要求是什么?數(shù)據(jù)查詢(xún)報(bào)表生成數(shù)據(jù)錄入性能優(yōu)化概述-配置系統(tǒng)架構(gòu)-問(wèn)題五…是否需要24小時(shí)服務(wù)?Internet跨國(guó)/地區(qū)企業(yè)是否所有的內(nèi)容都需要實(shí)時(shí)改變?批命令/隊(duì)列數(shù)據(jù)庫(kù)規(guī)模多大?業(yè)務(wù)交易的處理能力是多少?系統(tǒng)可用性的要求是什么?已有的經(jīng)驗(yàn)和能力能否滿足組建和管理該應(yīng)用系統(tǒng)的要求?如果受預(yù)算的限制可以放棄哪些內(nèi)容?…應(yīng)用設(shè)計(jì)原則應(yīng)用設(shè)計(jì)簡(jiǎn)單化(越簡(jiǎn)單越好)數(shù)據(jù)建模數(shù)據(jù)表與索引的設(shè)計(jì)使用視圖SQL的執(zhí)行效率應(yīng)用開(kāi)發(fā)工具/語(yǔ)言的選擇應(yīng)用開(kāi)發(fā)趨勢(shì)應(yīng)用設(shè)計(jì)原則之一應(yīng)用設(shè)計(jì)簡(jiǎn)單化(越簡(jiǎn)單越好)如果數(shù)據(jù)表的設(shè)計(jì)復(fù)雜得沒(méi)有人看得懂,那么該設(shè)計(jì)可能有問(wèn)題如果SQL語(yǔ)句非常長(zhǎng)而且復(fù)雜難懂以至于任何優(yōu)化器不能夠?qū)崟r(shí)有效地對(duì)它優(yōu)化,那么可能存在一個(gè)低質(zhì)量的語(yǔ)句或處理或數(shù)據(jù)表設(shè)計(jì).如果一個(gè)表上存在針對(duì)同一個(gè)字段的多個(gè)索引,那么索引設(shè)計(jì)有問(wèn)題.如果在線用戶(hù)提交的查詢(xún)效率很低,那么可能界面設(shè)計(jì)或業(yè)務(wù)處理設(shè)計(jì)有問(wèn)題.數(shù)據(jù)建模數(shù)據(jù)表與索引的設(shè)計(jì)使用視圖SQL的執(zhí)行效率應(yīng)用開(kāi)發(fā)工具/語(yǔ)言的選擇應(yīng)用開(kāi)發(fā)趨勢(shì)應(yīng)用設(shè)計(jì)原則之二應(yīng)用設(shè)計(jì)簡(jiǎn)單化(越簡(jiǎn)單越好)數(shù)據(jù)建模關(guān)系型應(yīng)用系統(tǒng)成功的關(guān)鍵數(shù)據(jù)模型盡可能表達(dá)業(yè)務(wù)處理活動(dòng)關(guān)注影響最常用的業(yè)務(wù)處理(核心業(yè)務(wù))的實(shí)體使用合適的建模工具數(shù)據(jù)表與索引的設(shè)計(jì)使用視圖SQL的執(zhí)行效率應(yīng)用開(kāi)發(fā)工具/語(yǔ)言的選擇應(yīng)用開(kāi)發(fā)趨勢(shì)應(yīng)用設(shè)計(jì)原則之三應(yīng)用設(shè)計(jì)簡(jiǎn)單化(越簡(jiǎn)單越好)數(shù)據(jù)建模數(shù)據(jù)表與索引的設(shè)計(jì)靈活性與核心業(yè)務(wù)處理效率之間的平衡關(guān)注關(guān)鍵業(yè)務(wù)相關(guān)數(shù)據(jù)表的設(shè)計(jì),保證處理速度索引的設(shè)計(jì)可能產(chǎn)生的不斷調(diào)整的過(guò)程給索引增加所有必要的列/使用索引組織表((IOT)使用不同的索引類(lèi)型(B-TreeIndexes,BitmapIndexes,Function-basedIndexes,PartitionedIndexes,ReverseKeyIndexes)使用視圖SQL的執(zhí)行效率應(yīng)用開(kāi)發(fā)工具/語(yǔ)言的選擇應(yīng)用開(kāi)發(fā)趨勢(shì)應(yīng)用設(shè)計(jì)原則之四應(yīng)用設(shè)計(jì)簡(jiǎn)單化(越簡(jiǎn)單越好)數(shù)據(jù)建模數(shù)據(jù)表與索引的設(shè)計(jì)使用視圖簡(jiǎn)化應(yīng)用設(shè)計(jì)/安全性/數(shù)據(jù)表隔離查詢(xún)優(yōu)化問(wèn)題SQL的執(zhí)行效率應(yīng)用開(kāi)發(fā)工具/語(yǔ)言的選擇應(yīng)用開(kāi)發(fā)趨勢(shì)應(yīng)用設(shè)計(jì)原則之五應(yīng)用設(shè)計(jì)簡(jiǎn)單化(越簡(jiǎn)單越好)數(shù)據(jù)建模數(shù)據(jù)表與索引的設(shè)計(jì)使用視圖SQL的執(zhí)行效率好的數(shù)據(jù)庫(kù)連接管理合理地使用和管理指針技術(shù)HardParsingSoftParsing應(yīng)用開(kāi)發(fā)工具/語(yǔ)言的選擇應(yīng)用開(kāi)發(fā)趨勢(shì)應(yīng)用設(shè)計(jì)原則之六應(yīng)用設(shè)計(jì)簡(jiǎn)單化(越簡(jiǎn)單越好)數(shù)據(jù)建模數(shù)據(jù)表與索引的設(shè)計(jì)使用視圖SQL的執(zhí)行效率應(yīng)用開(kāi)發(fā)工具/語(yǔ)言的選擇選擇適合軟件組件的開(kāi)發(fā)環(huán)境用戶(hù)界面(HTML/WindowsPRGs)–
響應(yīng)時(shí)間/減少網(wǎng)絡(luò)傳輸量(Java)業(yè)務(wù)邏輯(解釋型語(yǔ)言Java,Plsql,編譯型語(yǔ)言;程序所處位置)用戶(hù)請(qǐng)求和資源分配(考慮工具的數(shù)據(jù)庫(kù)連接管理和指針管理模式)數(shù)據(jù)管理和事務(wù)處理開(kāi)發(fā)一個(gè)軟件模塊時(shí),只考慮該模塊自身的功能不留功能缺陷過(guò)程化模塊-C,PL/SQL,Java;數(shù)據(jù)存取模塊-SQL經(jīng)常訪問(wèn)的,很少修改的數(shù)據(jù)最好放入高速緩存或存到本地優(yōu)化組件間的接口,使得所有組件以最可擴(kuò)充的配置運(yùn)行使用外鍵引用(利用Oracle的內(nèi)部機(jī)制保證引用完整性)應(yīng)用開(kāi)發(fā)趨勢(shì)應(yīng)用設(shè)計(jì)原則之七應(yīng)用設(shè)計(jì)簡(jiǎn)單化(越簡(jiǎn)單越好)數(shù)據(jù)建模數(shù)據(jù)表與索引的設(shè)計(jì)使用視圖SQL的執(zhí)行效率應(yīng)用開(kāi)發(fā)工具/語(yǔ)言的選擇應(yīng)用開(kāi)發(fā)趨勢(shì)Java替代C,C++Java優(yōu)點(diǎn)–
代碼可移植性,對(duì)程序員的實(shí)用性Java缺點(diǎn)–
執(zhí)行效率低,占用更多的資源面向?qū)ο蟮慕TO(shè)計(jì)訪問(wèn)方法封裝,繼承性數(shù)據(jù)庫(kù)訪問(wèn)效率低Java端數(shù)據(jù)處理,頻繁訪問(wèn)數(shù)據(jù)庫(kù)使用面向?qū)ο髷?shù)據(jù)庫(kù)(Oracle8i以上)的設(shè)計(jì)方法優(yōu)化概述-負(fù)載評(píng)估,建模,開(kāi)發(fā)評(píng)估數(shù)據(jù)增長(zhǎng)當(dāng)系統(tǒng)開(kāi)始使用后,數(shù)據(jù)庫(kù)的增長(zhǎng)變得難以預(yù)測(cè)索引的增長(zhǎng)更加難以預(yù)測(cè)隨著數(shù)據(jù)的不斷增加和刪除,數(shù)據(jù)碎片和浪費(fèi)的空間也增加利用索引重建技術(shù)監(jiān)控和尋找增長(zhǎng)過(guò)快的數(shù)據(jù)表是保證系統(tǒng)高效和高可用性的關(guān)鍵之一評(píng)估負(fù)荷從類(lèi)似的系統(tǒng)中推斷使用基準(zhǔn)評(píng)估程序(Benchmarking)應(yīng)用建模優(yōu)化概述-負(fù)載評(píng)估,建模,開(kāi)發(fā)對(duì)設(shè)計(jì)進(jìn)行測(cè)試,調(diào)試,驗(yàn)證測(cè)試過(guò)程主要包括功能測(cè)試和穩(wěn)定性測(cè)試,有時(shí)也要進(jìn)行性能測(cè)試。測(cè)試規(guī)則包括:使用真實(shí)的數(shù)據(jù)量和數(shù)據(jù)分布進(jìn)行測(cè)試使用正確的優(yōu)化模式(推薦采用基于成本的優(yōu)化模式)測(cè)試單用戶(hù)性能獲得并記錄所有的SQL語(yǔ)句執(zhí)行計(jì)劃(找到負(fù)荷大的事務(wù)處理)盡可能進(jìn)行多用戶(hù)測(cè)試(確保沒(méi)有鎖的沖突和串行化問(wèn)題)使用正確的硬件配置進(jìn)行測(cè)試評(píng)估穩(wěn)定狀態(tài)下的性能優(yōu)化概述-發(fā)布新應(yīng)用首次展示策略大爆炸式方式–
所以用戶(hù)立刻移植到新系統(tǒng)中優(yōu)點(diǎn):最小的數(shù)據(jù)轉(zhuǎn)換和需要與舊系統(tǒng)的數(shù)據(jù)同步工作缺點(diǎn):需要在必要規(guī)模上完成全面的測(cè)試逐步進(jìn)展方式–
用戶(hù)慢慢地從舊系統(tǒng)移植到新系統(tǒng)優(yōu)點(diǎn):可以實(shí)現(xiàn)跟蹤系統(tǒng)負(fù)載逐漸增加的狀況缺點(diǎn):數(shù)據(jù)需要在新、舊系統(tǒng)之間來(lái)回遷移優(yōu)化概述-發(fā)布新應(yīng)用性能檢查清單下列初始化參數(shù)MAXINSTANCES,MAXDATAFILES,MAXLOGFILES,MAXLOGMEMBERS,MAXLOGHISTORY在生產(chǎn)環(huán)境應(yīng)該比測(cè)試環(huán)境設(shè)得大一些設(shè)置與開(kāi)發(fā)環(huán)境同樣的數(shù)據(jù)塊大小,優(yōu)化模式盡可能使用缺省的初始化參數(shù),只改變影響SGA區(qū)緩沖區(qū)大小的參數(shù)給數(shù)據(jù)庫(kù)對(duì)象設(shè)置存儲(chǔ)選項(xiàng)來(lái)管理塊競(jìng)爭(zhēng)所有的SQL語(yǔ)句要確認(rèn)是優(yōu)化的并且它的資源使用是明確的確認(rèn)連接數(shù)據(jù)庫(kù)的中間件和程序在連接管理上效率高并且不重復(fù)執(zhí)行l(wèi)ogon、logoff確認(rèn)所有的SQL語(yǔ)句有效地使用Cursors確認(rèn)所有的方案對(duì)象都正確地移植到生產(chǎn)環(huán)境只要系統(tǒng)一發(fā)布,建立數(shù)據(jù)庫(kù)和操作系統(tǒng)的統(tǒng)計(jì)起點(diǎn)預(yù)測(cè)第一個(gè)瓶頸,并完成對(duì)它的優(yōu)化優(yōu)化概述-監(jiān)測(cè)和優(yōu)化重要的統(tǒng)計(jì)數(shù)據(jù)操作系統(tǒng)統(tǒng)計(jì)數(shù)據(jù)CPU使用統(tǒng)計(jì)虛擬內(nèi)存使用統(tǒng)計(jì)磁盤(pán)操作統(tǒng)計(jì)最重要的磁盤(pán)統(tǒng)計(jì)是當(dāng)前的響應(yīng)時(shí)間和磁盤(pán)隊(duì)列長(zhǎng)度響應(yīng)時(shí)間應(yīng)該<20ms,否則就意味磁盤(pán)負(fù)載過(guò)重,成為瓶頸隊(duì)列<=2網(wǎng)絡(luò)流量及狀態(tài)統(tǒng)計(jì)網(wǎng)絡(luò)延時(shí)可能是響應(yīng)時(shí)間過(guò)大的重要原因優(yōu)化概述-監(jiān)測(cè)和優(yōu)化重要的統(tǒng)計(jì)數(shù)據(jù)數(shù)據(jù)庫(kù)統(tǒng)計(jì)數(shù)據(jù)庫(kù)統(tǒng)計(jì)提供了數(shù)據(jù)庫(kù)負(fù)載類(lèi)型,以及由數(shù)據(jù)庫(kù)使用的內(nèi)部及外部資源等信息。當(dāng)數(shù)據(jù)庫(kù)資源耗盡時(shí),很可能就成為應(yīng)用的瓶頸。TIMED_STATISTICS=TRUE緩沖區(qū)使用統(tǒng)計(jì) 大多數(shù)統(tǒng)計(jì)信息可以從虛表V$SYSSTAT中獲得共享池使用統(tǒng)計(jì)共享池包含有用戶(hù)會(huì)話,所有數(shù)據(jù)庫(kù)使用者共享的數(shù)據(jù)結(jié)構(gòu),以及數(shù)據(jù)字典緩沖等信息統(tǒng)計(jì)信息中除了有SQL本身,還有SQL執(zhí)行的次數(shù)和所占用的CPU,磁盤(pán)I/O等統(tǒng)計(jì)信息可以從虛表V$SQL中獲得當(dāng)分析師不了解,或沒(méi)有應(yīng)用源代碼時(shí),分析共享池最有效,幫助找到有瓶頸的數(shù)據(jù)庫(kù)對(duì)象優(yōu)化概述-監(jiān)測(cè)和優(yōu)化重要的統(tǒng)計(jì)數(shù)據(jù)數(shù)據(jù)庫(kù)統(tǒng)計(jì)等待事件統(tǒng)計(jì)進(jìn)程要共享某個(gè)資源或與其它進(jìn)程同步進(jìn)程將控制交給外部程序用戶(hù)進(jìn)程等待,該等待作為響應(yīng)時(shí)間的一部分如果多個(gè)進(jìn)程同時(shí)爭(zhēng)一個(gè)資源,數(shù)據(jù)庫(kù)變成單線索,可伸縮性受影響從虛表V$SYSTEM_EVENT,V$SESSION_EVENT,andV$SESSION_WAIT可以查詢(xún)到等待事件的歷史以及當(dāng)前等待的事件優(yōu)化概述-監(jiān)測(cè)和優(yōu)化重要的統(tǒng)計(jì)數(shù)據(jù)應(yīng)用系統(tǒng)統(tǒng)計(jì)應(yīng)提供每天的事務(wù)處理量都有哪些事務(wù)處理,每個(gè)事務(wù)處理所花時(shí)間(響應(yīng)時(shí)間)等優(yōu)化概述-監(jiān)測(cè)和優(yōu)化統(tǒng)計(jì)數(shù)據(jù)收集工具操作系統(tǒng)數(shù)據(jù)收集工具UNIXCPUsar,vmstat,mpstat,iostatMemorysar,vmstatDisksar,iostatNetworknetstatWindows
使用性能監(jiān)控工具數(shù)據(jù)庫(kù)數(shù)據(jù)收集工具StatspackOracleEnterpriseManager(EM)BSTAT/ESTATscripts優(yōu)化概述-監(jiān)測(cè)和優(yōu)化歷史數(shù)據(jù)和起始監(jiān)測(cè)時(shí)間的重要性告訴系統(tǒng)發(fā)生什么引起性能問(wèn)題性能直覺(jué)把統(tǒng)計(jì)結(jié)果與應(yīng)用中的業(yè)務(wù)處理進(jìn)行關(guān)聯(lián),找到不正常的處理,以及發(fā)生變化的原因優(yōu)化概述-監(jiān)測(cè)和優(yōu)化Oracle性能優(yōu)化方法性能優(yōu)化方法簡(jiǎn)介性能問(wèn)題一般是由于系統(tǒng)處理能力不足,用戶(hù)、任務(wù)響應(yīng)時(shí)間不可接受等問(wèn)題所造成的。首先要從最終用戶(hù)(尤其是為系統(tǒng)付賬的人)那里得到對(duì)性能問(wèn)題的描述:上線性能太低,以至于我們不能做其它事情;開(kāi)發(fā)票處理太慢響應(yīng)速度太慢,我丟失客戶(hù)了現(xiàn)在每天交易量5000,系統(tǒng)已經(jīng)在強(qiáng)撐。下個(gè)月要將所有用戶(hù)加進(jìn)來(lái),估計(jì)交易量達(dá)到四倍。。。從反饋回來(lái)的信息中,找到影響性能的最關(guān)鍵的因素確定優(yōu)化目標(biāo)帳單系統(tǒng)必須在3小時(shí)的窗口時(shí)間內(nèi)處理100,000個(gè)帳戶(hù)網(wǎng)站的高峰期,網(wǎng)頁(yè)刷新速度不能超過(guò)5秒通過(guò)優(yōu)化手段消除性能瓶頸-遞歸的過(guò)程直至用戶(hù)接受優(yōu)化后的性能優(yōu)化概述-監(jiān)測(cè)和優(yōu)化Oracle性能優(yōu)化方法優(yōu)化步驟獲得最終用戶(hù)反饋。確定性能優(yōu)化范圍和子目標(biāo),以及今后的優(yōu)化目標(biāo)。該過(guò)程是今后制定能力計(jì)劃的關(guān)鍵獲得完整的操作系統(tǒng),數(shù)據(jù)庫(kù),應(yīng)用本身的統(tǒng)計(jì)數(shù)據(jù)(包括性能好的時(shí)期和變壞的時(shí)期)對(duì)影響性能的所有機(jī)器進(jìn)行操作系統(tǒng)完整性檢查,找到負(fù)載過(guò)大的硬件和操作系統(tǒng)資源。另外,檢查所有硬件是否有診斷錯(cuò)誤。檢查前10個(gè)最常出現(xiàn)的Oracle錯(cuò)誤,確定是否就是可能的問(wèn)題所在。建立概念模型表示系統(tǒng)正在發(fā)生的現(xiàn)象,用癥狀提示幫助理解什么引起性能問(wèn)題。提出一系列補(bǔ)救措施和預(yù)計(jì)產(chǎn)生的效果,順序執(zhí)行這些措施。性能優(yōu)化的黃金規(guī)則是:一次進(jìn)行一項(xiàng)改變?nèi)缓髾z查其效果。如果同時(shí)進(jìn)行多項(xiàng)改變,要保證它們之間沒(méi)有互相影響。檢查這些改變是否達(dá)到了預(yù)期的效果,看用戶(hù)是否能夠接受性能優(yōu)化的結(jié)果。否則,檢查其它瓶頸,并繼續(xù)改進(jìn)所建立的概念模型直到更準(zhǔn)確地理解應(yīng)用系統(tǒng)。重復(fù)步驟5,6,7直到到達(dá)性能優(yōu)化目標(biāo),或由于其它限制不可能繼續(xù)優(yōu)化了。優(yōu)化概述-監(jiān)測(cè)和優(yōu)化如何檢查操作系統(tǒng)檢查整個(gè)系統(tǒng)和每個(gè)CPU在用戶(hù)區(qū)和內(nèi)核區(qū)的使用情況確定沒(méi)有發(fā)生頁(yè)面對(duì)換情況檢查機(jī)器間的網(wǎng)絡(luò)延遲是否在可接受的范圍內(nèi)找到響應(yīng)速度慢或隊(duì)列長(zhǎng)的磁盤(pán)子系統(tǒng)確定沒(méi)有硬件錯(cuò)誤優(yōu)化概述-監(jiān)測(cè)和優(yōu)化判斷性能問(wèn)題方法在單用戶(hù)或負(fù)載低情況下,響應(yīng)速度或批處理運(yùn)行時(shí)間是否可以接受?如果不滿足要求,那么應(yīng)用開(kāi)發(fā)本身有問(wèn)題看應(yīng)用內(nèi)部統(tǒng)計(jì)資料,SQLTrace,SQL計(jì)劃與開(kāi)發(fā)者一道看索引,事務(wù)處理SQL設(shè)計(jì),以及可能存在的批命令、后臺(tái)處理是否存在優(yōu)化問(wèn)題是否利用了所有的CPU資源?如果內(nèi)核使用率>40%,檢查操作系統(tǒng)在網(wǎng)絡(luò)傳輸,頁(yè)面調(diào)度,頁(yè)面對(duì)換或進(jìn)程失效的情況否則看用戶(hù)區(qū)的使用情況,看是否有非數(shù)據(jù)庫(kù)任務(wù)的其它進(jìn)程消耗CPU資源。例如:備份,文件傳輸,打印隊(duì)列等。確定Oracle使用了大部分CPU資源后,檢查占用CPU資源最大的SQL。如果應(yīng)用是優(yōu)化的并且沒(méi)有低效率的SQL,考慮將定期執(zhí)行的作業(yè)移到非高峰期運(yùn)行,或升級(jí)到更大一些的機(jī)器。系統(tǒng)性能不滿意,但CPU資源沒(méi)有充分利用在該服務(wù)器上存在串行化問(wèn)題查看WAIT_EVENTS統(tǒng)計(jì),確定最大的串行化點(diǎn)如果沒(méi)有串行化點(diǎn),問(wèn)題可能是數(shù)據(jù)庫(kù)外消除WAIT_EVENTS包括調(diào)整SQL和初始化參數(shù)優(yōu)化概述-監(jiān)測(cè)和優(yōu)化在Oracle系統(tǒng)中最常犯的10個(gè)錯(cuò)誤低劣的連接管理(兩個(gè)數(shù)量級(jí))沒(méi)有很好地使用Cursors和共享池(一個(gè)數(shù)量級(jí))發(fā)生數(shù)據(jù)庫(kù)DatabaseI/O錯(cuò)誤數(shù)據(jù)庫(kù)只按容量分配,沒(méi)有按帶寬分配重置日志設(shè)置問(wèn)題太小的重置日志引起系統(tǒng)檢查點(diǎn)(Checkpoint)不斷給日志緩沖區(qū)和I/O系統(tǒng)帶來(lái)很高的壓力日志文件太少,歸檔無(wú)法跟上步伐。數(shù)據(jù)庫(kù)出現(xiàn)等待現(xiàn)象由于缺少freelists,freelistgroups,transactionslots(INITRANS),或缺少回滾段,在緩沖區(qū)產(chǎn)生串行化數(shù)據(jù)塊在Insert操作頻繁,將塊大小升到8k或16k,或活動(dòng)用戶(hù)數(shù)非常多并且回滾段很少的應(yīng)用中常常發(fā)生優(yōu)化概述-監(jiān)測(cè)和優(yōu)化在Oracle系統(tǒng)中最常犯的10個(gè)錯(cuò)誤6.
很長(zhǎng)的全表掃描在線交互系統(tǒng)或數(shù)據(jù)量非常大的系統(tǒng)中存在大量的全表掃描操作表明事務(wù)處理設(shè)計(jì)有問(wèn)題,或缺少索引,低劣的SQL優(yōu)化。屬于I/O密集操作,而且不可伸縮7.
在硬盤(pán)排序(同上)8.
大量的遞歸(SYS級(jí))SQL空間管理活動(dòng)發(fā)生,例如:分配擴(kuò)展數(shù)據(jù)空間9.Schema錯(cuò)誤或優(yōu)化問(wèn)題向生產(chǎn)環(huán)境移植時(shí)丟失索引等10.
使用非標(biāo)準(zhǔn)初始化參數(shù)優(yōu)化概述-監(jiān)測(cè)和優(yōu)化硬件配置的性能特性 硬盤(pán)特性:大小512MB-36GB(SCSI)尋址速度5-10msec傳輸速度5-10msec吞吐量20-40I/O秒/每個(gè)硬盤(pán)磁盤(pán)控制器吞吐速度1750I/Os/秒內(nèi)存讀取速度1-10微秒點(diǎn)對(duì)點(diǎn)的網(wǎng)絡(luò)延遲1-25msec.負(fù)荷很重的系統(tǒng):(最壞情況)操作型系統(tǒng)(OLTP)-60%usr,40%sys決策支持系統(tǒng)(DSS)-90%usr,10%sys優(yōu)化概述-監(jiān)測(cè)和優(yōu)化應(yīng)急性能優(yōu)化技術(shù)優(yōu)化步驟檢查性能問(wèn)題并收集問(wèn)題出現(xiàn)的征狀用戶(hù)反饋系統(tǒng)如何表現(xiàn)不佳,是處理能力問(wèn)題還是響應(yīng)速度問(wèn)題?提出問(wèn)題:出現(xiàn)性能問(wèn)題之前發(fā)生了什么?全面檢查所有硬件的使用情況確定數(shù)據(jù)庫(kù)服務(wù)器CPU處理能力問(wèn)題,經(jīng)常在等待資源上如果是CPU問(wèn)題,檢查:在操作系統(tǒng)級(jí)消耗大量CPU的對(duì)話在數(shù)據(jù)庫(kù)級(jí)執(zhí)行大量buffergets操作的對(duì)話或語(yǔ)句(檢查V$SYSSTAT,V$SQL)造成非優(yōu)化執(zhí)行SQL的執(zhí)行計(jì)劃的改變不正確設(shè)置的初始化參數(shù)導(dǎo)致代碼改變的算法問(wèn)題,或被升級(jí)的軟件模塊否則檢查V$SESSION_WAIT中的等待事件列表,找到串行化點(diǎn)如果存在大量的對(duì)librarycache的競(jìng)爭(zhēng),系統(tǒng)可能就不允許新的登錄或向數(shù)據(jù)庫(kù)提交SQL。在這種情況下,使用歷史數(shù)據(jù)來(lái)確定為什么突然會(huì)對(duì)該栓(Latch)產(chǎn)生競(jìng)爭(zhēng).如果大多數(shù)等待是對(duì)I/O資源的等待,檢查所有執(zhí)行I/O操作的SQL語(yǔ)句.優(yōu)化概述-監(jiān)測(cè)和優(yōu)化應(yīng)急性能優(yōu)化技術(shù)優(yōu)化步驟執(zhí)行應(yīng)急措施來(lái)穩(wěn)定系統(tǒng)讓某些模塊離線限制負(fù)載重啟系統(tǒng)中斷某些任務(wù)確認(rèn)系統(tǒng)已經(jīng)穩(wěn)定收集數(shù)據(jù)庫(kù)統(tǒng)計(jì)數(shù)據(jù)集按前面介紹的嚴(yán)格步驟完成優(yōu)化使重新上線運(yùn)行Oracle的Memory管理Oracle的Instance結(jié)構(gòu)
SGA
DataBaseBufferCacheOther(Largepool,Cursors…)SharedPoolRedoLogBufferBackgroundProcessDBWRLGWRPMONCKPT…SMONOracle的Memory管理SGA(SystemGlobalArea):系統(tǒng)全局區(qū)在多人使用的環(huán)境下,SGA的數(shù)據(jù)可由系統(tǒng)中所有使用者共享,所以SGA也稱(chēng)為
SharedGlobalAreaSGA的設(shè)定參數(shù)
SGA_MAX_SIZE用以設(shè)定SGA的總大小如以數(shù)據(jù)庫(kù)執(zhí)行效能考慮,此參數(shù)盡可能設(shè)大參數(shù)值盡可能不要超過(guò)實(shí)際內(nèi)存大小,否則會(huì)用到硬盤(pán)上的虛擬內(nèi)存,反而會(huì)導(dǎo)致性能下降參數(shù)值大小必須大于
SGA相關(guān)區(qū)域參數(shù)值的總和Oracle的Memory管理SGA包含下列幾個(gè)區(qū)域DataBaseBufferCache數(shù)據(jù)高速緩沖區(qū)RedoLogBuffer重做日志緩沖區(qū)SharedPool共享池其他,如LargePool及Cursors等SGA的相關(guān)參數(shù)修改在Oracle8i之前版本,修改后必須重新啟動(dòng)數(shù)據(jù)庫(kù)才會(huì)生效Oracle9i提供一新技術(shù)稱(chēng)動(dòng)態(tài)SGA,可以動(dòng)態(tài)配置內(nèi)存的大小Oracle的Memory管理databaseBufferCache數(shù)據(jù)高速緩存區(qū)用來(lái)存放讀取自數(shù)據(jù)庫(kù)的數(shù)據(jù)塊副本,或是使用者曾經(jīng)處理過(guò)的數(shù)據(jù)。其用途在于於有效降低讀取數(shù)據(jù)庫(kù)時(shí)造成磁盤(pán)讀寫(xiě)動(dòng)作,以提升數(shù)據(jù)存取速度數(shù)據(jù)高速緩存區(qū)包含兩種緩沖區(qū)隊(duì)列WriteList:存放dirtybuffer之副本,會(huì)在適當(dāng)時(shí)機(jī)寫(xiě)入磁盤(pán)Dirtybuffer是用來(lái)存放“己修改但尚未寫(xiě)入磁盤(pán)的數(shù)據(jù)”的緩沖區(qū)LRUList:包含freebuffer、dirtybuffer及pinnedbufferFreebuffer:空白(可用)的緩沖區(qū)Pinnedbuffer:已被使用中的緩沖區(qū)Oracle的Memory管理DatabaseBufferCache的工作原理當(dāng)使用者向Oracle送出查詢(xún)請(qǐng)求,Oracle會(huì)會(huì)先在數(shù)據(jù)高速緩沖區(qū)內(nèi)尋找該數(shù)據(jù)。如找到稱(chēng)之為cachehit,直接從內(nèi)存中讀取數(shù)據(jù),否則稱(chēng)之為cachemiss,Oracle才會(huì)從磁盤(pán)上的數(shù)據(jù)庫(kù)中讀出數(shù)據(jù)塊放入緩沖區(qū)后,使用者才從緩沖區(qū)讀取數(shù)據(jù)。當(dāng)磁盤(pán)上的數(shù)據(jù)塊讀出,要放入數(shù)據(jù)高速緩沖區(qū)內(nèi)時(shí),系統(tǒng)必須確定緩沖區(qū)內(nèi)有freebuffer供存放,此時(shí)oracle便會(huì)開(kāi)始掃描LRUList,如能順利找到freebuffer,Oracle就會(huì)將數(shù)據(jù)塊放入此freebuffer中,再將其移到LRUList的MRU端。LRU(LeastRecentlyUsed)端:較不常使用的MRU(MostRecentlyUsed)端:最近使用的Oracle的Memory管理LRUList的掃描原則從
LRU端掃到MRU端如發(fā)現(xiàn)dirtybuffer就將它移到WriteList當(dāng)掃到freebuffer或掃描的緩沖區(qū)數(shù)目超過(guò)臨界值,就會(huì)停止掃描動(dòng)作當(dāng)LRUList真的沒(méi)有freebuffer,Oracle便會(huì)通知數(shù)據(jù)庫(kù)寫(xiě)入器(DatabaseWrite,DBWR)后臺(tái)處理程序?qū)⒉糠莸膁irtybuffers先寫(xiě)入磁盤(pán),然后從LRUList的LRU端清除緩沖區(qū),以騰出freebufferOracle的Memory管理LRUList與
LRU的演算規(guī)則當(dāng)內(nèi)存的可用空間不足時(shí),緩沖區(qū)盡可能保留使用者最常用的數(shù)據(jù),優(yōu)先清除“較不常使用的數(shù)據(jù)”,並釋放空間LRUListState0:State1:State2:………A………BA………MRU端LRU端Statem:Staten:MAE………DBCNMA………EDBOracle的Memory管理設(shè)定數(shù)據(jù)高速緩沖區(qū)大小在Oracle8i之前的版本DatabaseBufferCache的大小等于
DB_BLOCK_SIZE*DB_BLOCK_BUFFERSDB_BLOCK_SIZE:數(shù)據(jù)塊(datablock)單位大小,以Bytes計(jì);預(yù)設(shè)為8192(8k)DB_BLOCK_BUFFERS:緩沖區(qū)數(shù)目;預(yù)設(shè)2048(個(gè))Oracle8i的DB_BLOCK_SIZE參數(shù)值在數(shù)據(jù)庫(kù)建立后就不可再修改Oracle9i支持多重?cái)?shù)據(jù)塊大小,除了預(yù)設(shè)的DB_BLOCK_SIZE之外,DBA可另外設(shè)定其他大小的數(shù)據(jù)塊Oracle的Memory管理RedoLogBuffer重置日志緩沖區(qū)記錄數(shù)據(jù)庫(kù)內(nèi)所有數(shù)據(jù)變動(dòng)的詳細(xì)資料,稱(chēng)為redoentries。系統(tǒng)會(huì)在適當(dāng)?shù)臅r(shí)候調(diào)用LGWR后臺(tái)處理進(jìn)程,將redoentries內(nèi)的數(shù)據(jù)寫(xiě)入磁盤(pán)內(nèi)的RedoLogFiles,以便日后執(zhí)行復(fù)原(Recovery)動(dòng)作LOG_BUFFER參數(shù)可用來(lái)設(shè)定RedoLogBuffer的大小,單位為Bytes;預(yù)設(shè)為操作系統(tǒng)數(shù)據(jù)塊的四倍若重置日志緩沖區(qū)設(shè)大一點(diǎn),可減少RedoLogFiles的讀寫(xiě)動(dòng)作,可提升系統(tǒng)性能,但亦不宜太大Oracle的Memory管理SharedPool共享區(qū)當(dāng)使用者把SQL指令發(fā)至Oracle數(shù)據(jù)庫(kù)后,系統(tǒng)會(huì)先解析語(yǔ)法是否正確。解析時(shí)所需的系統(tǒng)信息以及解析后的結(jié)果,就存放在SharedPool共享區(qū)內(nèi)。當(dāng)有其他使用者用到相同的SQL指令,即可共享已解析好的信息,達(dá)到提升SQL指令的執(zhí)行速度SHARED_POOL_SIZE參數(shù)可設(shè)定共享區(qū)的大小32-bit操作系統(tǒng)下;預(yù)設(shè)值為8(MB)64-bit操作系統(tǒng)下;預(yù)設(shè)值為64(MB)Oracle的Memory管理SharedPool共享區(qū)的組成;主要分兩類(lèi)LibraryCache(程序庫(kù)高速緩沖區(qū)):包含SharedSQLArea(共享SQL區(qū)
)PrivateSQLArea(私有SQL區(qū)
)PL/SQLProgramArea(PL/SQL程序單元區(qū)
)解析后的結(jié)果及信息即是存放在SharedSQLArea內(nèi)DictionaryCache(數(shù)據(jù)字典緩沖區(qū)):包含Table、View、Column及DataType等使用者的相關(guān)系統(tǒng)管理權(quán)限及對(duì)象存取權(quán)限Oracle在解析SQL語(yǔ)句時(shí)所需的系統(tǒng)信息即是存放在此Oracle的內(nèi)存管理-數(shù)據(jù)倉(cāng)庫(kù)數(shù)據(jù)倉(cāng)庫(kù)shared_pool_size及shared_pool_reserved_size的配置數(shù)據(jù)加載階段由于有大量的索引要建立,因此shared_pool_reserved_size為shared_pool_size的50%正常訪問(wèn)階段由于基本上是使用select語(yǔ)句訪問(wèn),因此shared_pool_reserved_size為shared_pool_size的10%Shared_pool_size約占Oracle可用內(nèi)存大小的30-40%Oracle的內(nèi)存管理-數(shù)據(jù)倉(cāng)庫(kù)Large_Pool:主要為在并行操作執(zhí)行期間所需的消息緩沖區(qū)和備份所需的磁盤(pán)I/O緩沖區(qū)留出的一個(gè)內(nèi)存段建議開(kāi)始為2000000B常用優(yōu)化技術(shù)的分析共享服務(wù)器(MTS)-多線索機(jī)制優(yōu)點(diǎn):占用較少內(nèi)存資源缺點(diǎn):速度較慢/串行化建議采用缺省的專(zhuān)用服務(wù)器模式集群技術(shù)(RAC)優(yōu)點(diǎn)–
橫向擴(kuò)展能力、高可用性缺點(diǎn)–
高速緩沖競(jìng)爭(zhēng)、過(guò)多的I/O、文件級(jí)鎖分區(qū)分割大的數(shù)據(jù)表或索引提高可用性易于管理提高性能(減少掃描數(shù)據(jù)量,并行查詢(xún))適合于數(shù)據(jù)倉(cāng)庫(kù)應(yīng)用并行處理多處理器、分區(qū)數(shù)據(jù)表設(shè)置Parallel參數(shù)適合數(shù)據(jù)倉(cāng)庫(kù)應(yīng)用性能優(yōu)化實(shí)踐-索引優(yōu)化索引調(diào)優(yōu)誤區(qū):誤區(qū)1:索引創(chuàng)建得越多越好? 實(shí)際上:創(chuàng)建的索引可能建立后從來(lái)未使用。索引的創(chuàng)建也是需要代價(jià)的,對(duì)于刪除、某些更新、插入操作,對(duì)于每個(gè)索引都要進(jìn)行相應(yīng)的刪除、更新、插入操作。從而導(dǎo)致刪除、某些更新、插入操作的效率變低。DML代價(jià)×3誤區(qū)2:對(duì)于一個(gè)單表的查詢(xún),可以索引1進(jìn)行過(guò)濾再使用索引2進(jìn)行過(guò)濾? 實(shí)際上:假設(shè)查詢(xún)語(yǔ)句如下select*fromt1wherec1=1andc2=2,c1列和c2列上分別建有索引ic1、ic2。先使用ic1(或ic2)進(jìn)行過(guò)濾,產(chǎn)生的結(jié)果集是臨時(shí)數(shù)據(jù),不再具有索引,所以不可使用ic2(或ic1)進(jìn)行再次過(guò)濾。性能優(yōu)化實(shí)踐-索引優(yōu)化索引優(yōu)化的基本原則:將索引和數(shù)據(jù)存放到不同的文件組
沒(méi)有將表數(shù)據(jù)和索引數(shù)據(jù)存儲(chǔ)到不同的文件組,而不加區(qū)別地將它們存儲(chǔ)到同一文件組。這樣,不但會(huì)造成I/O競(jìng)爭(zhēng),也為數(shù)據(jù)庫(kù)的維護(hù)工作帶來(lái)不變。組合索引的使用
假設(shè)存在組合索引it1c1c2(c1,c2),查詢(xún)語(yǔ)句select*fromt1wherec1=1andc2=2能夠使用該索引。查詢(xún)語(yǔ)句select*fromt1wherec1=1也能夠使用該索引。但是,查詢(xún)語(yǔ)句select*fromt1wherec2=2不能夠使用該索引,因?yàn)闆](méi)有組合索引的引導(dǎo)列,即,要想使用c2列進(jìn)行查找,必需出現(xiàn)c1等于某值。
性能優(yōu)化實(shí)踐-索引優(yōu)化索引優(yōu)化的基本原則:創(chuàng)建索引的規(guī)則:創(chuàng)建索引首先要考慮的是列的可選擇性。比較一下列中唯一鍵的數(shù)量和表中記錄的行數(shù),就可以判斷該列的可選擇性。如果該列的“唯一鍵的數(shù)量/表中記錄行數(shù)”的比值越接近于1,則該列的可選擇行越高。在可選擇性高的列上進(jìn)行查詢(xún),返回的數(shù)據(jù)就較少,比較適合索引查詢(xún)。相反,比如性別列上只有兩個(gè)值,可選擇行就很小,不適合索引查詢(xún)。性能優(yōu)化實(shí)踐-SGA設(shè)置參考物理內(nèi)存多大操作系統(tǒng)需要多大內(nèi)存--(200MB)數(shù)據(jù)庫(kù)使用文件系統(tǒng)還是裸設(shè)備
對(duì)于使用文件系統(tǒng),異步I/O使用操作系統(tǒng)緩存占:0.2-0.3倍物理內(nèi)存 裸設(shè)備沒(méi)有這樣的限制有多少并發(fā)用戶(hù)
關(guān)系到PGA的大?。∕TS下還有l(wèi)arge_pool_size),同時(shí)還與應(yīng)用類(lèi)型有關(guān)。OLTP傾向使用MTS;
OLAP使用獨(dú)立模式,同時(shí)還會(huì)有大量的排序操作的查詢(xún),都影響內(nèi)存的使用(sort_area_size)--100個(gè)用戶(hù)-200MB性能優(yōu)化實(shí)踐-SGA設(shè)置參考是什么樣的應(yīng)用:OLTP/OLAP計(jì)算公式:
OS使用內(nèi)存+SGA+并發(fā)執(zhí)行進(jìn)程數(shù)*(sort_area_size+hash_area_size+2M)<0.7*總物理內(nèi)存受32位操作系統(tǒng)尋址限制,SGA大小32位操作系統(tǒng)+32位數(shù)據(jù)庫(kù)--不能超過(guò)1.7GB64為操作系統(tǒng)+32位數(shù)據(jù)庫(kù)--不能超過(guò)3.7GB性能優(yōu)化實(shí)踐-SGA參數(shù)調(diào)整SGA內(nèi)參數(shù)設(shè)置Log_buffer--1-3MBlarge_pool_size--(非MTS)20-30MB主要用于保存并行查詢(xún)時(shí)候的一些信息java_pool_size--10-20MB(沒(méi)有使用JAVA);但如果使用則可能要更大〉300MBshared_pool_size--在一個(gè)充分使用綁定變量的比較大的系統(tǒng)中300MB,但如果系統(tǒng)使用了大量的存儲(chǔ)過(guò)程,函數(shù),包的系統(tǒng),可能要到500MB;性能優(yōu)化實(shí)踐-SGA參數(shù)調(diào)整data_buffer--在SGA中除了前述內(nèi)存,其它內(nèi)存都給它,為了減少?gòu)拇疟P(pán)中的讀取次數(shù),應(yīng)盡可能增大該內(nèi)存。
8i--db_block_buffers*db_block_size兩個(gè)參數(shù)來(lái)決定(再加上buffer_pool_keep和buffer_pool_recycle);
9i以后--(參數(shù)設(shè)置得越來(lái)越智能化) db_cache_size/db_block_buffers, db_keep_cache_size/buffer_pool_keep, db_recycle_cache_size/buffer_pool_recycle;
參數(shù)設(shè)置為實(shí)際大小,而不是塊數(shù)量; 增加db_nk_cache_size-為了支持同一個(gè)數(shù)據(jù)庫(kù)中使用不同的塊大?。ú煌谋砜臻g可以使用不同的塊大?。﹏=2,4,6,8,16...SGA_MAX_SIZE--若設(shè)置了該參數(shù),則在總和小于等于該大小之內(nèi),可以動(dòng)態(tài)調(diào)整數(shù)據(jù)緩沖區(qū)和共享池大小;性能優(yōu)化實(shí)踐-Lock_sga=true-AIXLock_sga=true
為了減少頁(yè)面對(duì)換,從而提高性能,最好能夠?qū)GA鎖定在物理內(nèi)存中.
如何實(shí)現(xiàn)AIX(AIX4.3.3以上): logonaixasroot cd/usr/samples/kernel ./vmtune看v_pingshm參數(shù)是否為1 ./vmtune-S1(否則改參數(shù)值)
改initSID.ora參數(shù)文件,增加lock_sga=true
重新啟動(dòng)數(shù)據(jù)庫(kù),即可.性能優(yōu)化實(shí)踐-Lock_sga=true–HP/UXLock_sga=true
為了減少頁(yè)面對(duì)換,從而提高性能,最好能夠?qū)GA鎖定在物理內(nèi)存中.
如何實(shí)現(xiàn)HPUNIX: logonHPasroot vi/etc/privgroup addline"dbaMLOCK" /etc/setprivgrp-f/etc/privgroup
修改initSID.ora參數(shù)文件,增加lock_sga=true
重新啟動(dòng)數(shù)據(jù)庫(kù),即可.性能優(yōu)化實(shí)踐-Lock_sga=true-SolarisLock_sga=true
為了減少頁(yè)面對(duì)換,從而提高性能,最好能夠?qū)GA鎖定在物理內(nèi)存中.
如何實(shí)現(xiàn)Solaris(Solaris2.6以上): 8i版本以上數(shù)據(jù)庫(kù)默認(rèn)使用隱藏參數(shù)use_ism=true,自動(dòng)鎖定SGA.如果設(shè)置lock_sga=true,當(dāng)用非root用戶(hù)啟動(dòng)數(shù)據(jù)庫(kù)時(shí)將報(bào)錯(cuò).性能優(yōu)化實(shí)踐-Lock_sga=true-WindowsLock_sga=true
為了減少頁(yè)面對(duì)換,從而提高性能,最好能夠?qū)GA鎖定在物理內(nèi)存中.
如何實(shí)現(xiàn)Windows:
不能設(shè)定lock_sga=true鎖定SGA.可以通過(guò)設(shè)置pre_page_sga=true使得數(shù)據(jù)庫(kù)啟動(dòng)時(shí)就把所有內(nèi)存頁(yè)面裝載.性能優(yōu)化實(shí)踐-內(nèi)存參數(shù)的調(diào)整如果出現(xiàn)性能問(wèn)題,首先判斷是否為內(nèi)存分配方面的問(wèn)題,可以由以下三個(gè)方面來(lái)判斷:
數(shù)據(jù)緩沖區(qū)命中率:
SQL>selectvaluefromv$sysstatwherename='physicalreads'; SQL>selectvaluefromv$sysstatwherename='physicalreadsdirect'; SQL>selectvaluefromv#sysstatwherename='physicalreadsdirect(lob)'; SQL>selectvaluefromv$sysstatwherename='consistentgets'; SQL>selectvaluefromv$sysstatwhereneme='dbblockgets';
命中率(R)計(jì)算: R=100-(physicalreads-X)/(consistentgets+dbblockgets-X)*100
其中: X=physicalreadsdirect+physicalreadsdirect(lob)
如果命中率<90%,可以考慮加大數(shù)據(jù)緩沖區(qū)大小性能優(yōu)化實(shí)踐-內(nèi)存參數(shù)的調(diào)整
共享池命中率:
SQL>selectsum(pinhits)/sum(pins)*100"hitradio"fromv$librarycache;
如果命中率低于95%,就可能要考慮調(diào)整應(yīng)用(例如:使用bindvariable)或增加內(nèi)存
性能優(yōu)化實(shí)踐-內(nèi)存參數(shù)的調(diào)整排序問(wèn)題的優(yōu)化:
SQL>selectname,valuefromv$sysstatwherenamelike'%sort%'; NAME VALUE
sorts(memory) 67935 sorts(disk) 1 sorts(rows) 7070
如果發(fā)現(xiàn)sorts(disk)/(sorts(memory)+sorts(disk))的比例過(guò)高,則意味參數(shù)sort_area_size過(guò)小.需要進(jìn)行排序的操作:創(chuàng)建索引;涉及到索引維護(hù)的并行插入orderby或者groupby(盡可能對(duì)索引字段排序)Distinctunion/intersect/minus
sort-mergejoinanalyze命令
性能優(yōu)化實(shí)踐-內(nèi)存參數(shù)的調(diào)整Log_buffer: SQL>selectname,valuefromv$sysstatwherenamein('redoentries','redobufferallocationretries'); NAME VALUE
redoentries 2325591 redobufferallocationretries 30
如果redobufferallocationretries/redoentries>1%,增大log_buffer性能優(yōu)化實(shí)踐-分區(qū)技術(shù)分區(qū)表:
根據(jù)實(shí)際經(jīng)驗(yàn),在一個(gè)大數(shù)據(jù)庫(kù)中,數(shù)據(jù)庫(kù)空間的絕大多數(shù)是被少量的表所占有。為了簡(jiǎn)化大型數(shù)據(jù)庫(kù)的管理,改善應(yīng)用的查詢(xún)性能,一般可以使用分區(qū)這種手段。所謂分區(qū)就是動(dòng)態(tài)地將表中的記錄分離到若干不同的表空間上,使數(shù)據(jù)在物理上被分割開(kāi)來(lái),便于維護(hù)、備份、恢復(fù)、事務(wù)及查詢(xún)性能。當(dāng)使用的時(shí)候可建立一個(gè)連接所有分區(qū)的視圖,使其在邏輯上仍以一個(gè)整體出現(xiàn)。分區(qū)索引:
當(dāng)分區(qū)中出現(xiàn)許多事務(wù)并且要保證所有分區(qū)中的數(shù)據(jù)記錄的惟一性時(shí)采用全局索引,在建立全局索引時(shí),Global子句允許指定索引的范圍值,這個(gè)范圍值可以不同于表分區(qū)的范圍值。只有建立局部索引才會(huì)使索引分區(qū)與表分區(qū)間建立起一一對(duì)應(yīng)關(guān)系。因此,在大多數(shù)情況下,應(yīng)該使用局部索引分區(qū)。若使用了此索引,分區(qū)就能夠很容易地將索引分區(qū)與表分區(qū)建立關(guān)聯(lián),局部索引比全局索引更易于管理。分區(qū)管理:
根據(jù)實(shí)際需要,還可以使用Altertable命令來(lái)增加、刪除、交換、移動(dòng)、修改、重命名、劃分、截短一個(gè)已存在分區(qū)的結(jié)構(gòu)。
性能優(yōu)化實(shí)踐-段的碎片整理當(dāng)生成一個(gè)數(shù)據(jù)庫(kù)對(duì)象時(shí)(一個(gè)表或一個(gè)索引),通過(guò)用戶(hù)缺省值或指定值來(lái)為它指定表空間。一個(gè)在表空間中生成的段,用于存儲(chǔ)對(duì)象的相關(guān)數(shù)據(jù)。在段被關(guān)閉、收縮、截?cái)嘀?,段所分配的空間將不被釋放。
一個(gè)段是由范圍組成,而范圍是由相鄰的Oracle塊組成。一旦存在的范圍不能再存儲(chǔ)新的數(shù)據(jù),這個(gè)段就會(huì)去獲得新的范圍,但并不要求這些范圍是彼此相鄰的。這樣的擴(kuò)展會(huì)一直繼續(xù)下去,直到表空間中的數(shù)據(jù)文件不能提供更多的自由空間,或者范圍數(shù)量已達(dá)到極限。因此,一個(gè)碎片太多的數(shù)據(jù)段,不僅會(huì)影響運(yùn)行,也會(huì)引發(fā)表空間中的空間管理問(wèn)題。所以,每個(gè)數(shù)據(jù)段只含有一個(gè)范圍是十分有益的。借助監(jiān)控系統(tǒng),可以通過(guò)檢查DBA_SEGMENTS數(shù)據(jù)字典視圖來(lái)了解哪些數(shù)據(jù)庫(kù)對(duì)象含有10個(gè)或更多范圍的段,確定其數(shù)據(jù)段碎片。若一個(gè)段的碎片過(guò)多,可用兩種方法解決:(1)用正確的存儲(chǔ)參數(shù)建立一個(gè)新表,將舊表中的數(shù)據(jù)插入到新表中,再刪除舊表;(2)利用Export/Import工具。性能優(yōu)化實(shí)踐-自由范圍的碎片整理表空間中的一個(gè)自由范圍是表空間中相連的自由(空間)塊的集合。當(dāng)一個(gè)段關(guān)閉時(shí),它的范圍將被釋放,并被標(biāo)記為自由范圍。然而,這些自由范圍再也不能與相鄰的自由范圍合并,它們之間的界線始終存在。但是:
當(dāng)表空間的缺省值pctincrease設(shè)置不是0時(shí),SMON后臺(tái)進(jìn)程會(huì)定期將這些相鄰的自由范圍合并。若pctincrease設(shè)置為0,那么相鄰自由范圍不會(huì)被數(shù)據(jù)庫(kù)自動(dòng)合并。但可以使用Altertable命令“coalesce”選項(xiàng),來(lái)強(qiáng)迫進(jìn)行相鄰自由范圍的合并。
不進(jìn)行自由范圍合并,在日后的空間請(qǐng)求中,會(huì)影響到表空間中的空間分配。當(dāng)需要一個(gè)足夠大的范圍時(shí),數(shù)據(jù)庫(kù)并不會(huì)合并相鄰的自由范圍,除非沒(méi)有其他選擇。這樣,當(dāng)表空間中前面較小的自由范圍已被使用時(shí),將使用表空間中后面部分最大的一個(gè)自由范圍。結(jié)果,會(huì)因?yàn)闆](méi)有足夠多的使用空間,從而導(dǎo)致表空間需求的矛盾。由于這樣的情況出現(xiàn),使數(shù)據(jù)庫(kù)的空間分配距理想越來(lái)越遠(yuǎn)。自由空間碎片常會(huì)出現(xiàn)在那些經(jīng)常關(guān)閉又重新生成的數(shù)據(jù)庫(kù)表和索引中。
在理想的Oracle表空間中,每一個(gè)數(shù)據(jù)庫(kù)對(duì)象存儲(chǔ)在一個(gè)單獨(dú)的范圍中,并且所有有效自由空間集中在一個(gè)巨大而連續(xù)的范圍中。這樣,在一個(gè)對(duì)象需要附加存儲(chǔ)空間時(shí),可以在增加獲取足夠大自由空間的可能性的同時(shí),最小化空間中的循環(huán)調(diào)用,提高自由空間使用率。性能優(yōu)化實(shí)踐-數(shù)據(jù)庫(kù)連接方案使用直接的OLEDB數(shù)據(jù)庫(kù)連接方式通過(guò)ADO可以使用兩種方式連接數(shù)據(jù)庫(kù),一種是傳統(tǒng)的ODBC方式,一種是OLEDB方式。ADO是建立在OLEDB技術(shù)上的,為了支持ODBC,必須建立相應(yīng)的OLEDB到ODBC的調(diào)用轉(zhuǎn)換,而使用直接的OLEDB方式則不需轉(zhuǎn)換,從而提高處理速度。使用ConnectionPool機(jī)制在數(shù)據(jù)庫(kù)處理中,資源花銷(xiāo)最大的是建立數(shù)據(jù)庫(kù)連接,而且用戶(hù)還會(huì)有一個(gè)較長(zhǎng)的連接等待時(shí)間。解決的辦法就是復(fù)用現(xiàn)有的Connection,也就是使用ConnectionPool對(duì)象機(jī)制。
ConnectionPool的原理是:IIS+ASP體系中維持了一個(gè)連接緩沖池,這樣,當(dāng)下一個(gè)用戶(hù)訪問(wèn)時(shí),直接在連接緩沖池中取得一個(gè)數(shù)據(jù)庫(kù)連接,而不需重新連接數(shù)據(jù)庫(kù),因此可以大大地提高系統(tǒng)的響應(yīng)速度。性能優(yōu)化實(shí)踐-數(shù)據(jù)庫(kù)性能檢查指導(dǎo)方案建議每個(gè)月檢查一次產(chǎn)品數(shù)據(jù)庫(kù)檢查方式均為以sysdba身份登錄數(shù)據(jù)庫(kù)執(zhí)行指定的腳本該指導(dǎo)方案適用于Oracle9i數(shù)據(jù)庫(kù)性能優(yōu)化實(shí)踐-內(nèi)存性能評(píng)估內(nèi)存性能指數(shù)(MPI,MemoryPerformanceIndex),MPI指數(shù)分類(lèi)所需等級(jí)最高分緩沖區(qū)命中率(BufferCache) >98%數(shù)據(jù)字典命中率(DictionaryCache) >98%庫(kù)緩存命中率(LibraryCache) >98%內(nèi)存中的排序(SortinMemory) >98%空閑的數(shù)據(jù)緩沖區(qū)比例 10-25%使用最多的前10個(gè)SQL占用的內(nèi)存 <5%是否已經(jīng)調(diào)整使用最多的前25個(gè)SQL 是是否嘗試固定高速緩存中經(jīng)常使用的對(duì)象 是10MPI指數(shù)總分 250
性能優(yōu)化實(shí)踐-內(nèi)存性能評(píng)估
緩沖區(qū)命中率
顯示了對(duì)于數(shù)據(jù)總讀取量而言,非磁盤(pán)讀?。ň彌_區(qū)命中)的百分比。當(dāng)然,十分高的命中率并不代表數(shù)據(jù)庫(kù)性能一定優(yōu)良,也有可能是糟糕的SQL引起了大量的緩沖區(qū)讀操作,只有在已經(jīng)調(diào)整過(guò)首要的查詢(xún)之后,這個(gè)命中率才能更好地反映數(shù)據(jù)庫(kù)性能。
檢查方法:select(1-(sum(decode(name,‘physicalreads’,value,0))/
(sum(decode(name,‘dbblockgets’,value,0))+
sum(decode(name,‘consistentgets’,value,0)))))*100
“HitRatio”
fromv$sysstat;評(píng)估準(zhǔn)則:等級(jí)分?jǐn)?shù):<90%=0 90-94%=10 95-98%=20 >98%=30
性能優(yōu)化實(shí)踐-內(nèi)存性能評(píng)估數(shù)據(jù)字典命中率顯示了對(duì)數(shù)據(jù)字典和其它對(duì)象的內(nèi)存讀操作的百分比。檢查方法:select(1-(sum(getmisses)/sum(gets)))*100“HitRatio”
fromv$rowcache;評(píng)估準(zhǔn)則:等級(jí)分?jǐn)?shù)<85%=086-92%=1092-98%=20>98%=30
性能優(yōu)化實(shí)踐-內(nèi)存性能評(píng)估庫(kù)緩存命中率顯示了對(duì)SQL和PL/SQL對(duì)象的內(nèi)存讀操作的百分比。同樣注意,很高的命中率并不總是反映數(shù)據(jù)庫(kù)性能優(yōu)秀。檢查方法:select
sum(pins)/(sum(pins)+sum(reloads))*100“HitRatio”
fromv$librarycache;
評(píng)估準(zhǔn)則:等級(jí)分?jǐn)?shù)
<90%=090-94%=1094-98%=20>98%=30
性能優(yōu)化實(shí)踐-內(nèi)存性能評(píng)估內(nèi)存中的排序根據(jù)初始化參數(shù)PGA_AGGREGATE_TARGET或者SORT_AREA_SIZE的值,用戶(hù)的排序操作可能在內(nèi)存中執(zhí)行,也可能在臨時(shí)表空間中執(zhí)行。這個(gè)檢查用以顯示在內(nèi)存中排序占總排序的百分比。檢查方法:selecta.value
“DiskSorts”,
b.value
“MemorySorts”,
round((100*b.value)/
decode((a.value+b.value),0,1,(a.value+b.value)),
2)“PctMemorySorts”
fromv$sysstata,v$sysstatb
wherea.name=‘sorts(disk)’
andb.name=‘sorts(memory)’;評(píng)估準(zhǔn)則:等級(jí)分?jǐn)?shù)
<90%=090-94%=1094-98%=20>98%=30
性能優(yōu)化實(shí)踐-內(nèi)存性能評(píng)估空閑的數(shù)據(jù)緩沖區(qū)比例空閑的記錄數(shù)除以X$BH表中的記錄總數(shù)(即所分配的數(shù)據(jù)塊緩沖區(qū)的總數(shù))得到的空閑緩沖區(qū)百分比。同樣注意,擁有眾多空閑緩沖區(qū)的數(shù)據(jù)庫(kù)不一定是最佳環(huán)境,因?yàn)榭赡苁蔷彌_區(qū)設(shè)置過(guò)大,浪費(fèi)內(nèi)存。
檢查方法:selectdecode(state,0,‘FREE’,1,
decode(lrba_seq,0,‘AVAILABLE’,‘BEINGUSED’),
3,‘BEINGUSED’,state)“BlockStatus”,count(*)
fromx$bh
group
bydecode(state,0,‘FREE’,1,
decode(lrba_seq,0,‘AVAILABLE’,‘BEINGUSED’),
3,‘BEINGUSED’,state);評(píng)估準(zhǔn)則:等級(jí)分?jǐn)?shù)
<5%=05-19%=3020-25%=20>25%=0
性能優(yōu)化實(shí)踐-內(nèi)存性能評(píng)估最浪費(fèi)內(nèi)存的前10個(gè)語(yǔ)句占全部?jī)?nèi)存讀取量的比例通常一個(gè)沒(méi)有優(yōu)化系統(tǒng)中,10個(gè)最常用的SQL語(yǔ)句的訪問(wèn)量會(huì)占到整個(gè)系統(tǒng)中內(nèi)存讀操作的50%以上。這些SQL是最需要進(jìn)行優(yōu)化的部分,也是優(yōu)化工作中優(yōu)先級(jí)很高的部分。
檢查方法:select
sum(pct_bufgets)
from(selectrank()over(order
bybuffer_getsdesc)asrank_bufgets,
to_char(100*ratio_to_report(buffer_gets)over(),‘999.99’)pct_bufgets
fromv$sqlarea)
whererank_bufgets<11;評(píng)估準(zhǔn)則:等級(jí)分?jǐn)?shù)
<5%=605-19%=5020-25%=30>25%=0
性能優(yōu)化實(shí)踐-內(nèi)存性能評(píng)估調(diào)整前25個(gè)最浪費(fèi)內(nèi)存的語(yǔ)句在沒(méi)有調(diào)整的情況下,絕大多數(shù)系統(tǒng)中,訪問(wèn)量占前25位的語(yǔ)句的內(nèi)存讀操作將占用整個(gè)系統(tǒng)所有內(nèi)存讀操作的75%,對(duì)這部分語(yǔ)句進(jìn)行調(diào)整是至關(guān)重要的。這部分腳本用于獲得訪問(wèn)量占前25位的SQL語(yǔ)句。檢查方法:set
serveroutput
on
size1000000
declare
top25number;
text1varchar2(4000);
xnumber;
len1number;
cursorc1is
selectbuffer_gets,substr(sql_text,1,4000)
fromv$sqlarea
order
bybuffer_getsdesc;
begin
dbms_output.put_line('Gets'||''||'Text');
dbms_output.put_line(''||''||'');
openc1;
foriin1..25loop
fetchc1
intotop25,text1;
dbms_output.put_line(rpad(to_char(top25),9)||''||
substr(text1,1,66));
len1:=length(text1);
x:=66;
whilelen1>x-1loop
dbms_output.put_line('"'||substr(text1,x,66));
x:=x+66;
end
loop;
end
loop;
end;
/評(píng)估準(zhǔn)則:本部分沒(méi)有評(píng)估準(zhǔn)則,需要開(kāi)發(fā)人員或者DBA去確認(rèn)在這25個(gè)SQL中屬于應(yīng)用系統(tǒng)的語(yǔ)句是否都已經(jīng)作過(guò)調(diào)優(yōu)。性能優(yōu)化實(shí)踐-內(nèi)存性能評(píng)估固定緩存對(duì)象嘗試在內(nèi)存中固定(pin)經(jīng)常使用的對(duì)象,包括表,存儲(chǔ)過(guò)程等。檢索需要在共享池中要求大于100K連續(xù)空間的對(duì)象:select*
fromv$db_object_cache
wheresharable_mem>100000
and
type
in(‘PACKAGE’,‘PACKAGEBODY’,‘PROCEDURE’,‘FUNCTION’);考察返回的結(jié)果,確認(rèn)是否需要pin到共享池中。返回結(jié)果中的KEPT字段:
如果是YES,那么表示該對(duì)象已經(jīng)固定在了共享池中,
為NO,則表示還沒(méi)有固定。性能優(yōu)化實(shí)踐-內(nèi)存性能評(píng)估固定緩存對(duì)象-續(xù)如果需要固定,使用下面的語(yǔ)句:execdbms_shared_pool.keep(‘SYS.STANDARD’);如果我們要固定表,那么可以在創(chuàng)建表的時(shí)候或者修改表屬性時(shí)使用CACHE關(guān)鍵字,將表放置到BufferCache的LRU列表的MRU端。通常我們需要對(duì)于較小的但是頻繁使用的表進(jìn)行這種操作:
altertabletable_namecache;我們也可以將需要頻繁使用的表放置到另外一個(gè)獨(dú)立的BufferCache中,比如KEEP池。這種操作可以使這些表的數(shù)據(jù)不至于很快被清除出DefaultBufferCache:
altertabletable_namestorage(bufferpoolkeep);評(píng)估準(zhǔn)則:本部分沒(méi)有評(píng)估準(zhǔn)則,需要開(kāi)發(fā)人員或者DBA在系統(tǒng)分析以后謹(jǐn)慎執(zhí)行。性能優(yōu)化實(shí)踐-存儲(chǔ)性能評(píng)估概述:在存儲(chǔ)性能評(píng)估的時(shí)候,我們使用磁盤(pán)性能指數(shù)(DPI,DiskPerformanceIndex),下表列出了DPI中的各項(xiàng)指數(shù),這個(gè)評(píng)分系統(tǒng)并不意味著對(duì)磁盤(pán)的使用和分配的全方位評(píng)估,而只是代表一個(gè)晴雨表,反映當(dāng)前磁盤(pán)的使用和分配上是否存在需要改進(jìn)或注意的地方。
條目 需要等級(jí) 最高分調(diào)整表和索引
是
30表的行連接問(wèn)題 無(wú) 30分隔離關(guān)鍵的oracle文檔 是 30回滾段的平衡 30臨時(shí)段的平衡 30使用最多的前10個(gè)sql的磁盤(pán)使用率 <5% 60是否已調(diào)整使用磁盤(pán)最多的前25個(gè)sql 是 40 DPI指數(shù)總分
250數(shù)據(jù)庫(kù)性能檢查-存儲(chǔ)性能評(píng)估調(diào)整表和索引
由于表和索引的數(shù)據(jù)塊通常是被同時(shí)讀取的,所以應(yīng)該盡量將表和其相關(guān)聯(lián)的索引放置在不同的磁盤(pán)上,以便減少文檔的I/O沖突。檢查方法:
selecti.index_name,t.table_name,t.tablespace_name
fromuser_tablest,user_indexesi
wheret.table_name=i.table_name
andt.tablespace_name=i.tablespace_name;
返回結(jié)果是創(chuàng)建在相同表空間中的表和相關(guān)聯(lián)的索引。 建議創(chuàng)建新的表空間用于專(zhuān)門(mén)存放索引,并將當(dāng)前的索引rebuild到新創(chuàng)建的表空間中:
alterindexidx_namerebuildtablespacets_name;
評(píng)估準(zhǔn)則:
表和索引放在同一磁盤(pán)上=0
存儲(chǔ)使用了磁盤(pán)陣列,沒(méi)有進(jìn)一步調(diào)整=20
存儲(chǔ)使用了磁盤(pán)陣列,對(duì)于raid類(lèi)型已作過(guò)調(diào)整=30
表和索引已規(guī)劃在不同磁盤(pán)上30數(shù)據(jù)庫(kù)性能檢查-存儲(chǔ)性能評(píng)估表的行鏈接問(wèn)題
當(dāng)更新一張表,而數(shù)據(jù)塊中又沒(méi)有足夠的剩余空間來(lái)容納所作的修改時(shí),就會(huì)發(fā)生“行鏈接”現(xiàn)象,該記錄被鏈接到另外一個(gè)有足夠空間的數(shù)據(jù)塊中,也就是一條記錄跨越了多個(gè)數(shù)據(jù)塊,這樣在讀取該記錄的時(shí)候就會(huì)消耗更多的i/o,當(dāng)數(shù)據(jù)庫(kù)中有大量的“行鏈接”現(xiàn)象存在時(shí),數(shù)據(jù)庫(kù)的整體性能就會(huì)下降。檢查方法:
sqlplus/nolog
co
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 受資助學(xué)生典型事跡材料范文(14篇)
- 《天體物理學(xué)時(shí)間》課件
- 文物數(shù)字化與5G技術(shù)應(yīng)用-洞察分析
- 微笑線與年齡相關(guān)性-洞察分析
- 栓子催化技術(shù)進(jìn)展-洞察分析
- 勤儉節(jié)約先進(jìn)事跡材料(范文8篇)
- 網(wǎng)絡(luò)拓?fù)溲莼治?洞察分析
- 消費(fèi)者價(jià)值共創(chuàng)研究-洞察分析
- 營(yíng)銷(xiāo)組合策略在批發(fā)零售中的應(yīng)用-洞察分析
- 醫(yī)療保險(xiǎn)個(gè)人工作總結(jié)(5篇)
- ppt素材――小圖標(biāo) 可直接使用
- 穿越220kV線路施工方案
- 2011辛卯年風(fēng)水布局概述
- 養(yǎng)殖戶(hù)糞污污染情況整改報(bào)告2篇
- Q-FT B039-2006汽車(chē)產(chǎn)品油漆涂層技術(shù)條件
- 截流驗(yàn)收施工管理工作報(bào)告
- 機(jī)械工程測(cè)試與控制技術(shù)項(xiàng)目設(shè)計(jì)
- 干式變壓器檢修維護(hù)手冊(cè).
- 環(huán)境化學(xué)致癌物
- PWM直流脈寬調(diào)速系統(tǒng)建模與仿真
- 帝納波利點(diǎn)位交易法.doc
評(píng)論
0/150
提交評(píng)論