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