当一个有性能问题的数据库摆在你的面前,作为责任人,你的处理思路是什么?...
元芳曰:這種情況基本都成為了DBA的家常便飯,經(jīng)常要去處理用戶提交來的性能問題或者是工程人員提交上來的AWR報(bào)告,一般遇到這種情況,解決的方法有很多。
OLTP
(1)先要弄清楚數(shù)據(jù)庫的類型是什么 OLTP 在線事務(wù)處理 or OLAP 在線分析系統(tǒng),因?yàn)椴煌臄?shù)據(jù)庫類型選擇優(yōu)化的方法也不同。例如 OLTP 強(qiáng)調(diào)系統(tǒng)的內(nèi)存命中率,內(nèi)存的效率決定數(shù)據(jù)庫效率。
(2)如果用戶的并發(fā)數(shù)很大可擴(kuò)大內(nèi)存的容量緩存更多的數(shù)據(jù),還可以調(diào)整data buffer cache、shared pool、java pool、large pool的大小及PGA大小包括sort區(qū)hash區(qū)等。
(3)如果用戶的在線請(qǐng)求數(shù)較多,可以嘗試著進(jìn)行SQL的變量綁定,緩解SQL的硬解析,當(dāng)遇到成千上萬的查詢操作時(shí),能夠不經(jīng)過解析過程直接使用緩存的執(zhí)行計(jì)劃,那效率可以提高n倍。因?yàn)橛步馕鰰?huì)做2個(gè)分析。第一 語法分析:檢查代碼的語法是否正確。第二 語義分析:檢查代碼執(zhí)行的對(duì)象是否存在及對(duì)執(zhí)行對(duì)象的權(quán)限是否有。解析過程十分的耗費(fèi)CPU資源。
(4)數(shù)據(jù)塊的爭用,是因?yàn)閿?shù)據(jù)分配的不均勻造成的,可以使用hash算法平均打散到各個(gè)磁盤上來減少熱塊的產(chǎn)生
(5)還有很多系統(tǒng)性能間接的反應(yīng)為數(shù)據(jù)庫性能,例如 網(wǎng)絡(luò)的延遲??主機(jī)的應(yīng)用程序較多??沒有采用中間件策略構(gòu)建預(yù)處理緩沖池
OLAP
(6)如果是OLAP 在線分析系統(tǒng)的話,當(dāng)一個(gè)用戶找你來說查詢一張報(bào)表很慢,你可以通過用戶會(huì)話來找到查詢的SQL語句,檢查這條語句邏輯上效率如何,可以使用Hint方式來改變sql的執(zhí)行計(jì)劃,檢查數(shù)據(jù)的訪問方式,是走全表掃描還是走索引效率最高,調(diào)整SQL的執(zhí)行計(jì)劃,選擇合適的索引
(7)因?yàn)镾QL大多數(shù)就是集合的數(shù)學(xué)運(yùn)算操作,SQL表的關(guān)聯(lián)方式是不是最優(yōu)化,哪種join最適合,這都是要考慮的范圍
(8)當(dāng)你手工測試完后,對(duì)表進(jìn)行統(tǒng)計(jì)分析,看看優(yōu)化器和你選的執(zhí)行計(jì)劃是不是相同的
(9)CBO模式的選擇,對(duì)于需要快速響應(yīng)用戶的請(qǐng)求,可以設(shè)置成first_rows(優(yōu)先把部分?jǐn)?shù)據(jù)返回),對(duì)于用戶響應(yīng)不是很嚴(yán)格的業(yè)務(wù),可以設(shè)置成all_rows(所有處理數(shù)據(jù)一次性返回)
(10)如果系統(tǒng)的整體開銷不大,可以考慮并行技術(shù)
(11)對(duì)于OLAP系統(tǒng)最直接的提高數(shù)據(jù)庫性能方法增加磁盤I/O和CPU吞吐量,如果硬件搞不了,可以采用數(shù)據(jù)庫壓縮技術(shù),減少空間提高I/O
(12)隨著數(shù)據(jù)量的增加,以前不是問題的問題也變成了問題,對(duì)于OLAP系統(tǒng)SQL的效率決定數(shù)據(jù)庫效率
?
2012.11.20
天津&winter
分享技術(shù)~成就夢(mèng)想
Blog:http://space.itpub.net/26686207
總結(jié)
以上是生活随笔為你收集整理的当一个有性能问题的数据库摆在你的面前,作为责任人,你的处理思路是什么?...的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 算法题集-2
- 下一篇: 安全现状:从通杀到专杀