引起數據庫性能問題的因素
1.軟件設計對數據庫的影響
1.1軟件架構對數據庫性能的影響
如果一套系統的併發數非常大,常會考慮搭建一箇中間層,其目的就是用來構建一個緩衝池,在數據庫之前對大量的併發進行處理,以便於每次只有少量的用戶連接到數據庫中,其他的用戶在緩衝池的隊列中等待。
1.2軟件代碼的編寫對數據庫性能的影響
1.2.1人爲的在SQL代碼中加入Hint來約束SQL的執行計劃
案例1:開發人員爲了要求每次對一個表做操作時,都使用索引,於是在代碼中強行加入了Hint約束SQL的執行計劃
select /*+ index(t1 ind_t1 )*/ col1,col2 from t1 where col1>.....and col1<.....,系統上線後,開始沒有問題,後來用戶反映查詢非常慢。最後對比最近的數據發現,近期的數據在創建索引的列上的值重複率要遠遠高於以前,因此Oracle在選擇索引之後,比以前讀取了更多的索引塊和數據塊,造成了大量的I/O操作。
數據庫裏的數據不是一成不變的,最好讓數據庫自己決定SQL執行計劃。
1.2.2不必要的外連接
1.2.3CBO下優化器模式的選擇
對於OLAP系統,絕大多數時候系統運行的是報表作業,執行的基本上是聚合類函數,這時候,把優化器模式設置成all_rows是恰當的。
對於一些分頁操作比較多的網站類數據庫,設置成first_rows會比較好。
1.2.4沒有綁定變量的SQL
綁定變量的真正用途是在OLTP系統中,這個系統通常有這樣的特點:用戶併發數非常大,用戶的請求十分密集,並且這些請求的SQL大多數是可以重用的。如果一條SQL語句執行一遍後,就被緩存到數據庫的內存當中(共享池),以後的用戶請求都使用這個SQL解析後的結果,那效率必定大大提高。
2.數據庫的設計
2.1OLTP系統
OLTP系統(在線事務處理系統)的用戶併發數非常多,但他們只是對數據庫做很小的操作,數據庫側重於對用戶操作的快速響應,這是對該類型數據庫最重要的性能要求。OLTP系統是一個數據庫變化非常頻繁、SQL語句提交非常頻繁的系統。對於數據庫來說,應儘可能的讓數據塊保存在內存中,對於SQL語句來說,儘可能的使用綁定變量達到SQL語句的重用,減少物理I/O和重複的SQL解析,這樣可以極大的提高數據庫的性能。
2.2OLAP系統
內存的優化,對於OLAP來講影響很小,這種系統的瓶頸往往在於磁盤I/O上面。SQL的優化對於OLAP數據庫來說很重要。分區技術在OLAP數據庫中的重要性主要體現在數據庫管理上,比如數據加載,可以通過分區交換的方式來實現,備份可以通過備份分區表空間實現,刪除數據可以通過刪除分區來實現,值得一提的是,分區索引並不一定比全局索引在任何時候都快,有時候塔反而會更慢。
3.數據庫的硬件設計,主要體現在CPU,I/O和負載3個方面
3.1存儲容量
大致估算出數據庫所存存放的數據量的大小,可以作爲存儲設備採購的一個依據,不要忘記系統備份數據所佔用的空間的考慮。
3.2數據的安全性
要求高的用RAC+DataGuard的備份方式,常規的用RMAN+歸檔的備份方式。