1. 程式人生 > >記錄一下oracle培訓的一些Tips

記錄一下oracle培訓的一些Tips

Oracle培訓,好多都是概念的東西,有些東西還是適合開發來深入看看的,增加點談資也是不錯:
1. 一些數字: 服務費一般一年12%,比如伺服器100W, 每年還要付12W服務費用來維護伺服器,一般軟體也有類似的收費方式。
對於DBA的要求,一個庫一年的不可用時間不大於50分鐘(99.99X)一般每年的"額度"可能會變化。
資料庫的壓力負載壓力(可能是綜合壓力): 凌晨15%,一般時候的負載(30%-40%),如果正式上線之前的壓測發現負載達到70%,就會停止上線。
OLTP: 維護22個庫 8個T, 一天資料越60G, 事務包含的記錄數較少,查詢多,事務短,往往CPU和磁碟是瓶頸,函式往往導致CPU瓶頸,不要使用並行
OLAP: PB級別,一天可能有400G資料,常使用並行。
即使是伺服器的1W5K轉硬碟,一般讀取速度也只有50M/s(可能是在磁碟碎塊的前提下,看評測,不做raid應該能到140)。平安集團大都使用SSD
業務上使用memcached做快取
2. Oracle不能做分庫分表(沒辦法分片和橫向擴充套件,提了一下可能剛支援分庫,見7),我們平時說的oracle叢集RAC實際上是兩個instance,還是公用同一個庫的
3. Oracle讀會阻塞寫,但是寫不會阻塞讀。
4. Oracle的like在某些情況可以使用索引,應該是沒有前置百分號
5. 索引是DBA來建立,不是開發建立
6. ORACLE一般的效能瓶頸都在IO上
7. Oracle11G的主備功能(Active data guard)能很好的實現讀寫分離,而且主庫備庫同步的很快,五秒內
8. 淘寶基本很少使用表Join操作,弱化事務
9. Oracle如果發現變慢的時候,看記憶體使用率,shared pool,BufferCache
10. Oracle的最小粒度叫資料庫
11. Oracle Rac會讓寫的效能提高,但是讀的效能不會有什麼提升
12. Oracle一般不會有寫的話馬上進行IO寫,而是有多個閾值控制(記憶體寫了3M,時間,等等)
13. PGA,SGA,Redo log buffer, undo log buffer…
14. 好多用Oracle記錄日誌的,建議只寫關鍵異常,Debug或者Info級別的可以最後批量寫
15. Buffered cache是個雙向連結串列
16. 全表掃描只使用1/3的記憶體
17. V$sga_target_advice這個檢視可以在壓力測試之後檢視一下,有推薦的記憶體設定。
18. process, transaction, session有個換算關係,概念要分開
19. 檢視查詢計劃:set autot trace exp stat;set autot off
20. Exadata ¼櫃的價格是180W
21. Oracle有閃回功能:flashbackupto(空格忘記了)
22. sqlloader類似mysql文字匯入
23. 如果查詢結果佔表量的5%,則不會走索引,而是走全表掃描(這個值待確定)
24. 業務上要求使用者必須有必填欄位,這樣可以有目的的新增索引
25. 11g可以把索引設定成invisible,這樣就能不刪索引,同時讓索引不起作用。
26. 1.5T ssd 3W, 3.2T ssd 15W
27. Oracle分割槽:對效率提升不大,一般OLAP使用,列表分割槽,間隔分割槽。。。
28. 有些時候可以通過複雜化SQL讓SQL走索引
29. 冗餘欄位新增,防止join
30. 查詢計劃的HashJoin和NestedLoop
31. MySQL的CPU會分佈不均,最多使用8個core,64核的伺服器一般都起5個mysql例項
32. Oracle有個隱藏的rowid,說是最高效的,但是這個值在表重排重建會變化
33. index scan(skip)複合索引跳過前面的直接使用後面的
34. sort by的欄位可以和條件一起建立複合索引,但是要索引和where,sort一致,查詢的結果欄位也可以放到索引裡面
35. 加函式會導致索引失效
36. 可以建立反向索引來跑 like ‘%a’這種sql
37. 型別轉換會使索引失效
38. 表示式或函式應當放到等號的右面
39. 表裡面如果有欄位平時不為null,可以使用DB的defaultValue,否則應當在應用中做defaultValue,儘量讓表裡面不出現null
40. 複合索引應當把分類明顯的放在前面,如性別,是否。就是distinct 少的欄位應當放在複合索引的前面
41. 11G有個hint能走兩個索引,不過生產環境沒有用過
42. create index XXX online能不鎖表線上建立索引
43. exists比關聯join效率高
44. nested loop一定要走索引,前表一定要小
45. oracle有個分析表 analyze table t1 compute statistics,一般剛上線的時候每天跑一次,後面基本就不用跑了,這個東西是為了對錶做個統計,比如前面有說5%時候走全表而不走索引,那麼在查詢之前怎麼知道結果集有多大?就是這個東西起的作用,如果沒有這個資訊,oracle會預設隨機取32個(資料待考證)資料塊做動態取樣,但是出來的結果不準。