oracle資料庫巡檢
作為一個開發/測試人員,或多或少都得和資料庫打交道,而對資料庫的操作歸根到底都是SQL語句,所有操作到最後都是操作數據,那麼對sql性能的掌控又成了我們工作中一件非常重要的工作。下面簡單介紹下一些查看oracle性能的一些實用方法:
1、查詢每台機器的連接數
selectt.MACHINE,count(*)fromv$sessiontgroupbyt.MACHINE
這里所說的每台機器是指每個連接oracle資料庫的伺服器,每個伺服器都有配置連接資料庫的連接數,以websphere為例,在數據源中,每個數據源都有配置其最大/最小連接數。
執行SQL後,可以看到每個伺服器連接oracle資料庫的連接數,若某個伺服器的連接數非常大,或者已經達到其最大連接數,那麼這台伺服器上的應用可能有問題導致其連接不能正常釋放。
2、查詢每個連接數的sql_text
v$session表裡存在的連接不是一直都在執行操作,如果sql_hash_value為空或者0,則該連接是空閑的,可以查詢哪些連接非空閑,web3是機器名,就是WebSphereApplicationServer的主機名。
selectt.sql_hash_value,t.*fromv$sessiontwheret.MACHINE='web3'andt.sql_hash_value!=0
這個SQL查詢出來的結果不能看到具體的SQL語句,需要看具體SQL語句的執行下面的方法。
3、查詢每個活動的連接執行什麼sql
selectsid,username,sql_hash_value,b.sql_text
fromv$sessiona,v$sqltextb
wherea.sql_hash_value=b.HASH_VALUEanda.MACHINE='web3'
orderbysid,username,sql_hash_value,b.piece
orderby這句話的作用在於,sql_text每條記錄不是保存一個完整的sql,需要以sql_hash_value為關鍵id,以piece排序,如圖
Username是執行SQL的資料庫用戶名,一個sql_hash_value下的SQL_TEXT組合成一個完整的SQL語句。這樣就可以看到一個連接執行了哪些SQL。
4、.從V$SQLAREA中查詢最佔用資源的查詢
selectb.usernameusername,a.disk_readsreads,a.executionsexec,
a.disk_reads/decode(a.executions,0,1,a.executions)rds_exec_ratio,
a.sql_textStatement
fromv$sqlareaa,dba_usersb
wherea.parsing_user_id=b.user_id
anda.disk_reads>100000
orderbya.disk_readsdesc;
用buffer_gets列來替換disk_reads列可以得到佔用最多內存的sql語句的相關信息。
V$SQL是內存共享SQL區域中已經解析的SQL語句。
該表在SQL性能查看操作中用的比較頻繁的一張表,關於這個表的詳細信息大家可以去http://apps.hi..com/share/detail/299920#上學習,介紹得比較詳細。我這里主要就將該表的常用幾個操作簡單介紹一下:
1、列出使用頻率最高的5個查詢:
selectsql_text,executions
from(selectsql_text,executions,
rank()over
(orderbyexecutionsdesc)exec_rank
fromv$sql)
whereexec_rank<=5;
該查詢結果列出的是執行最頻繁的5個SQL語句。對於這種實用非常頻繁的SQL語句,我們需要對其進行持續的優化以達到最佳執行性能。
2、找出需要大量緩沖讀取(邏輯讀)操作的查詢:
selectbuffer_gets,sql_text
from(selectsql_text,buffer_gets,
dense_rank()over
(orderbybuffer_getsdesc)buffer_gets_rank
fromv$sql)
wherebuffer_gets_rank<=5;
這種需要大量緩沖讀取(邏輯讀)操作的SQL基本是大數據量且邏輯復雜的查詢中會遇到,對於這樣的大數據量查詢SQL語句更加需要持續的關注,並進行優化。
3、持續跟蹤有性能影響的SQL。
SELECT*FROM(
SELECTPARSING_USER_ID,EXECUTIONS,SORTS,
COMMAND_TYPE,DISK_READS,sql_textFROMv$sqlarea
ORDERBYdisk_readsDESC
)
WHEREROWNUM<10
這個語句在SQL性能查看中用的比較多,可以明顯的看出哪些SQL會影響到資料庫性能。
本文主要介紹了使用SQL查詢方式查看oracle資料庫SQL性能的部分常用方法。此外還有許多工具也能實現SQL性能監控,大家可以在網上搜索相關知識進行學習。
轉載僅供參考,版權屬於原作者
② oracle 檢查資料庫設置哪些event
如何查詢會話 event
很多時候,我們在資料庫中設置了event,如何確認設置的event生效或者如何確認你的庫中設置了什麼event.下面的文章測試了在11g中比較方便的方法資料庫版本
[sql] view plain 在CODE上查看代碼片派生到我的代碼片SQL>select*fromv$version;
BANNER
--------------------------------------------------------------------------------OracleDatabase11g Enterprise Edition Release 11.2.0.3.0 - 64bit ProctionPL/SQL Release 11.2.0.3.0 - Proction
CORE 11.2.0.3.0 Proction
TNSforSolaris: Version 11.2.0.3.0 - ProctionNLSRTL Version 11.2.0.3.0 - Proction
設置測試event
[sql] view plain 在CODE上查看代碼片派生到我的代碼片SQL>alter session set events '10510 trace name context forever,level 1';Session altered.
SQL>alter session set events '10046 trace name context forever,level 4';Session altered.
SQL>alter system set events '60025 trace name context forever';System altered.
SQL>alter system set events '10513 trace name context forever,level 2';System altered.
測試spfile參數中是否有event
[sql] view plain 在CODE上查看代碼片派生到我的代碼片SQL>create pfile='/tmp/pfile'fromspfile;
File created.
solaris*orcl-/home/oracle$ grep -i event /tmp/pfile--無記錄
SQL> show parameter event;
NAME TYPE VALUE------------------------------------ ----------- -----------------event stringxml_db_events string enable證明設置event不會在spfile中記錄
查詢會話event
[sql] view plain 在CODE上查看代碼片派生到我的代碼片--dbms_system實現
SQL> set serveroutput on size 1000000
SQL> declare
2 event_level number;
3 begin
4 for i in 1..100000 loop
5 sys.dbms_system.read_ev(i,event_level);6 if (event_level > 0) then
7 dbms_output.put_line('Event '||to_char(i)||' set at level '||8 to_char(event_level));
9 end if;
10 end loop;
11 end;
12 /
Event 10510 set at level 1
Event 10513 set at level 2
Event 60025 set at level 1
PL/SQL procere successfully completed.
--oradebug實現
SQL> oradebug SETMYPID
Statement processed.
SQL> oradebug eventmp session
10510 trace name context forever,level 1
10513 trace name context forever,level 2
60025 trace name context forever
sql_trace level=4
測試證明使用dbms_system可以捕獲到event,oradebug可以捕獲到本身會話,還可以通過setospid/setorapid來跟蹤其他會話的event設置情況.event 10046對應的本質是sql_trace所以使用dbms_system不能捕獲到10046經過學習和測試,總結可以使用oradebug來實現:
[sql] view plain 在CODE上查看代碼片派生到我的代碼片SQL> oradebug SETMYPID
Statement processed.
SQL> oradebug eventmp session
或
SQL> oradebug eventmp system
就可以查看系統級或會話級的事件設置了
③ Oracle DBA應該定期做什麼
本文從整體上介紹了一個dba的職責和任務等等。 ORACLE資料庫管理員應按如下方式對ORACLE資料庫系統做定期監控: (1). 每天對ORACLE資料庫的運行狀態,日誌文件,備份情況,資料庫的空間使用情況,系統資源的使用情況進行檢查,發現並解決問題。 (2). 每周對資料庫對象的空間擴展情況,數據的增長情況進行監控,對資料庫做健康檢查,對資料庫對象的狀態做檢查。 (3). 每月對表和索引等進行Analyze,檢查表空間碎片,尋找資料庫 性能調整的機會,進行資料庫性能調整,提出下一步空間管理 計劃。對ORACLE資料庫狀態進行一次全面檢查。 每天的工作 (1).確認所有的INSTANCE狀態正常 登陸到所有資料庫或常式,檢測ORACLE後台進程: $ps ?ef|grep ora (2). 檢查文件系統的使用(剩餘空間)。如果文件系統的剩餘空間小於20%,需刪除不用的文件以釋放空間。 $df ?k (3). 檢查日誌文件和trace文件記錄alert和trace文件中的錯誤。 連接到每個需管理的系統 ? 使用』telnet』 ? 對每個資料庫,cd 到bmp目錄,通常是$ORACLE_BASE//bmp ?使用 Unix 『tail』命令來查看alert_.log文件 ?如果發現任何新的ORA- 錯誤,記錄並解決 (4). 檢查資料庫當日備份的有效性。 對RMAN備份方式: 檢查第三方備份工具的備份日誌以確定備份是否成功 對EXPORT備份方式: 檢查exp日誌文件以確定備份是否成功 對其他備份方式: 檢查相應的日誌文件 (5). 檢查數據文件的狀態記錄狀態不是「online」的數據文件,並做恢復。 Select file_name from dba_data_files where status=』OFFLINE』 (6). 檢查表空間的使用情況 SELECT tablespace_name, max_m, count_blocks free_blk_cnt, sum_free_m,to_char(100*sum_free_m/sum_m, 』ArrayArray.ArrayArray』) || 』%』 AS pct_free FROM ( SELECT tablespace_name,sum(bytes)/1024/1024 AS sum_m FROM dba_data_files GROUP BY tablespace_name), ( SELECT tablespace_name AS fs_ts_name, max(bytes)/1024/1024 AS max_m, count(blocks) AS count_blocks, sum(bytes/1024/1024) AS sum_free_m FROM dba_free_space GROUP BY tablespace_name ) WHERE tablespace_name = fs_ts_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). 監控資料庫性能 運行bstat/estat生成系統報告 或者使用statspack收集統計數據 (Array). 檢查資料庫性能,記錄資料庫的cpu使用、IO、buffer命中率等等 使用vmstat,iostat,glance,top等命令 (10). 日常出現問題的處理。 每周的工作 (1). 控資料庫對象的空間擴展情況 根據本周每天的檢查情況找到空間擴展很快的資料庫對象,並採取相 應的措施 -- 刪除歷史數據 --- 擴表空間 alter tablespace add datafile 『』 size --- 調整數據對象的存儲參數 next extent pct_increase (2). 監控數據量的增長情況 根據本周每天的檢查情況找到記錄數量增長很快的資料庫對象,並采 取相應的措施 -- 刪除歷史數據 --- 擴表空間 alter tablespace add datafile 『』 size (3). 系統健康檢查 檢查以下內容: init.ora controlfile redo log file archiving 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_mp_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). 檢查無效的trigger SELECT owner, trigger_name, table_name, status FROM dba_triggers WHERE status = 』DISABLED』 每月的工作 (1). Analyze Tables/Indexes/Cluster analyze table estimate statistics sample 50 percent; (2). 檢查表空間碎片 根據本月每周的檢查分析資料庫碎片情況,找到相應的解決方法 (3). 尋找資料庫性能調整的機會 比較每天對資料庫性能的監控報告,確定是否有必要對資料庫性能進 行調整 (4). 資料庫性能調整 如有必要,進行性能調整 (5). 提出下一步空間管理計劃 根據每周的監控,提出空間管理的改進方法 Oracle DBA 日常管理 目的:這篇文檔有很詳細的資料記錄著對一個甚至更多的ORACLE 資料庫每天的,每月的, 每年的運行的狀態的結果及檢查的結果,在文檔的附錄中你將會看到所有檢查,修改的SQL 和PL/SQL 代碼。 一.日維護過程 A.查看所有的實例是否已起 確定資料庫是可用的,把每個實例寫入日誌並且運行日報告或是運行測試 文件。當然有一些操作我們是希望它能自動運行的。 可選擇執行:用ORACLE 管理器中的『PROBE』事件來查看 B.查找新的警告日誌文件 1. 聯接每一個操作管理系統 2. 使用『TELNET』或是可比較程序 3. 對每一個管理實例,經常的執行$ORACLE_BASE//bmp 操 作,並使其能回退到控制資料庫的SID。 4. 在提示下,使用UNIX 中的『TAIL』命令查看alert_.log,或是 用其他方式檢查文件中最近時期的警告日誌 5. 如果以前出現過的一些ORA_ERRORS 又出現,將它記錄到資料庫 恢復日誌中並且仔細的研究它們,這個資料庫恢復日誌在〈FILE〉中 C.查看DBSNMP 的運行情況 檢查每個被管理機器的『DBSNMP』進程並將它們記錄到日誌中。 在UNIX 中,在命令行中,鍵入ps ?ef | grep dbsnmp,將回看到2 個 DBSNMP 進程在運行。如果沒有,重啟DBSNMP。 D.查資料庫備份是否成功 E.檢查備份的磁帶文檔是否成功 F.檢查對合理的性能來說是否有足夠的資源 1. 檢查在表空間中有沒有剩餘空間。 對每一個實例來說,檢查在表空間中是否存在有剩餘空間來滿足當天 的預期的需要。當資料庫中已有的數據是穩定的,數據日增長的平均 數也是可以計算出來,最小的剩餘空間至少要能滿足每天數據的增 長。 A) 運行『FREE.SQL』來檢查表空間的剩餘空間。 B) 運行『SPACE.SQL』來檢查表空間中的剩餘空間百分率 2. 檢查回滾段 回滾段的狀態一般是在線的,除了一些為復雜工作準備的專用 段,它一般狀態是離線的。 a) 每個資料庫都有一個回滾段名字的列表。 b) 你可以用V$ROLLSTAT 來查詢在線或是離線的回滾段的現在狀 態. c) 對於所有回滾段的存儲參數及名字, 可用 DBA_ROLLBACK_SEGS 來查詢。但是它不如V$ROLLSTAT 准確。 3. 識別出一些過分的增長 查看資料庫中超出資源或是增長速度過大的段,這些段的存儲參 數需要調整。 a) 收集日數據大小的信息, 可以用 『ANALYZE5PCT.SQL』。如果你收集的是每晚的信息, 則可跳過這一步。
④ Oracle資料庫一些維護性文檔怎麼寫
你說的這個是資料庫開發,和DBA的事情。
1,安裝配置文檔 ----DBA或者運維人員
2,web系統操作手冊---測試人員編寫
3,數據字典文檔---開發提供詳細內容,DBA整理標准文檔
4,故障處理----一般是記錄發生過的故障
5,巡檢文檔----DBA
6,操作記錄文檔---- DBA or 運維人員,記錄伺服器所有的操作。
7,備份定時任務。。。。等等
⑤ 資料庫運維服務具體有哪些
資料庫運維服務是指:針對用戶資料庫開展的軟體安裝、配置優化、備份策略選擇及實施、數據恢復、數據遷移、故障排除、預防性巡檢等一系列服務。
主要服務內容如下:
1、資料庫安裝與配置;主要指定製資料庫安裝配置方案,檢查軟體安裝環境,安裝資料庫軟體,完成資料庫配置,並測試之;
2、資料庫性能優化: 主要是指核心參數調優,SQL語句調優,性能評估方案的提供。
3、資料庫備份與恢復;主要是指本地、異地、同步、實時的分級備份與恢復方案及實施;
4、數據遷移:不同版本、不同廠商、不同結構資料庫間的數據遷移;
5、故障排除;通過遠程、上門等方式按服務級別實施故障排除
6、預防性巡檢;定期提供預防性巡檢,並完成系統參數、配置調優,及補丁分發、安裝服務。