動態效能檢視基礎

pingley發表於2012-02-21
動態效能檢視基礎
     oracle維護了一組的虛擬表記錄資料庫的各種活動,稱作動態效能表(dynamicperformance tables),動態效能檢視(dynamic performance views)是建立在這些動態效能表上的檢視,因為其中記錄的資訊在例項啟動以後持續的更新。動態效能視圖也稱為V$檢視或者固化檢視,因為動態效能檢視是不能夠被資料庫管理員修改或者刪除的。
動態效能檢視包括了以下資訊:
1、系統和會話引數。
2、記憶體使用與分配。
3、檔案(包括RMAN 備份檔案)狀態。
4、jobs執行的進度。
5、SQL的執行資訊。
6、各種各樣的統計資訊與度量資訊。
動態效能檢視的主要用途:
1、OEM使用這些檢視獲得資料庫的各種資訊。
2、DBA使用這些檢視進行效能監控與排錯。
注意:這裡所說的動態效能檢視並不是通常所說的檢視,實際上的動態效能檢視是透過V_$字首來標識的,V$字首的動態效能檢視實際上是這些V_$檢視的公共同義詞(publicsynonyms)。動態效能檢視的定義與公共同義詞是由建立資料庫的時候的指令碼:catalog.sql
建立的。下面是catalog.sql指令碼中的幾行程式碼:
Rem     aho        01/03/95 -  add synonym for v$instance, v$mystat,
Rem                            v$sqltext, and v$shared_pool_reserved
Rem     jbellemo   09/02/94 -  add synonym for v$pwfile_users
動態效能檢視並不保證讀一致性,因為其中的資訊是動態更新的。動態檢視基於的虛表並不儲存在資料庫中,位於例項的記憶體中。所以動態效能檢視將會在例項啟動的時候初始化,在例項關閉的時候刪除.動態效能檢視中的資料會在例項啟動以後不斷積累,更新。
sys是動態效能檢視的擁有者,只有sys才能查詢動態效能檢視。
SQL> show user
USER is "PUBLIC"
SQL> select * from V$instance;
select * from V$instance
              *
ERROR at line 1:
ORA-00942: table or view does not exist
對動態效能檢視的查詢許可權只能由sys行使,不能授權給其他使用者。
SQL> grant select on v$instance to hr;
grant select on v$instance to hr
                *
ERROR at line 1:
ORA-02030: can only select from fixed tables/views
[oracle@zeng ~]$ oerr ora 02030
02030, 00000, "can only select from fixed tables/views"
// *Cause:  An attempt is being made to perform. an operation other than
//         a retrieval from a fixed table/view.
// *Action:  You may only select rows from fixed tables/views.
你僅僅能查詢固化表或者檢視,不能執行其他操作。
SQL> delete from V$instance;
delete from V$instance
            *
ERROR at line 1:
ORA-02030: can only select from fixed tables/views
當例項啟動以後,就有部分動態效能檢視可用,這部分動態效能檢視的資訊來源於oracle資料庫例項的資訊(在記憶體中)。部分動態效能檢視要等到資料庫mount以後才可以使用,這部分動態效能檢視的資訊來自control files。部分動態效能檢視要等到資料庫open以後才可以使用.
在nomount階段就可用的動態效能檢視,比如V$instance,V$sysstat,V$bgprocess
SQL> startup nomount
ORACLE instance started.
Total System Global Area  305508352 bytes
Fixed Size                  1336120 bytes
Variable Size             138415304 bytes
Database Buffers          159383552 bytes
Redo Buffers                6373376 bytes
SQL> select instance_name,version,status
  2  from V$instance;
INSTANCE_NAME    VERSION           STATUS
---------------- ----------------- ------------
oracle           11.2.0.1.0        STARTED
在mount階段可用的動態效能檢視比如V$database,V$datafile,V$logfile
SQL> select * from V$database;
select * from V$database
              *
ERROR at line 1:
ORA-01507: database not mounted
SQL> alter database oracle mount;
Database altered.
SQL> select name,created,log_mode,database_role
  2  from V$database;
NAME      CREATED   LOG_MODE     DATABASE_ROLE
--------- --------- ------------ ----------------
ORACLE    05-FEB-12 NOARCHIVELOG PRIMARY
還有一些動態效能檢視要等到資料庫open以後才能“訪問”。比如V$waitstat.
下面是V$waitstat檢視查詢的其中一條記錄。
SQL> select * from v$waitstat;
CLASS                   COUNT       TIME
------------------ ---------- ----------
data block                  0          0
SQL> alter database oracle open;
Database altered.
SQL> select * from v$waitstat;
CLASS                   COUNT       TIME
------------------ ---------- ----------
data block                  3         15
雖然在mount狀態也可查詢V$waitstat,但是沒有意義,其中的記錄的各項值
都是0.等到open以後往動態效能檢視中檢視填充值,這時候的查詢才是有意義的。
     幾乎每一個V$檢視都對應一個GV$(global V$)檢視,在oracle RAC環境下用於查詢RAC中各個例項的V$檢視資訊,所以在GV$檢視中新增了額外的一列inst_id(number 型別).該列指示GV$中的資訊來至於那個RAC例項。該列可以用在查詢過濾中,以便檢視對應RAC例項的V$資訊。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/26110315/viewspace-716841/,如需轉載,請註明出處,否則將追究法律責任。

相關文章