DBA和開發同事的一些代溝(一)
DBA同學在工作中不可避免和開發同學打交道,和開發的同學在交流中還是有不少的小插曲,有些想想也蠻有意思,但是有些是痛點。
我舉幾個例子來說明,可能比較片面,但是隻是為了說明問題,達到交流的目的即可。
###oracle知識和sql水平不足
ddl中的commit
我相信很多DBA都會看到這樣的sql指令碼。
create table test(id number,name varchar2(30));
commit;
其實這個就是對於ddl的理解有偏差,ddl壓根就不需要這樣的commit
弄巧成拙的exists
之前碰到一個開發同事寫的sql大體是下面的樣子
select *from test where id in (xxxx) and exists(select *from big_table )
可以看出他還是認為exists要好一些,但是實際上用的時候沒用好。
讓人匪夷所思的資料庫
經常開發同事會給我提出要求,我們需要建立幾個資料庫,我一聽想這個請求還是蠻大的,需要考慮儲存,網路,伺服器等等,然後弄明白之後,其實他說的就是建立幾個資料庫使用者。如果是MySQL這麼說還算對,我聽到的都是Oracle的,難道都是故意刺激我。我每次提醒他們,那是資料庫使用者,他們會不以為然的說,恩,就是你說的那麼個東西,好吧。
不合理的表關聯
這種案例也聽過不少碰到過不少,我見到比較多的還是十多個表做關聯,不過效能還算能過得去,最近聽到一個同事碰到一個sql裡面的表關聯有40多個,而且還是用MySQL,我聽了這種複雜度,簡直要絕望。
高水位線的問題
之前碰到一個案例,有一天突然資料庫歸檔量急劇增多。最後一番調查之後發現,開發同學使用了delete from test這種操作,這個test表資料量非常大。
下面是我和開發同事的對話
開發同事 [19:27]:
delete全表都要下工單是吧
我們最近在整理幾個資料庫的資料
楊建榮 [19:28]:
不能做這種操作,如果需要清理資料,開工單給DBA,讓DBA來做。
開發同事 [19:28]:
好的
楊建榮 [19:28]:
你這樣清理,表裡高水位線,會越來越高,影響比較大。
開發同事[19:29]:
恩
楊建榮 [19:32]:
剛剛一個小時,日誌切了900多次,正常應該是2~5次
開發同事[19:32]:
並不懂 +o(
楊建榮 [19:33]:
就是影響比較大的意思,就跟開發的日誌量突然多了500倍的感覺一樣;)
最後我又給他解釋了一會,他似乎明白了,但是最後的收效就是delete全表會有很大的影響。
####對索引的過度喜好
發現有的開發同事對於索引還是很依賴,恨不得每個欄位都建一個索引。
比如下面形式的語句
create table(id1,id2,id3);
create index on (id1);
create index on (id2);
create index on (id3);
如果查詢條件滿足的情況下,其實可以做個複合索引的。索引太多,對於dml影響不小,而且很多時候執行計劃效率也高不了。
大表加個欄位
如果給大表加個欄位,對於DBA來說就是一個很頭疼的事情,尤其是大表,分割槽表,資料量非常大的情況下,那就非常耗費時間和精力,應用那麼又要保證停機時間,所以還是一件挺糾結的事情。我們在exadata上也看到過,大表加個default值的欄位,實在是再沒法快了。
可能從開發角度來說就是簡單的一個sql語句,不能那麼想啊。
開發同學的潛臺詞
開發同學可能需要表達的是事情A,可能我們需要做事情A,B,C,D, 這個時候需要了解開發同學的潛臺詞
比如下面這個對話,開發同事讓我來賦予表訪問的select許可權,很簡單的操作,馬上做好了。
開發同事15:30:
這個使用者也沒有那些表的那些許可權啊
楊建榮15:31
許可權有的
開發同事15:31
剛才確實查不到表
現在好了
。。
楊建榮15:31
聽你一解釋,我明白了,你是說還沒有同義詞啊。
剛建了同義詞
開發同事15:32
哦哦
現在好了
最後一琢磨,開發同事的要求是能夠訪問到表,現網環境中存在owner使用者,連線使用者,owner使用者存放真正的資料,連線使用者是透過同義詞來訪問,對開發來說就需要直接訪問即可。
所以他們所說的開通許可權,DBA需要做的就是開通訪問許可權,然後建立同義詞。然後開通響應的防火牆和埠。。。。
###“未知問題”
除錯一個儲存過程
最近有個開發同事來找我,讓我幫她除錯一個儲存過程,我問她是我負責的環境嗎,她說不知道,那給我環境我在本地試一下,她說具體環境也記不得了,目前在已經配置好的環境裡面執行儲存過程有問題,好吧,我一看儲存過程,好幾百行,先耐著性子問了問最近有什麼變化。
最後還是試著幫他除錯了一下,發現原來報錯是NO DATA FOUND這種錯誤。
最後我給她寫了一個簡單的模擬pl/sql來說明問題,她才終於明白問題,要不還在和我糾結到底是寫varchar還是varchar2
亂碼導致的sql問題
有下面這麼一段聊天內容,是關於部署一個儲存過程的。是一個重要的資料環境。
楊建榮 [16:20]:
這個儲存過程你測試了嗎?
開發同事[16:21]:
我內網測試了
可以修改成功麼?
楊建榮 [16:21]:
有報警
警告
開發同事 [16:24]:
修改不了?
我內網沒有報警呢
開發同事 [16:29]:
沒問題啊
內網
是不是弄錯了
我剛還測試了呢
一樣的
開發同事 [16:41]:
刪完了編譯不成功
應該沒問題的
楊建榮 [17:01]:
好的。最後用iconv搞定了。有個別註釋的字符集相容問題
這個問題說來慚愧,也是這麼字符集沒有考慮好,結果執行的時候丟擲了警告,結果找開發,開發說測試過了,但是部署就是有問題,開發說我就改了一行兩行的內容,就這麼想來想去,最後才發現是字符集的相容,其實開發和DBA有很多時候都有這種不明確問題的糾結。
後續繼續補充
我舉幾個例子來說明,可能比較片面,但是隻是為了說明問題,達到交流的目的即可。
###oracle知識和sql水平不足
ddl中的commit
我相信很多DBA都會看到這樣的sql指令碼。
create table test(id number,name varchar2(30));
commit;
其實這個就是對於ddl的理解有偏差,ddl壓根就不需要這樣的commit
弄巧成拙的exists
之前碰到一個開發同事寫的sql大體是下面的樣子
select *from test where id in (xxxx) and exists(select *from big_table )
可以看出他還是認為exists要好一些,但是實際上用的時候沒用好。
讓人匪夷所思的資料庫
經常開發同事會給我提出要求,我們需要建立幾個資料庫,我一聽想這個請求還是蠻大的,需要考慮儲存,網路,伺服器等等,然後弄明白之後,其實他說的就是建立幾個資料庫使用者。如果是MySQL這麼說還算對,我聽到的都是Oracle的,難道都是故意刺激我。我每次提醒他們,那是資料庫使用者,他們會不以為然的說,恩,就是你說的那麼個東西,好吧。
不合理的表關聯
這種案例也聽過不少碰到過不少,我見到比較多的還是十多個表做關聯,不過效能還算能過得去,最近聽到一個同事碰到一個sql裡面的表關聯有40多個,而且還是用MySQL,我聽了這種複雜度,簡直要絕望。
高水位線的問題
之前碰到一個案例,有一天突然資料庫歸檔量急劇增多。最後一番調查之後發現,開發同學使用了delete from test這種操作,這個test表資料量非常大。
下面是我和開發同事的對話
開發同事 [19:27]:
delete全表都要下工單是吧
我們最近在整理幾個資料庫的資料
楊建榮 [19:28]:
不能做這種操作,如果需要清理資料,開工單給DBA,讓DBA來做。
開發同事 [19:28]:
好的
楊建榮 [19:28]:
你這樣清理,表裡高水位線,會越來越高,影響比較大。
開發同事[19:29]:
恩
楊建榮 [19:32]:
剛剛一個小時,日誌切了900多次,正常應該是2~5次
開發同事[19:32]:
並不懂 +o(
楊建榮 [19:33]:
就是影響比較大的意思,就跟開發的日誌量突然多了500倍的感覺一樣;)
最後我又給他解釋了一會,他似乎明白了,但是最後的收效就是delete全表會有很大的影響。
####對索引的過度喜好
發現有的開發同事對於索引還是很依賴,恨不得每個欄位都建一個索引。
比如下面形式的語句
create table(id1,id2,id3);
create index on (id1);
create index on (id2);
create index on (id3);
如果查詢條件滿足的情況下,其實可以做個複合索引的。索引太多,對於dml影響不小,而且很多時候執行計劃效率也高不了。
大表加個欄位
如果給大表加個欄位,對於DBA來說就是一個很頭疼的事情,尤其是大表,分割槽表,資料量非常大的情況下,那就非常耗費時間和精力,應用那麼又要保證停機時間,所以還是一件挺糾結的事情。我們在exadata上也看到過,大表加個default值的欄位,實在是再沒法快了。
可能從開發角度來說就是簡單的一個sql語句,不能那麼想啊。
開發同學的潛臺詞
開發同學可能需要表達的是事情A,可能我們需要做事情A,B,C,D, 這個時候需要了解開發同學的潛臺詞
比如下面這個對話,開發同事讓我來賦予表訪問的select許可權,很簡單的操作,馬上做好了。
開發同事15:30:
這個使用者也沒有那些表的那些許可權啊
楊建榮15:31
許可權有的
開發同事15:31
剛才確實查不到表
現在好了
。。
楊建榮15:31
聽你一解釋,我明白了,你是說還沒有同義詞啊。
剛建了同義詞
開發同事15:32
哦哦
現在好了
最後一琢磨,開發同事的要求是能夠訪問到表,現網環境中存在owner使用者,連線使用者,owner使用者存放真正的資料,連線使用者是透過同義詞來訪問,對開發來說就需要直接訪問即可。
所以他們所說的開通許可權,DBA需要做的就是開通訪問許可權,然後建立同義詞。然後開通響應的防火牆和埠。。。。
###“未知問題”
除錯一個儲存過程
最近有個開發同事來找我,讓我幫她除錯一個儲存過程,我問她是我負責的環境嗎,她說不知道,那給我環境我在本地試一下,她說具體環境也記不得了,目前在已經配置好的環境裡面執行儲存過程有問題,好吧,我一看儲存過程,好幾百行,先耐著性子問了問最近有什麼變化。
最後還是試著幫他除錯了一下,發現原來報錯是NO DATA FOUND這種錯誤。
最後我給她寫了一個簡單的模擬pl/sql來說明問題,她才終於明白問題,要不還在和我糾結到底是寫varchar還是varchar2
set
serveroutput on
declare
a varchar2(10);
begin
select '' into a from dual where rownum<1;
dbms_output.put_line(a);
end;
/
亂碼導致的sql問題
有下面這麼一段聊天內容,是關於部署一個儲存過程的。是一個重要的資料環境。
楊建榮 [16:20]:
這個儲存過程你測試了嗎?
開發同事[16:21]:
我內網測試了
可以修改成功麼?
楊建榮 [16:21]:
有報警
警告
開發同事 [16:24]:
修改不了?
我內網沒有報警呢
開發同事 [16:29]:
沒問題啊
內網
是不是弄錯了
我剛還測試了呢
一樣的
開發同事 [16:41]:
刪完了編譯不成功
應該沒問題的
楊建榮 [17:01]:
好的。最後用iconv搞定了。有個別註釋的字符集相容問題
這個問題說來慚愧,也是這麼字符集沒有考慮好,結果執行的時候丟擲了警告,結果找開發,開發說測試過了,但是部署就是有問題,開發說我就改了一行兩行的內容,就這麼想來想去,最後才發現是字符集的相容,其實開發和DBA有很多時候都有這種不明確問題的糾結。
後續繼續補充
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/23718752/viewspace-1837743/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- DBA和開發同事的一些代溝(四)
- DBA和開發同事的一些代溝(五)
- DBA和開發同事的一些代溝(三)
- DBA和開發同事的代溝(二)
- 開發DBA和產品DBA
- DBA常用的一些SQL和檢視SQL
- DBA常用的一些SQL和檢視(轉)SQL
- 生活和開發所用到的一些工具
- oracle dba 的一些指令碼Oracle指令碼
- ReactJS元件間溝通的一些方法ReactJS元件
- Flutter提升開發效率的一些方法和工具Flutter
- 和開發人員“結仇”的10種溝通方式
- 開發中的一些小事
- dolphindb dba一些常用的維護sqlSQL
- 關於軟體開發的一些常識和思考
- 優化同事發過來的一個sql優化SQL
- 開發和設計溝通有多難? - 你只差一個設計規範
- vue開發的一些外掛Vue
- 軟體開發的一些"心法"
- web開發的一些問題Web
- 開發中常用的一些命令
- CLion開發Qt的一些配置QT
- 產品經理:你是怎樣和開發gg溝通的?
- 程式設計師也要養生,給DBA和IT同行的一些建議程式設計師
- WEB開發的需求溝通並不難Web
- windows開發環境的一些坑Windows開發環境
- Flutter開發中的一些TipsFlutter
- ionic 開發中的一些錯誤
- 開發小程式的一些小經驗
- Laravel 開發 RESTful API 的一些心得LaravelRESTAPI
- 關於GCD開發的一些事GC
- ReactNative開發的一些經驗React
- 自學 iOS 開發的一些經驗iOS
- Android 混合開發 的一些心得。Android
- iOS 開發的一些小技巧篇(1)iOS
- iOS 開發的一些小技巧篇(2)iOS
- iOS 開發的一些小技巧篇(3)iOS
- iOS開發的一些奇巧淫技iOS