Oracle研發技巧

2021-12-30 12:52:03 字數 4095 閱讀 3579

oracle研發技巧

記錄下總結的oracle研發技巧,誰有好的意見請留言補充

oracle研發技巧  www.2cto.com  

1. oracle初級技巧

1.1 sql高效能優化

1.2 表設計技巧  

2. oracle中高階技巧

2.1 海量表設計技巧

2.2 dba角度設計架構

1. oracle初級技巧

1.1 sql高效能優化  www.2cto.com  

最優化資料讀取涉及的範圍非常廣,不僅涉及的物理方面的io,儲存型別,硬體,網路環境等,而且涉及邏輯方面的dbms環境設定,sql型別,執行計畫,索引型別,組合索引列的順序等,我們這裡只從程式設計師的角度出發,對最優化資料讀取方面討論;db的環境就是sql地盤,如何高效的利用db環境跑出高效的sql

減少單個sql消耗資源

減少sql執行次數

減少單個sql消耗資源

要降低sql消耗資源,就要需要sql在oracle環境是如何執行的,執行過程是什麼?

1. 建立游標

2. 分析語句:做語法分析,檢查sql書寫、驗證定義和許可權等,選擇最佳執行計畫並裝入sql共享區;在分析語句期間,oracle通過繫結變數實現共享sql,

來減少sql解析。所以繫結變數是優化點

3. 描述查詢結果集決定查詢結果的特徵:如資料型別、欄位名字、長度

4. 定義查詢輸出資料指定與查詢出的列值對應的接收變數的位置、大小和資料型別,如果必要,oracle預設轉換資料型別

5. 繫結變數

6. 並行執行語句在建立索引、用子查詢建立表、在分割槽表上的操作,可以執行並行操作,通過消耗更多的資源快速執行sql

7. 執行語句sql語句已經做好執行的準備,開始執行sql,這個過程可以批處理來優化。

8. 取查詢出來的行返回查詢的結果集,通過批處理優化

9. 關閉游標

從上面的分析sql執行過程可以知道,我們能通過如下方式減少單個sql資源消耗

繫結變數實現共享sql

最優執行計畫選擇

最優的執行計畫決定了表的連線方式,資料訪問路徑。因資料的讀取方式分為連續掃瞄方式、隨機掃瞄方式,而根據磁碟的物理特性,隨機掃瞄非常影響資料的讀取效能,我們優化sql,也就是把隨機掃瞄轉向連續範圍掃瞄,區域性範圍掃瞄就是在連續範圍掃瞄裡,oracle可以智慧型的只讀取部分資料,而不是讀取全部資料。所以無論要求的資料範圍有多大,都能確保較快的執行速度。

減少排序操作,盡量使用索引替代排序

建立合適的復合索引,盡可能限制查詢結果集的大小

減少sql執行次數

通過繫結變數減少sql分析,通過優化業務邏輯減少sql的執行次數

1.2 表設計技巧    

在我們設計的db系統裡,我們要清楚自己的系統裡都有什麼樣的表,基本優化思路是什麼,這裡我們把錶的基本分類如下:

1).資料量較少的表

2).參考作用的大中型表

3).管理業務行為的大中型表

4).儲存用的大型表

1). 資料量較少的表

定義:乙個io就可以把全表讀到記憶體中,既儲存表的block數量小於db_file_multiblock_read_count,這種

表一般為字典表的,很少更新,所以可以考慮用iot表、據簇表(父子表)或堆表

特點:一般放在巢狀迴圈的內迴圈,需要被多次執行

優化方式:pctfree,cache,索引,單獨分庫

2). 其參考作用的大中型表

定義:主要用於儲存業務的行為、主體、目的等物件的資料,例如使用者資訊表。

特點:儲存的資料很大,以隨機讀取的方式、小範圍資料掃瞄為主,一般以主鍵讀取或表連線,放在內迴圈

中;很少資料插入,以select為主;需要重點優化這個表,一般會建立大量的索引

優化方法:建立合適索引,分割槽,聚簇

3). 管理業務行為的大中型表

定義:儲存業務的交易活動資料,隨著時間推移,數量不斷變大

特點:因為分析的維度非常豐富,所以讀取型別多種多樣,資料量非常大,而且增加很快,通常位於迴圈

的外側;有時無法通過特定的列減少資料範圍,所以常用組合索引。

優化方法:建立合適索引,分割槽,聚簇,資料分層

4). 儲存用的大型表

定義:用來儲存和管理日誌性的資料

特點:資料量巨大而且不斷增加,插入代價較大

優化方式:pctfree,分割槽,單獨分庫

2. oracle中高階技巧

2.1 海量表設計技巧

