oracle
資料庫資料量增大的優化措施。 1
、硬體優化 2
、資料庫表分割槽(
範圍分割槽,雜湊分割槽,列表分割槽和復合分割槽。)
3、分表 4
、索引優化
對海量的資料處理,對大表建立索引是必行的,建立索引要考慮到具體情況,例如針對大表的分組、排序等字段,都要建立相應索引,一般還可以建立復合索引,對經常插入的表則建立索引時要小心,筆者在處理資料時,曾經在乙個
etl流程中,當插入表時,首先刪除索引,然後插入完畢,建立索引,並實施聚合操作,聚合完成後,再次插入前還是刪除索引,所以索引要用到好的時機,索引的填充因子和聚集、非聚集索引都要考慮。 5
、建立快取機制
當資料量增加時,一般的處理工具都要考慮到快取問題。快取大小設定的好差也關係到資料處理的成敗,例如,筆者在處理
2億條資料聚合操作時,快取設定為
100000
條/buffer
,這對於這個級別的資料量是可行的。 6
、加大虛擬記憶體
如果系統資源有限,記憶體提示不足,則可以靠增加虛擬記憶體來解決。筆者在實際專案中曾經遇到針對
18億條的資料進行處理,記憶體為
1gb,1個
p4 2.4g
的cpu
,對這麼大的資料量進行聚合操作是有問題的,提示記憶體不足,那麼採用了加大虛擬記憶體的方法來解決,在
6塊磁碟分割槽上分別建立了6個
4096m
的磁碟分割槽,用於虛擬記憶體,這樣虛擬的記憶體則增加為
4096*6 + 1024 = 25600 m
,解決了資料處理中的記憶體不足問題。 7
、分批處理
海量資料處理難因為資料量大,那麼解決海量資料處理難的問題其中乙個技巧是減少資料量。可以對海量資料分批處理,然後處理後的資料再進行合併操作,這樣逐個擊破,有利於小資料量的處理,不至於面對大資料量帶來的問題,不過這種方法也要因時因勢進行,如果不允許拆分資料,還需要另想辦法。不過一般的資料按天、按月、按年等儲存的,都可以採用先分後合的方法,對資料進行分開處理。 8
、使用臨時表和中間表
資料量增加時,處理中要考慮提前彙總。這樣做的目的是化整為零,大表變小表,分塊處理完成後,再利用一定的規則進行合併,處理過程中的臨時表的使用和中間結果的儲存都非常重要,如果對於超海量的資料,大表處理不了,只能拆分為多個小表。如果處理過程中需要多步彙總操作,可按彙總步驟一步步來,不要一條語句完成,一口氣吃掉乙個胖子。 9
、優化查詢
sql語句
在對海量資料進行查詢處理過程中,查詢的
sql語句的效能對查詢效率的影響是非常大的,編寫高效優良的
sql指令碼和儲存過程是資料庫工作人員的職責,也是檢驗資料庫工作人員水平的乙個標準,在對
sql語句的編寫過程中,例如減少關聯,少用或不用游標,設計好高效的資料庫表結構等都十分必要。筆者在工作中試著對
1億行的資料使用游標,執行
3個小時沒有出結果,這是一定要改用程式處理了。
10、使用文字格式進行處理
對一般的資料處理可以使用資料庫,如果對複雜的資料處理,必須借助程式,那麼在程式運算元據庫和程式操作文字之間選擇,是一定要選擇程式操作文字的,原因為:程式操作文字速度快;對文字進行處理不容易出錯;文字的儲存不受限制等。例如一般的海量的網路日誌都是文字格式或者
csv格式(文字格式),對它進行處理牽扯到資料清洗,是要利用程式進行處理的,而不建議匯入資料庫再做清洗。
資料量增大後的問題
不知不覺,公司目前執行的業務系統已經有6年之久了,生成環境中的資料庫的資料量也非常大了,達到了200多g了,有很多表的資料量已經有幾億條了。但是我們的資料庫以前設計時的id為int型別,所以這些型別的值範圍很快會用完了。所以必須要對資料庫的重新設計了,同時業務系統也需要進行了公升級優化了。int型別...
ORACLE和SQL查詢庫資料量
oracle根據賬號查詢每張表資料量 select t.table name,t.num rows from user tables t order by num rows desc sql server查詢總資料量 select sum 記錄條數 as 總記錄數 from select top 1...
Oracle大資料量遷移
prompt 生成歷史表,使用nologging create table his test nologging as select from test prompt 檢驗新舊表的資料量是否一致 select count 1 from test select count 1 from his tes...