Oracle 數(shù)據(jù)庫優(yōu)化實(shí)戰(zhàn)心得總結(jié)
更新時間:2013年06月08日 10:51:11 作者:
優(yōu)化sql語句、優(yōu)化io、表設(shè)計(jì)優(yōu)化、充分利用系統(tǒng)cpu資源、優(yōu)化數(shù)據(jù)庫連接、充分利用數(shù)據(jù)的后臺處理方案減少網(wǎng)絡(luò)流量,實(shí)施系統(tǒng)資源管理分配計(jì)劃等等,感興趣的朋友可以參考下哈
1.優(yōu)化應(yīng)用程序和業(yè)務(wù)邏輯,這個是最重要的。
2.數(shù)據(jù)庫設(shè)計(jì)階段范式和反范式的靈活應(yīng)用。一般情況下,對于頻繁訪問但是不頻繁修改的數(shù)據(jù),內(nèi)部設(shè)計(jì)應(yīng)當(dāng)物理不規(guī)范化;對于頻繁修改但并不頻繁訪問的數(shù)據(jù),內(nèi)部設(shè)計(jì)應(yīng)當(dāng)物理規(guī)范化。
3.充分利用內(nèi)存,優(yōu)化sga、pga等(11g已經(jīng)實(shí)現(xiàn)了sga+pga自動化,但有的時候仍然需要手動進(jìn)行調(diào)整),適當(dāng)?shù)膶⑿”韐eep到cache中。
4.優(yōu)化sql語句
1)減少對數(shù)據(jù)庫的查詢次數(shù),即減少對系統(tǒng)資源的請求,使用快照和顯形圖等分布式數(shù)據(jù)庫對象可以減少對數(shù)據(jù)庫的查詢次數(shù)。
2)盡量使用相同的或非常類似的SQL語句進(jìn)行查詢,這樣不僅充分利用SQL共享池中的已經(jīng)分析的語法樹,要查詢的數(shù)據(jù)在SGA中命中的可能性也會大大增加。
3)限制動態(tài)SQL的使用,雖然動態(tài)SQL很好用,但是即使在SQL共享池中有一個完全相同的查詢值,動態(tài)SQL也會重新進(jìn)行語法分析。
4)避免不帶任何條件的SQL語句的執(zhí)行。沒有任何條件的SQL語句在執(zhí)行時,通常要進(jìn)行FTS,數(shù)據(jù)庫先定位一個數(shù)據(jù)塊,然后按順序依次查找其它數(shù)據(jù),對于大型表這將 是一個漫長的過程。
5)如果對有些表中的數(shù)據(jù)有約束,最好在建表的SQL語句用描述完整性來實(shí)現(xiàn),而不是用SQL程序中實(shí)現(xiàn)。
6)可以通過取消自動提交模式,將SQL語句匯集一組執(zhí)行后集中提交,程序還可以通過顯式地用COMMIT和ROLLBACL進(jìn)行提交和回滾該事務(wù)。
7)檢索大量數(shù)據(jù)時費(fèi)時很長,設(shè)置行預(yù)取數(shù)則能改善系統(tǒng)的工作表現(xiàn),設(shè)置一個最大值,當(dāng)SQL語句返回行超過該值,數(shù)值庫暫時停止執(zhí)行,除非用戶發(fā)出新的指令,開始組織并顯示數(shù)據(jù),而不是讓用戶繼續(xù)等待。
5.優(yōu)化io,將不同的數(shù)據(jù)文件、控制文件、日志文件放在不同的磁盤,表和索引放在不同的表空間,設(shè)置合適的block大小,設(shè)置異步io等。
6.適當(dāng)建立只讀表空間,減少數(shù)據(jù)塊頭的更新和數(shù)據(jù)庫故障的發(fā)生。
7.表設(shè)計(jì)優(yōu)化
1)分區(qū)
2)壓縮
3)建立合適的索引
4)設(shè)置合適的pctfree,減少行連接和行遷移
5)設(shè)置合適的storage,控制表碎片
6)其他等
8.充分利用系統(tǒng)cpu資源,使用Parallel Query Option(PQO,并行查詢選擇)方式進(jìn)行數(shù)據(jù)查詢,使用PQO方式不僅可以在多個CPU間分配SQL語句的請求處理,當(dāng)所查詢的數(shù)據(jù)處于不同的磁盤時,一個個獨(dú)立的進(jìn)程可以同時進(jìn)行數(shù)據(jù)讀取。
9.優(yōu)化數(shù)據(jù)庫連接
1)使用直接的OLE DB數(shù)據(jù)庫連接方式。
通過ADO可以使用兩種方式連接數(shù)據(jù)庫,一種是傳統(tǒng)的ODBC方式,一種是OLE DB方式。ADO是建立在OLE DB技術(shù)上的,為了支持ODBC,必須建立相應(yīng)的OLE DB到ODBC的調(diào)用轉(zhuǎn)換,而使用直接的OLE DB方式則不需轉(zhuǎn)換,從而提高處理速度。
2)使用Connection Pool機(jī)制
在數(shù)據(jù)庫處理中,資源花銷最大的是建立數(shù)據(jù)庫連接,而且用戶還會有一個較長的連接等待時間。解決的辦法就是復(fù)用現(xiàn)有的Connection,也就是使用Connection Pool對象機(jī)制。
Connection Pool的原理是:IIS+ASP體系中維持了一個連接緩沖池,這樣,當(dāng)下一個用戶訪問時,直接在連接緩沖池中取得一個數(shù)據(jù)庫連接,而不需重新連接數(shù)據(jù)庫,因此可以大大地提高系統(tǒng)的響應(yīng)速度。
10.充分利用數(shù)據(jù)的后臺處理方案減少網(wǎng)絡(luò)流量
1)合理創(chuàng)建臨時表或視圖
所謂創(chuàng)建臨時表或視圖,就是根據(jù)需要在數(shù)據(jù)庫基礎(chǔ)上創(chuàng)建新表或視圖,對于多表關(guān)聯(lián)后再查詢信息的可建新表,對于單表查詢的可創(chuàng)建視圖,這樣可充分利用數(shù)據(jù)庫的容量大、可擴(kuò)充性強(qiáng)等特點(diǎn),所有條件的判斷、數(shù)值計(jì)算統(tǒng)計(jì)均可在數(shù)據(jù)庫服務(wù)器后臺統(tǒng)一處理后追加到臨時表中,形成數(shù)據(jù)結(jié)果的過程可用數(shù)據(jù)庫的過程或函數(shù)來實(shí)現(xiàn)。
2)數(shù)據(jù)庫打包技術(shù)的充分利用
利用數(shù)據(jù)庫描述語言編寫數(shù)據(jù)庫的過程或函數(shù),然后把過程或函數(shù)打成包在數(shù)據(jù)庫后臺統(tǒng)一運(yùn)行包即可。
3)數(shù)據(jù)復(fù)制、快照、視圖,遠(yuǎn)程過程調(diào)用技術(shù)的運(yùn)用
數(shù)據(jù)復(fù)制,即將數(shù)據(jù)一次復(fù)制到本地,這樣以后的查詢就使用本地?cái)?shù)據(jù),但是只適合那些變化不大的數(shù)據(jù)。使用快照也可以在分布式數(shù)據(jù)庫之間動態(tài)復(fù)制數(shù)據(jù),定義快照的自動刷新時間或手工刷新,以保證數(shù)據(jù)的引用參照完整性。調(diào)用遠(yuǎn)程過程也會大大減少因頻繁的SQL語句調(diào)用而帶來的網(wǎng)絡(luò)擁擠。
11.實(shí)施系統(tǒng)資源管理分配計(jì)劃
ORACLE提供了Database Resource Manager(DRM,數(shù)據(jù)庫資源管理器)來控制用戶的資源分配,DBA可以用它分配用戶類和作業(yè)類的系統(tǒng)資源百分比。在一個OLDP系統(tǒng)中,可給聯(lián)機(jī)用戶分配75%的CPU資源,剩下的25%留給批用戶。另外,還可以進(jìn)行CPU的多級分配。除了進(jìn)行CPU資源分配外,DRM還可以對資源用戶組執(zhí)行并行操作的限制。
2.數(shù)據(jù)庫設(shè)計(jì)階段范式和反范式的靈活應(yīng)用。一般情況下,對于頻繁訪問但是不頻繁修改的數(shù)據(jù),內(nèi)部設(shè)計(jì)應(yīng)當(dāng)物理不規(guī)范化;對于頻繁修改但并不頻繁訪問的數(shù)據(jù),內(nèi)部設(shè)計(jì)應(yīng)當(dāng)物理規(guī)范化。
3.充分利用內(nèi)存,優(yōu)化sga、pga等(11g已經(jīng)實(shí)現(xiàn)了sga+pga自動化,但有的時候仍然需要手動進(jìn)行調(diào)整),適當(dāng)?shù)膶⑿”韐eep到cache中。
4.優(yōu)化sql語句
1)減少對數(shù)據(jù)庫的查詢次數(shù),即減少對系統(tǒng)資源的請求,使用快照和顯形圖等分布式數(shù)據(jù)庫對象可以減少對數(shù)據(jù)庫的查詢次數(shù)。
2)盡量使用相同的或非常類似的SQL語句進(jìn)行查詢,這樣不僅充分利用SQL共享池中的已經(jīng)分析的語法樹,要查詢的數(shù)據(jù)在SGA中命中的可能性也會大大增加。
3)限制動態(tài)SQL的使用,雖然動態(tài)SQL很好用,但是即使在SQL共享池中有一個完全相同的查詢值,動態(tài)SQL也會重新進(jìn)行語法分析。
4)避免不帶任何條件的SQL語句的執(zhí)行。沒有任何條件的SQL語句在執(zhí)行時,通常要進(jìn)行FTS,數(shù)據(jù)庫先定位一個數(shù)據(jù)塊,然后按順序依次查找其它數(shù)據(jù),對于大型表這將 是一個漫長的過程。
5)如果對有些表中的數(shù)據(jù)有約束,最好在建表的SQL語句用描述完整性來實(shí)現(xiàn),而不是用SQL程序中實(shí)現(xiàn)。
6)可以通過取消自動提交模式,將SQL語句匯集一組執(zhí)行后集中提交,程序還可以通過顯式地用COMMIT和ROLLBACL進(jìn)行提交和回滾該事務(wù)。
7)檢索大量數(shù)據(jù)時費(fèi)時很長,設(shè)置行預(yù)取數(shù)則能改善系統(tǒng)的工作表現(xiàn),設(shè)置一個最大值,當(dāng)SQL語句返回行超過該值,數(shù)值庫暫時停止執(zhí)行,除非用戶發(fā)出新的指令,開始組織并顯示數(shù)據(jù),而不是讓用戶繼續(xù)等待。
5.優(yōu)化io,將不同的數(shù)據(jù)文件、控制文件、日志文件放在不同的磁盤,表和索引放在不同的表空間,設(shè)置合適的block大小,設(shè)置異步io等。
6.適當(dāng)建立只讀表空間,減少數(shù)據(jù)塊頭的更新和數(shù)據(jù)庫故障的發(fā)生。
7.表設(shè)計(jì)優(yōu)化
1)分區(qū)
2)壓縮
3)建立合適的索引
4)設(shè)置合適的pctfree,減少行連接和行遷移
5)設(shè)置合適的storage,控制表碎片
6)其他等
8.充分利用系統(tǒng)cpu資源,使用Parallel Query Option(PQO,并行查詢選擇)方式進(jìn)行數(shù)據(jù)查詢,使用PQO方式不僅可以在多個CPU間分配SQL語句的請求處理,當(dāng)所查詢的數(shù)據(jù)處于不同的磁盤時,一個個獨(dú)立的進(jìn)程可以同時進(jìn)行數(shù)據(jù)讀取。
9.優(yōu)化數(shù)據(jù)庫連接
1)使用直接的OLE DB數(shù)據(jù)庫連接方式。
通過ADO可以使用兩種方式連接數(shù)據(jù)庫,一種是傳統(tǒng)的ODBC方式,一種是OLE DB方式。ADO是建立在OLE DB技術(shù)上的,為了支持ODBC,必須建立相應(yīng)的OLE DB到ODBC的調(diào)用轉(zhuǎn)換,而使用直接的OLE DB方式則不需轉(zhuǎn)換,從而提高處理速度。
2)使用Connection Pool機(jī)制
在數(shù)據(jù)庫處理中,資源花銷最大的是建立數(shù)據(jù)庫連接,而且用戶還會有一個較長的連接等待時間。解決的辦法就是復(fù)用現(xiàn)有的Connection,也就是使用Connection Pool對象機(jī)制。
Connection Pool的原理是:IIS+ASP體系中維持了一個連接緩沖池,這樣,當(dāng)下一個用戶訪問時,直接在連接緩沖池中取得一個數(shù)據(jù)庫連接,而不需重新連接數(shù)據(jù)庫,因此可以大大地提高系統(tǒng)的響應(yīng)速度。
10.充分利用數(shù)據(jù)的后臺處理方案減少網(wǎng)絡(luò)流量
1)合理創(chuàng)建臨時表或視圖
所謂創(chuàng)建臨時表或視圖,就是根據(jù)需要在數(shù)據(jù)庫基礎(chǔ)上創(chuàng)建新表或視圖,對于多表關(guān)聯(lián)后再查詢信息的可建新表,對于單表查詢的可創(chuàng)建視圖,這樣可充分利用數(shù)據(jù)庫的容量大、可擴(kuò)充性強(qiáng)等特點(diǎn),所有條件的判斷、數(shù)值計(jì)算統(tǒng)計(jì)均可在數(shù)據(jù)庫服務(wù)器后臺統(tǒng)一處理后追加到臨時表中,形成數(shù)據(jù)結(jié)果的過程可用數(shù)據(jù)庫的過程或函數(shù)來實(shí)現(xiàn)。
2)數(shù)據(jù)庫打包技術(shù)的充分利用
利用數(shù)據(jù)庫描述語言編寫數(shù)據(jù)庫的過程或函數(shù),然后把過程或函數(shù)打成包在數(shù)據(jù)庫后臺統(tǒng)一運(yùn)行包即可。
3)數(shù)據(jù)復(fù)制、快照、視圖,遠(yuǎn)程過程調(diào)用技術(shù)的運(yùn)用
數(shù)據(jù)復(fù)制,即將數(shù)據(jù)一次復(fù)制到本地,這樣以后的查詢就使用本地?cái)?shù)據(jù),但是只適合那些變化不大的數(shù)據(jù)。使用快照也可以在分布式數(shù)據(jù)庫之間動態(tài)復(fù)制數(shù)據(jù),定義快照的自動刷新時間或手工刷新,以保證數(shù)據(jù)的引用參照完整性。調(diào)用遠(yuǎn)程過程也會大大減少因頻繁的SQL語句調(diào)用而帶來的網(wǎng)絡(luò)擁擠。
11.實(shí)施系統(tǒng)資源管理分配計(jì)劃
ORACLE提供了Database Resource Manager(DRM,數(shù)據(jù)庫資源管理器)來控制用戶的資源分配,DBA可以用它分配用戶類和作業(yè)類的系統(tǒng)資源百分比。在一個OLDP系統(tǒng)中,可給聯(lián)機(jī)用戶分配75%的CPU資源,剩下的25%留給批用戶。另外,還可以進(jìn)行CPU的多級分配。除了進(jìn)行CPU資源分配外,DRM還可以對資源用戶組執(zhí)行并行操作的限制。
相關(guān)文章
oracle導(dǎo)出sql語句的結(jié)果集和保存執(zhí)行的sql語句(深入分析)
本篇文章是對oracle導(dǎo)出sql語句的結(jié)果集與保存執(zhí)行的sql語句進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-05-05Oracle去重4種實(shí)現(xiàn)方式小結(jié)
這篇文章主要給大家介紹了關(guān)于Oracle去重4種實(shí)現(xiàn)方式的相關(guān)資料,在Oracle數(shù)據(jù)庫中有時候我們需要查詢多個列并去除重復(fù)值,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下2023-09-09常見數(shù)據(jù)庫系統(tǒng)比較 Oracle數(shù)據(jù)庫
常見數(shù)據(jù)庫系統(tǒng)比較 Oracle數(shù)據(jù)庫...2007-03-03Windows 64位下裝安裝Oracle 11g,PLSQL Developer的配置問題,數(shù)據(jù)庫顯示空白的完美解決方
安裝pl sql 后,若下圖的數(shù)據(jù)庫處為空。則需要安裝32位的客戶端,說明pl sql不支持64位客戶端連接。下面通過本文給大家介紹Windows 64位下裝Oracle 11g,PLSQL Developer的配置問題,數(shù)據(jù)庫處顯示為空白的解決方案,需要的朋友可以參考下2016-11-11解決Oracle數(shù)據(jù)庫歸檔日志占滿磁盤空間問題
這篇文章主要介紹了解決Oracle數(shù)據(jù)庫歸檔日志占滿磁盤空間問題,文中給大家提到了常用命令及實(shí)現(xiàn)代碼,需要的朋友可以參考下2018-08-08oracle表空間中空表統(tǒng)計(jì)方法示例介紹
這篇文章主要介紹了oracle表空間中空表統(tǒng)計(jì)方法,需要的朋友可以參考下2014-04-04