這個「海量「有兩層意思,乙個是資料量大,乙個是執行頻率高。對於像我們這種oltp系統,其實每個sql感興趣的資料都非常少,只要我們能做到每個sql都處理自己感興趣的資料、每個表儲存新鮮資料即可,這就需要從表的設計和sql書寫來保證。像我們的trader後台有的sql感興趣的資料可能很多,如果可以的話,可以考慮分庫,避免這種個別業務影響整體系統的穩定。

資料的海量從如下幾個方面解決:

分割槽表:分割槽表的拆分優點是對應用透明

多維度拆分:可以從時間維度,功能維度等把大表拆分多個表,有相應的路由規則對應,如果拆

表後,單台伺服器還是無法滿足,那就考慮分庫儲存

中間表:對資料量大的表又需要多表關聯,如果業務允許,可建立中間表,直接提供結果

高執行頻率從如下幾個方面解決:

資料cache:把錶的資料cache在快取層並持久化,減少對資料庫的讀寫

簡化/優化sql:減少單個sql的資源消耗,從而減少sql響應時間

分庫:採用分庫的方式來分擔壓力

2.2 dba角度設計架構

系統最容易出現瓶頸的地方就是db,那在設計之初就考慮好應對方案,要比已經發現db瓶頸,再去解決所需要的成本低很多,有時因無法解決db瓶頸,不得已要重新開發全部系統。dba在實踐中總結經驗,為避免db出現瓶頸,提出站在dba角度補充系統架構設計,在我們面對巨大的訪問量和資料量時,我們系統要做到化繁為簡,化大為小.

系統設計規模

明確設計的系統支援的業務規模,系統支援的容量,系統的是否需要擴充套件

系統中最寶貴的資源是:cpu,memory,io,network。io又是重中之重,是塊短板,極易出現瓶

頸,在們設計系統要以其基準,比如設計oltp系統,參考下面公式

pv/(24*3600)*dpv*lvdpv*x*(1-hit)*rwrate=r_iops

pv/(24*3600)*dpv*lvdpv*x*(1-hit)*rwrate=w_iops

說明:pv: pv/天

dpv: 動態pv率,每天pv中動態pv所佔比例

lvdpv:每個動態pv所產生的邏輯讀

hit:cache命中率

rwdate:系統讀寫比例

比如我們設計支援1000萬pv的系統,需要多少io,而這些io需要多少塊磁碟支撐;資料儲存容量如何規劃

常見硬碟iops參考值:

2,5" 10.000 rpm  sas 113  iops

2,5" 15.000 rpm  sas 156  iops

3,5" 15.000 rpm  sas 146  iops

2,5" 5.400 rpm sata 71 iops

3,5" 7.200 rpm sata 65 iops

3,5" 15.000 rpm fc 150 iops

監控做好效能和故障的高效精確監控,可以提前規避大部分問題

預案準備好突發情況處理的預案,避免手忙腳亂、誤操作

服務降級保護

在某模組突然故障,避免級聯影響或保證核心業務正常,通過降低模組耦合性或設定模組起停開關實現

預防資料預熱雪崩

在設計db架構時,應考慮採用何種方式預防資料預熱引起效能抖動甚至訪問雪崩,比如有:前段高性

能kv庫、app對db的漏斗式訪問

db削峰設計

在訪問量突增時,異常峰值會對系統效能極大影響,甚至拖垮系統,我們可以通過削峰設計規避這

個問題,使系統在效能最佳狀態處理請求,例如:通過佇列設計最大接受請求,平緩處理請求通過

資料庫session控制資料庫最大處理併發量,使資料庫工作在最佳效能狀態

高效利用nosql庫

nosql資料庫在應對kv環境時效率非常高,為高效利用nosql庫,降低rdbms儲存db的訪問,可以

採用rdbms主動推送變化資料到nosql庫,應用主讀nosql,超時讀取nosql後端儲存rdbms  

---end-----

Oracle研發技巧

oracle研發技巧 1.oracle初級技巧 1.1 sql高效能優化 1.2 表設計技巧 2.oracle中高階技巧 2.1 海量表設計技巧 2.2 dba角度設計架構 1.oracle初級技巧 1.1 sql高效能優化 最優化資料讀取涉及的範圍非常廣,不僅涉及的物理方面的io,儲存型別,硬體,...

Oracle 應用技巧

觸發器 select?trigger name,trigger type,table owner,table name,status?from?user triggers 快照 select?owner,name,master,table name,last refresh,next?from?us...

Oracle 常用技巧

啟動 關閉 在服務管理器中啟動 oracleservice 代表例項名 如 oracleserviceoradb10g 在服務管理器中啟動 oracleoradb10g home1tnslistener 使用者管理 解鎖使用者 alter user testuser account unlock 鎖...