开发DBA(APPLICATION DBA)的重要性
開發(fā)DBA是干什么的?
1. 審核開發(fā)人員寫的SQL,并且糾正存在性能問題的SQL ---非常重要
2. 編寫復(fù)雜業(yè)務(wù)邏輯SQL,因?yàn)閺?fù)雜業(yè)務(wù)邏輯SQL開發(fā)人員寫出的SQL基本上都是有性能問題的,與其讓開發(fā)人員寫,不如DBA自己寫。---非常重要
3. 參與DB 設(shè)計(jì),盡早糾正不合理的DB 設(shè)計(jì),ORACLE的性能是設(shè)計(jì)出來的,而不是調(diào)出來滴 ---這塊非常重要
4. 對ORACLE進(jìn)行基本的維護(hù)。
5. 與應(yīng)用架構(gòu)師配合,并且糾正應(yīng)用架構(gòu)師所犯錯誤,其實(shí)開發(fā)DBA 也帶有應(yīng)用架構(gòu)師的角色
6. 對整個數(shù)據(jù)庫進(jìn)行高效的設(shè)計(jì)與規(guī)劃,這個工作不能交給運(yùn)維DBA, 因?yàn)檫\(yùn)維不了解業(yè)務(wù)。
?
無法想象,沒有開發(fā)DBA的公司,設(shè)計(jì)出來的系統(tǒng)性能不知道有多爛。
?
舉個小例子
?
最近遇到個SQL 跑的很慢,第一次12秒出結(jié)果(從磁盤讀入內(nèi)存),第二次2秒出結(jié)果(數(shù)據(jù)都在buffer cache里面),SQL代碼如下
?
SELECT COUNT(0) FROM P LEFT JOIN R ON P.ID = R.ID;
P 有200W 數(shù)據(jù) R 有 100W 數(shù)據(jù)。這個SQL 第一次跑12秒,肯定無法接受。 那么大家看看這個SQL如何優(yōu)化?
?
其實(shí)這個SQL寫得有問題, 這里是外連接,并且求COUNT(*) 還有,JOIN字段是ID,ID 一般都是主鍵,那么這個SQL完全可以改寫 為
?
SELECT COUNT(0) FROM P;?
改寫之后 COUNT(*) 直接讀取 P表主鍵,0.1秒--1秒出結(jié)果,當(dāng)然了,請注意,如果R表ID不是主鍵,并且R表ID 有重復(fù)值,COUNT(*) 會變大 ,不能這么改寫
?
最初的SQL寫得確實(shí)有問題,但是我們不能怪開發(fā),因?yàn)閯e人畢竟對SQL理解不是那么專業(yè),所以必須要有開發(fā)DBA把關(guān)。
大家可以想象一下,要是沒開發(fā)DBA,當(dāng)P表以及R表數(shù)據(jù)量增長到千萬級/億級,那得多慢啊。
?
僅以這個小例子,說明開發(fā)DBA的重要性,最近做了很多優(yōu)化,基本上線上所有SQL都控制在1秒內(nèi)返回結(jié)果。
?
?
?
轉(zhuǎn)載于:https://www.cnblogs.com/hehe520/archive/2013/06/08/6330540.html
總結(jié)
以上是生活随笔為你收集整理的开发DBA(APPLICATION DBA)的重要性的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 对比kCCPositionTypeFre
- 下一篇: 解决zabbix的cannot allo