DBA 職責及日常工作職責:
1.安裝和升級數據庫服務器,以及應用程序工具構建和配置網絡環境.
2.熟悉數據庫系統的存儲結構預測未來的存儲需求,制訂數據庫的存儲方案.
3.根據開發人員設計的應用系統需求創建數據庫存儲結構.
4.根據開發人員設計的應用系統需求創建數據庫對象
5.根據開發人員的反饋信息,在必要的時候修改數據庫的結構
6.管理數據庫的用戶維護數據庫的安全性
7.控制和監控用戶對數據庫的存取訪問
8.監控和優化數據庫的性能
9.制定數據庫備份計劃,災難出現時對數據庫信息進行恢復
10.備份和恢復數據庫
11.聯繫數據庫系統生產廠商,跟蹤技術信息
12.解決客戶端中間層和服務器的鏈接問題
13.保證安全連接
每日工作:
1 確保服務器工作狀態正常,各類數據庫狀態正常
2 檢查硬盤空間是否夠用
3 查看數據庫日誌,查看跟蹤文件,檢查是否有錯誤信息
4 檢查備份的有效性
5 通過系統的性能監視器對服務器的性能參數監控發現數據庫的性能是否下降,尋找原因並解決
6 填寫dba日誌
每週工作:
1 監控數據庫對象的空間擴展情況
2 決定是否調整存儲參數
3 對系統健康檢查
4 檢查刪除沒有任何意義的數據對象
5 檢查刪除沒有意義的約束和觸發器
6 對每週的備份檢查處理
每月工作:
1 根據上面的檢查情況,分析數據庫中是否有影響性能的存儲碎片存在
2 根據數據庫性能的歷史數據,決定如何優化性能
3 處理每日每週每月的備份
4 總結工作,提出下一步的管理計劃
Oracle DBA日常工作總結
Oracle管理員應按如下方式對Oracle數據庫系統做定期監控:
1、每天對Oracle數據庫的運行狀態、日誌文件、備份情況、數據庫空間使用情況、系統資源使用情況進行檢查,發現並解決問題。
2、每週對數據庫對象的空間擴展情況、數據的增長情況進行監控、對數據庫做健康檢查、對數據庫對象的狀態做檢查。
3、每月對錶和索引等進行analyze、檢查表空間碎片、尋找數據庫性能調整的機會、進行數據庫性能調整、提出下一步空間管理計劃。對Oracle數據庫狀態進行一次全面檢查。
每天工作
1、確認所有的instance狀態正常登錄到所有數據庫或實例,檢測Oracle後臺進程:#ps -ef | grep ora
2、檢查文件系統的使用(剩餘空間)。如果文件系統的剩餘空間小於20%,需刪除不用的文件以釋放空間。#df -k
3、檢查日誌文件和trace文件記錄alert和trace文件中的錯誤。 cd $Oracle_BASE/oradata/<sid>/bdump
tail -f alert_<sid>.log
發現任何新的ORA_錯誤,記錄並解決
4、檢查數據庫當日備份的有效性
對RMAN備份方式,檢查第三方備份工具的備份日誌以確定備份是否成功
對EXPORT備份方式,檢查exp日誌文件以確定備份是否成功
對其它備份方式,檢查相應的日誌文件
5、檢查數據文件的狀態記錄狀態不是“online"的數據文件,並做恢復。
select file_name from dba_data_files where status="OFFLINE"
6、檢查表空間的使用情況select a.tablespace_name,round((total-free)/total,3)*100 pecent
from (select tablespace_name,sum(bytes) free from dba_free_space group by tablespace_name) a,
(select tablespace_name,sum(bytes) total from dba_data_files group by tablespace_name) b
where a.tablespace_name=b.tablespace_name
7、檢查剩餘表空間select tablespace_name,sum(blocks) as free_blk,trunc(sum(bytes)/(1024*1024)) as free_m,
max(bytes)/(1024) as big_chunk_k,count(*) as num_chunks
from dba_free_space group by tablespace_name;
8、監控數據庫性能
運行utlbstat.sql/utlestat.sql生成系統報告,或者使用statspace收集統計數據
9、檢查數據庫性能,記錄數據庫的CPU使用、IO、Buffer命中率等等,使用vmstat,iostat,glance,top
10、日常出現問題的處理
每週的工作
1、控制數據庫對象的空間擴展情況,根據本週每天的檢查情況找到空間擴展很快的數據庫對象,並採取相應的措施。
刪除歷史數據、擴展表空間alter tablespace <name> add datafile '<file>' size <size>
調整數據對象的存儲參數 next extent pct_increase
2、監控數據量的增長情況
根據本週每天的檢查情況找到記錄數據數量增長很快的數據庫對象,並採取相應的措施
刪除歷史數據、擴表空間
alter tablespace <name> add datafile '<file>' size <size>
3、系統健康檢查
檢查以下內容:init<sid>.ora
controlfile
redo log file
archiveing
sort area size
tablespace(system,temporary,tablespace fragment)
datafiles(autoextend,location)
object(number of extent,next extent,index)
rollback segment
logging & tracing(alert.log,max_dump_file_size,sqlnet)
4、檢查無效的數據庫對象
select owner,object_name,object_type from dba_objects where status='INVALID'
5、檢查不起作用的約束
select owner,constraint_name,table_name,constraint_type,status from dba_constraints
where status='DISABLED' and constraint_type='p'
6、檢查無效的triggerselect owner,trigger_name,table_name,status from dba_triggers
where status='DISABLED'
每月的工作
1、Analyze tables/indexes/cluster
analyze table <name> estimate statistics sample 50 percent;
2、檢查表空間碎片
根據本月每週的檢查分析數據庫碎片,找到相應的解決方法
3、尋找數據庫性能調整機會
比較每天對數據庫性能的監控報告,確定是否有必要對數據庫性能進行調整
4、數據庫性能調整,如有必要進行性能調整
5、提出下一步空間管理計劃,根據每週的監控,提出空間管理的改進方法
1、設計階段:對其邏輯結構和物理結構進行優化設計,使之在滿足需求條件的情況下,系統性能達到最佳,系統開銷達到最小;
2、數據庫運行階段:採取操作系統級、數據庫級的一些優化措施來使系統性能最佳;
2. 在系統設計開發階段調整數據庫
爲了充分利用Oracle數據庫的功能特性,在設計信息系統時,數據庫設計人員需要根據業務情況(如訪問量或客戶端數量)和現有資源狀況(如數據庫服務器的配置)考慮系統結構和數據庫的邏輯結構的設計:
2.1調整應用程序結構設計。
即應用程序採用的是傳統的C/S兩層體系結構,還是B/W/D三層體系結構。不同的應用程序體系結構要求的數據庫資源是不同的。
2.2恰當使用分區、索引及存檔功能。
如果某種業務的數據量增長非常快,可以考慮存放該業務的數據庫表是否使用Oracle數據庫的分區功能;對於經常訪問的數據庫表是否需要建立索引;對於經常訪問但是當業務流程完成後不再變動的數據可採用放入歷史檔案的方法來實現應用系統中訪問儘可能少的數據量。
2.3恰當編寫訪問數據的SQL語句。
良好的SQL語句可以被數據庫重複使用而減少分析時間;恰當的使用索引可使訪問的數據塊大大減少從而減少響應時間。應用程序的執行最終將歸結爲數據庫中的SQL語句執行,因此SQL語句的執行效率決定了Oracle數據庫的性能。Oracle公司推薦使用Oracle語句優化器(Oracle Optimizer)和行鎖管理器(row-level manager)來調整優化SQL語句。
2.4調整硬盤I/O
這一步是在信息系統開發之前完成的。數據庫管理員可以將組成同一個表空間的數據文件放在不同的硬盤上,做到硬盤之間I/O負載均衡。在磁盤比較富裕的情況下還應該遵循以下原則:
將表和索引分開;
創造用戶表空間,與系統表空間(system)分開磁盤;
創建表和索引時指定不同的表空間;
創建回滾段專用的表空間,防止空間競爭影響事務的完成;
創建臨時表空間用於排序操作,儘可能的防止數據庫碎片存在於多個表空間中。
2.5確定數據塊大小和存儲參數。
由於數據庫的塊大小在數據庫創建以後就不能在修改(除非重建數據庫),因此爲了減少數據鏈接和行遷移,又提高磁盤空間的利用率,在設計數據庫時要確定合適的數據塊大小和存儲參數。通常我們是根據樣例數據確定數據塊大小,而根據業務現狀和未來發展趨勢確定存儲參數。
3. 在數據庫運行階段調整數據庫
數據庫運行階段調整數據庫包括兩個方面:操作系統級的調整;數據庫級的調整。
3.1 操作系統級的調整
實施操作系統級調整的主要目的是減少內存交換,減少分頁,使SGA(System Globle Area)可留駐內存。
3.1.1減少內存交換
內存交換(swapping)可能會造成很大的內存開銷,應將它最小化。運行在Solaris Unix操作系統上的Oracle數據庫,可利用vmstat或sar命令來檢查交換,查看到系統級內存和硬盤I/O的使用情況,調整unix數據緩衝池的大小、每個進程所能使用的內存大小等參數。
vmstat命令
它報告Solaris上的進程、虛擬內存、磁盤、分頁和CPU的活動情況。下面命令將顯示系統每5秒鐘做的事情的概要:
% vmstat 5
sar命令
用於監控交換、分頁、磁盤和CPU活動。下面命令用於每10秒顯示10次分頁活動的概要:
% sar -p 10 10
若系統內存交換較多,且需要節省內存,可採用以下措施:
1) 避免運行不必要的系統daemon進程或應用程序進程;
2) 在不明顯影響數據塊命中率的前提下減少數據庫緩衝區的數量,以釋放一些內存;
3) 減少UNIX文件緩衝區的數量(特別是在使用裸設備時)。
3.1.2控制分頁
少量的內存分頁不會太顯著地影響系統的性能,因爲應用程序不必全部放在內存中。但是分頁過多將會造成系統性能下降。爲了檢測過多的分頁,可在快速響應或空閒期間運行測量,並與響應遲緩時的測量進行比較。可通過以下辦法來解決:
使用vmstat或sar -p監控分頁;
安裝更多的內存;
將一些工作移到另一系統中;
配置系統核心使用更少的內存;
保持SGA在單個共享內存段中。
3.1.3使SGA(System Globle Area)留駐內存
SGA是對數據庫數據進行快速訪問的一個系統全局區,若SGA本身需要頻繁地進行釋放、分配,則不可能達到快速訪問數據的目的,因此,要求SGA駐留內存。這時,我們可以重新配置UNIX核心,調整一些操作系統參數以達到增加共享內存的目的。
3.2 數據庫級的調整
每一個Oracle實例都是由一組Oracle後臺進程和SGA的一個內存區組成的。這組後臺進程會自動的讀寫數據庫的數據文件,因此,數據庫性能可以被這些因素所影響:SGA各部分的分配是否合理,使用效率是否正常;I/O和鎖競爭是否較多。
3.2.1 SGA的分配及使用效率
分配給每個實例的內存,即SGA的使用效率如何,會大大影響數據庫系統的性能。SGA由下列部分組成:共享池、數據塊緩衝區、重做日誌緩衝區、大池組成。
l 共享池(Shared pool)
共享池存放庫緩存(存儲共享SQL和PL/SQL區)和數據字典緩存(數據庫對象信息)以及會話期間信息(對於MTS)。由於這些信息是應用程序需要經常訪問的,因此這些信息需要保持高的命中率。可以通過以下語句來確認共享池數據的命中率:
庫緩存:
select gethitratio from v$librarycache 應大於90%
select sum(reloads)/sum(pins) from v$librarycache 應小於1%
數據字典緩存:
select sum(getmisses)
/sum(gets) from v$rowcache 應小於15%
由於程序設計人員的水平參差不齊,可能存在大的匿名塊,這會導致SQL不能重用,因此需要找出大的匿名塊以轉換爲存儲過程達到重用:
select * from v$sqlarea where command_type=47 and length(sql_text)>500
而對於一些應用系統非常頻繁使用的SQL對象如存儲過程、函數、包等,可以通過釘在內存中的方式來防止由於共享池太小被移出:
exec dbms_shared_pool.keep(對象名)
數據塊緩衝區(Db block buffer):
數據塊緩衝區存放用戶所經常訪問的數據文件的數據塊內容以及用戶修改的數據內容。數據庫把數據文件裏的內容讀到內存中,下次需要時直接從內存中讀取,從而減少了磁盤的I/O和響應時間。當然,一般只在比較小的數據表(如常用代碼表)才緩存到內存中。
由於數據快緩衝區中不可能存放所有的數據,因此可使用LRU算法來確定移出哪些數據塊,但又儘量保證有較高的數據命中率。
查看數據塊命中率的SQL語句爲:
select 1-(phy.value/(cur.value+con.value)) from v$sysstat cur,v$sysstat con,v$sysstat phy
where cur.name='db block gets' and con.name='consistent gets'
and phy.name='physical gets'
如果這個命中率小於0.85,就要考慮爲數據塊緩衝區分配更多的內存了。
重做日誌緩衝區(Log buffer):
重做日誌緩衝區存放從用戶內存區複製來的每個DML或DDL語句的重做條目。如果這個緩衝區分配太小會導致沒有足夠的空間來放重做條目而等待。
3.2.2 I/O和資源競爭
由於有衆多的進程要寫數據文件,因此需要通過I/O調整來解決I/O瓶頸問題。如果在設計階段有效地考慮了表空間的合理分配,就能有效地在一定程度上減少I/O競爭。在數據庫運行時,由於數據的動態增長,原來分配給表或索引的空間已經用完,Oracle會自動分配空間給這些數據庫對象。而這個動態分配會對系統性能有所影響,所以要求:
避免動態空間管理
表空間的本地化管理,以減少與數據字典表空間的磁盤競爭。
在系統設計和試運行階段數據量相對較小,效率低下的SQL可能並不會影響系統響應時間,但當系統數據量增長到一定程度時,需要在系統運行時監控並找出是哪些SQL不能有效使用索引或缺少索引,並進行相應調整:建立索引;修改SQL寫法。
另外,在Oracle中,需要採用一些機制來保證數據庫對象在使用期間的穩定性和數據的一致性,如使用鎖存器(latch)、鎖(lock)等。因此爭用和這些機制相關的資源會影響數據庫的性能。爲了減少這種資源競爭,可以通過調整數據庫的相關初始化參數(如db_block_lru_latches、dml_locks)來減少資源的爭用,優化數據庫性能。
4. 一些常用的性能優化手段和工具
Oracle數據庫系統提供了一些工具和腳本來獲取數據庫的性能指標和優化的方法。如使用utlbstat.sql和utlestat.sql腳本獲取一段時間內數據庫的內存、磁盤I/O等的情況;使用動態性能視圖和數據字典視圖來獲取命中率和系統等待事件等信息。當然,也可以使用Oracle Enterprise Manager圖形化工具來監控。
5. 結束語
Oracle數據庫的性能調整相當重要,但難度也較大。數據庫管理員需要綜合運用上面介紹的規律,在數據庫建立時,就能根據應用的需要合理設計分配表空間以及存儲參數、內存使用初始化參數,對以後的數據庫性能有很大的益處。只有認真分析Oracle運行過程當中出現的各種性能問題,才能保證Oracle數據庫高效可靠地運行。還需要指出的是:數據庫的性能調整是一個系統工程,涉及的方面很多,不能僅僅根據一個時間點的情況就斷定數據庫運行性能的好與壞。如何有效地進行調整,數據庫管理員需要經過反反覆覆的過程。這些都需要在大量的實踐工作中不斷地積累經驗,從而更好地進行數據庫的調優。