【原創】當一個有效能問題的資料庫擺在你的面前,作為責任人,你的處理思路是什麼?
元芳曰:這種情況基本都成為了DBA的家常便飯,經常要去處理使用者提交來的效能問題或者是工程人員提交上來的AWR報告,一般遇到這種情況,解決的方法有很多。
OLTP
(1)先要弄清楚資料庫的型別是什麼 OLTP 線上事務處理 or OLAP 線上分析系統,因為不同的資料庫型別選擇最佳化的方法也不同。例如 OLTP 強調系統的記憶體命中率,記憶體的效率決定資料庫效率。
(2)如果使用者的併發數很大可擴大記憶體的容量快取更多的資料,還可以調整data buffer cache、shared pool、java pool、large pool的大小及PGA大小包括sort區hash區等。
(3)如果使用者的線上請求數較多,可以嘗試著進行SQL的變數繫結,緩解SQL的硬解析,當遇到成千上萬的查詢操作時,能夠不經過解析過程直接使用快取的執行計劃,那效率可以提高n倍。因為硬解析會做2個分析。第一 語法分析:檢查程式碼的語法是否正確。第二 語義分析:檢查程式碼執行的物件是否存在及對執行物件的許可權是否有。解析過程十分的耗費CPU資源。
(4)資料塊的爭用,是因為資料分配的不均勻造成的,可以使用hash演算法平均打散到各個磁碟上來減少熱塊的產生
(5)還有很多系統效能間接的反應為資料庫效能,例如 網路的延遲 主機的應用程式較多 沒有采用中介軟體策略構建預處理緩衝池
OLAP
(6)如果是OLAP 線上分析系統的話,當一個使用者找你來說查詢一張報表很慢,你可以透過使用者會話來找到查詢的SQL語句,檢查這條語句邏輯上效率如何,可以使用Hint方式來改變sql的執行計劃,檢查資料的訪問方式,是走全表掃描還是走索引效率最高,調整SQL的執行計劃,選擇合適的索引
(7)因為SQL大多數就是集合的數學運算操作,SQL表的關聯方式是不是最最佳化,哪種join最適合,這都是要考慮的範圍
(8)當你手工測試完後,對錶進行統計分析,看看最佳化器和你選的執行計劃是不是相同的
(9)CBO模式的選擇,對於需要快速響應使用者的請求,可以設定成first_rows(優先把部分資料返回),對於使用者響應不是很嚴格的業務,可以設定成all_rows(所有處理資料一次性返回)
(10)如果系統的整體開銷不大,可以考慮並行技術
(11)對於OLAP系統最直接的提高資料庫效能方法增加磁碟I/O和CPU吞吐量,如果硬體搞不了,可以採用資料庫壓縮技術,減少空間提高I/O
(12)隨著資料量的增加,以前不是問題的問題也變成了問題,對於OLAP系統SQL的效率決定資料庫效率
OLTP
(1)先要弄清楚資料庫的型別是什麼 OLTP 線上事務處理 or OLAP 線上分析系統,因為不同的資料庫型別選擇最佳化的方法也不同。例如 OLTP 強調系統的記憶體命中率,記憶體的效率決定資料庫效率。
(2)如果使用者的併發數很大可擴大記憶體的容量快取更多的資料,還可以調整data buffer cache、shared pool、java pool、large pool的大小及PGA大小包括sort區hash區等。
(3)如果使用者的線上請求數較多,可以嘗試著進行SQL的變數繫結,緩解SQL的硬解析,當遇到成千上萬的查詢操作時,能夠不經過解析過程直接使用快取的執行計劃,那效率可以提高n倍。因為硬解析會做2個分析。第一 語法分析:檢查程式碼的語法是否正確。第二 語義分析:檢查程式碼執行的物件是否存在及對執行物件的許可權是否有。解析過程十分的耗費CPU資源。
(4)資料塊的爭用,是因為資料分配的不均勻造成的,可以使用hash演算法平均打散到各個磁碟上來減少熱塊的產生
(5)還有很多系統效能間接的反應為資料庫效能,例如 網路的延遲 主機的應用程式較多 沒有采用中介軟體策略構建預處理緩衝池
OLAP
(6)如果是OLAP 線上分析系統的話,當一個使用者找你來說查詢一張報表很慢,你可以透過使用者會話來找到查詢的SQL語句,檢查這條語句邏輯上效率如何,可以使用Hint方式來改變sql的執行計劃,檢查資料的訪問方式,是走全表掃描還是走索引效率最高,調整SQL的執行計劃,選擇合適的索引
(7)因為SQL大多數就是集合的數學運算操作,SQL表的關聯方式是不是最最佳化,哪種join最適合,這都是要考慮的範圍
(8)當你手工測試完後,對錶進行統計分析,看看最佳化器和你選的執行計劃是不是相同的
(9)CBO模式的選擇,對於需要快速響應使用者的請求,可以設定成first_rows(優先把部分資料返回),對於使用者響應不是很嚴格的業務,可以設定成all_rows(所有處理資料一次性返回)
(10)如果系統的整體開銷不大,可以考慮並行技術
(11)對於OLAP系統最直接的提高資料庫效能方法增加磁碟I/O和CPU吞吐量,如果硬體搞不了,可以採用資料庫壓縮技術,減少空間提高I/O
(12)隨著資料量的增加,以前不是問題的問題也變成了問題,對於OLAP系統SQL的效率決定資料庫效率
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/26686207/viewspace-749619/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 一次OWB資料庫效能問題處理資料庫
- 一個關於資料庫閃回區問題的處理資料庫
- 【原創】由隱式轉換引起的資料庫效能問題資料庫
- 有關分散式資料庫事務處理的問題分散式資料庫
- 資料庫工程師的職責是什麼?有哪些工作內容資料庫工程師
- 當專案經理讓我負責資料展示功能開發,我的內心為什麼是拒絕的?
- 當面試官說 “你還有什麼問題想問的”,你該如何回答?面試
- 當面試官說 “你還有什麼問題想問的” ,你該如何回答?面試
- 當面試官說“你還有什麼問題想問的”,你該如何回答?面試
- 當面試遇到 Redis,我作為一個面試官是這麼“刁難”你的!面試Redis
- 【原創】“單純的資料庫層面的優化是沒有前途的”元芳你怎麼看?資料庫優化
- 原創:為什麼是javascript?JavaScript
- 一次資料庫不能歸檔問題的處理資料庫
- 一個NBU問題的處理
- windows的一個問題處理Windows
- 滴滴處理海量資料的祕訣是什麼?
- 資料庫出現兩個Listener問題的官方處理方法資料庫
- 為什麼你作為一個.NET的程式設計師工資那麼低?程式設計師
- 為什麼JavaScript是你應當學習的下一個(或第一個)程式語言JavaScript
- 你還在為創業專案而苦惱?藏“金”萬億的藍海市場就在你面前!創業
- 資料倉儲能為你當前資料庫體系的不足做些什麼? (轉)資料庫
- 為什麼PostgreSQL是最成功的資料庫?SQL資料庫
- 六西格瑪解決問題的思路是什麼?
- Oracle資料庫中的逐行處理問題NEOracle資料庫
- 近期處理的Oracle資料庫問題總結Oracle資料庫
- “你還有什麼事想問”——作為程式設計師如何回答面試官的問題程式設計師面試
- 【轉】 一次資料庫不能歸檔問題的處理資料庫
- 為什麼會有這麼多種的資料庫資料庫
- vue中當資料為空時的處理Vue
- 一次資料庫當機問題的分析資料庫
- 資料庫升級問題處理一則資料庫
- [OOD] 為什麼單一職責原則(SRP)是最難運用的
- 網路運營者是個人資訊保護的第一責任人
- 請問一個有關jdbc效能的問題JDBC
- 效能優化是資料庫應用的核心問題優化資料庫
- 支付類系統資料處理和資料中臺的資料處理方式有什麼不同?
- 資料是什麼——資料的倉庫
- 當面試官問你這個問題的時候,他想聽到什麼?面試