DBA在平時工作中最需要掌握的技術-個人想法

字號:

數(shù)據(jù)庫管理員在平時工作中最需要掌握的技術,我想主要是兩個方面:
     1、數(shù)據(jù)庫的性能優(yōu)化方面
     2、數(shù)據(jù)庫的災難技術(備份+恢復技術)。
     工作多年來,發(fā)現(xiàn)這兩點最重要,也是老板們最重視的!性能好能給老板節(jié)省費用,同時也可以給用戶帶來更多的“實惠”,因為有效率。這個社會效率就是競爭,時間就是錢!
     我們的老板在決定用數(shù)據(jù)庫時,特別是大型數(shù)據(jù)庫。他們往往會考慮到:要是數(shù)據(jù)庫壞了怎么辦?要是硬盤壞了怎么辦?要是表壞了怎么辦?我們就要給出一些詳細的方案,甚至是詳細的測試報告!就目前,從mysql->fire bird->sql server->oracle->db2 的數(shù)據(jù)庫性能測試我都做過了,感想很多,如各位想交流歡迎一起學習!就目前現(xiàn)在網(wǎng)絡上許多測試性能的數(shù)據(jù)我看過了不少,覺得總缺點什么。因為他們要么沒有說明測試環(huán)境,要么沒有說明測試方式和過程,要么沒有說明取測試結果的方式。(我一般是:去掉值和最小值,然后其他的每次測試結果平均得到該次運行的最終結果,我一般都在測試報告中說明)但許多人為了減少測試時間或不想太麻煩就直接測試一次就好了。。以為這就是測試最后結果,其實錯了! 第一次運行的有些是需要啟動查詢服務器有些是需要啟動ODBC或BDE,有些用程序測試的要考慮數(shù)據(jù)庫的連接時間和連接方式。。。等等??!
     -俞志鵬 qq:3204925
     2004年9月6日
    以下資料轉貼,非我自己寫的!
    精通數(shù)據(jù)庫管理 (轉帖)
    一、數(shù)據(jù)庫設計
    成功的數(shù)據(jù)庫設計意味著數(shù)據(jù)庫能夠存儲所有必需的數(shù)據(jù),而且其存儲方式保證了我們能夠快速地保存、提取、編輯、刪除數(shù)據(jù)。有許多因素影響數(shù)據(jù)庫設計是否成功:數(shù)據(jù)庫規(guī)范化,索引,運用存儲過程和觸發(fā)器,以及正確地選擇一個能夠滿足需要的DBMS。
    數(shù)據(jù)庫規(guī)范化(Database Normalization)是一個很重要的問題。數(shù)據(jù)庫規(guī)范化可以簡單地理解為每一份數(shù)據(jù)只在數(shù)據(jù)庫中保存一次。這樣,在每次更新數(shù)據(jù)庫中的數(shù)據(jù)時,我們不再需要在多個位置更新同一份數(shù)據(jù)。數(shù)據(jù)庫規(guī)范化有不同的深度,而且我們可以運用多種不同的技術對數(shù)據(jù)庫進行規(guī)范化(請參見參考資源中關于數(shù)據(jù)庫規(guī)范化的文章)。如果數(shù)據(jù)庫沒有規(guī)范化,則數(shù)據(jù)更新必須在多個地方進行,倘若數(shù)據(jù)庫更新實際上只應該在一個地方進行,此時它就給數(shù)據(jù)庫帶來了數(shù)倍的額外開銷。當然,如果你對數(shù)據(jù)庫規(guī)范化的了解很深入,你可以降低部分數(shù)據(jù)的規(guī)范化程度,使得數(shù)據(jù)訪問更加方便。
    一般地,表里面的記錄不按照特定的順序存儲,因此在表中查找數(shù)據(jù)意味著對表進行完全掃描,這是一個相當耗時的操作。我們可以用索引來避免對表進行完全掃描。數(shù)據(jù)庫的索引保存了特定字段(比如身份證號、姓名等)或字段組合(比如產品類別以及產品序號)鍵值的有序列表,因此通過索引查找鍵值要比掃描原始的表快得多。如果你創(chuàng)建了大量的索引,插入記錄的時間可能略有延長,但提取記錄的速度將有很大的提高。
    Access、SQL Server以及Oracle都支持存儲過程(Stored Procedure)和觸發(fā)器(Trigger)。存儲過程是數(shù)據(jù)庫預先編譯的、可以隨時調用執(zhí)行的查詢或者過程。與動態(tài)創(chuàng)建和執(zhí)行的查詢相比,存儲過程的執(zhí)行效率更高,因為查詢在執(zhí)行之前必須有一個檢查、解釋過程,它需要一定的時間。
    觸發(fā)器是一種特殊的函數(shù),它在特定的事件出現(xiàn)時對數(shù)據(jù)進行預定的操作。數(shù)據(jù)庫(以及訪問數(shù)據(jù)庫的應用程序)在插入或者修改記錄的時候會頻繁地執(zhí)行觸發(fā)器。觸發(fā)器可以驗證數(shù)據(jù)是否合法,可以調用其他存儲過程或者程序,也可以進行某些計算。在服務器端運用存儲過程和觸發(fā)器能夠提高效率,減少網(wǎng)絡傳輸,使得客戶端能夠留出更多的時間給其他任務,比如更新屏幕。
    最后,請確保數(shù)據(jù)庫能夠滿足自己的需要??紤]一下系統(tǒng)可能有多少數(shù)據(jù)量,數(shù)據(jù)庫是一個獨立的系統(tǒng)還是用來支持局域網(wǎng)、Internet,確定訪問數(shù)據(jù)庫的用戶數(shù)量。例如,如果系統(tǒng)只有一個用戶,而且它永遠不需要和其他系統(tǒng)交互,Access是一種理想的選擇;但是,如果數(shù)據(jù)庫用來支持企業(yè)級訪問,則Access不再適用;如果系統(tǒng)需要涉及大量XML數(shù)據(jù)并要求支持Unicode,有好幾種DBMS能夠為我們提供這方面的支持。
    注意數(shù)據(jù)庫使用情況隨著時間的推移而改變,定期地復審數(shù)據(jù)庫的使用目的、用法以及設計是否需要調整,以便優(yōu)化數(shù)據(jù)庫的性能。
    二、數(shù)據(jù)庫配置
    每一種數(shù)據(jù)庫管理系統(tǒng)都有各種影響其性能的配置參數(shù),其中部分參數(shù)比較重要。下面是在使用Access、SQL Server和Oracle數(shù)據(jù)庫系統(tǒng)時,我們必須熟悉的一些地方。
    選擇Access 2000數(shù)據(jù)庫時一定要慎重。對于隨時準備升級到SQL Server的多用戶應用,如果用戶數(shù)量比較少(5個或者以下),則Microsoft數(shù)據(jù)引擎(MSDE,Microsoft Data Engine)是一種理想的選擇。Microsoft的Jet 4.0數(shù)據(jù)引擎支持多達255個的用戶,但從整體來看,它的速度比較慢。其它需要考慮的因素包括獨占訪問(速度快)或共享訪問(速度慢),記錄級加鎖(Access 2000獨有)或頁級加鎖(Access 2.0)。如果數(shù)據(jù)庫可能變得非常大,應當注意Jet 4.0和MSDE都有一個2 GB的上限。
    SQL Server有一些重要的配置參數(shù)(參見表1)。例如它有一個“min memory per query”參數(shù),這是為系統(tǒng)中每一個用戶提供的最小內存總量,SQL Server利用這些內存進行排序和連接操作,增加這個數(shù)值可能提高查詢的速度。把“awe enabled”設置為1并在boot.ini文件中加上“/pae”就可以啟用Address Windowing Extensions(即AWE,它是SQL Server 2000的新功能,要求Windows 2000 Advanced Server)。啟用AWE之后,我們能夠使用多達8 GB的RAM。但是,啟用這個功能有一個副作用。啟用這個功能之后,SQL Server將在啟動時獲取大部分可用RAM,而不再是動態(tài)分配內存,因此我們必須監(jiān)視max server memory以及min server memory參數(shù),以免系統(tǒng)變得太慢。
    表1,SQL Server的參數(shù)設置
    參數(shù) 默認值 如何調整
    max_worker_threads 255 依賴于數(shù)據(jù)庫負載的大小,降低這個數(shù)值可能提高性能。
    min_server_memory zero (0) SQL Server能夠動態(tài)分配內存。預先分配一些內存可能會提高響應速度(例如,把這個參數(shù)設置成50 MB,然后看看性能是否有所改善)。
    max_server_memory SQL Server根據(jù)需要動態(tài)分配內存。 如果不啟用AWE,SQL Server 2000最多能夠使用3 GB內存(SQL Server 7最多使用2 GB內存)。
    你可以通過設置各種參數(shù)來提高數(shù)據(jù)庫性能。max_worker_threads、min_server_memory以及max_server_memory都屬于重要的參數(shù)。
    在Oracle 8i中,我們也可以通過調整一些重要參數(shù)來提高數(shù)據(jù)庫性能(參見表2)。這些配置參數(shù)都可以在init.ora文件中找到,或者我們也可以用Oracle Enterprise Manager來設置這些參數(shù)。我們可以結合運用Oracle Performance Manager、查詢命令以及AUTOTRACE功能,輔助優(yōu)化這些配置參數(shù)。AUTOTRACE功能能夠顯示出系統(tǒng)如何解析SQL語句,并給出它的執(zhí)行情況統(tǒng)計報告。執(zhí)行下面這個命令將啟動AUTOTRACE功能:
    SET AUTOTRACE ON
    如果要查看執(zhí)行情況統(tǒng)計報告,但不想查看執(zhí)行計劃,我們執(zhí)行如下命令:
    SET AUTOTRACE TRACEONLY
    表2,設置Oracle配置參數(shù)
    參數(shù) 作用
    DB_BLOCK_BUFFERS 設置系統(tǒng)全局區(qū)(SGA,System Global Area)的大小。Oracle使用這個緩沖區(qū)保存和處理數(shù)據(jù)。
    DB_BLOCK_SIZE 設置內存塊的大小。警告:如果改變這個數(shù)值,你必須重新構造數(shù)據(jù)庫。在Oracle 8或者更高版本中,它可以設置為32K;在早期版本中,限制是16K。
    SHARED_POOL_SIZE Oracle用這個內存處理過程、包、觸發(fā)器。
    SORT_AREA_SIZE 這是用于排序的內存空間大小。
    每一個Oracle系統(tǒng)都包含上述配置參數(shù)。你可以在init.ora中找到這些參數(shù)。正確地設置這些參數(shù)將對數(shù)據(jù)庫性能產生積極影響。如果你使用Oracle的時間很長,可能經(jīng)歷版本變換(包括次版本號變換),請注意核對這些參數(shù)。