資料字典簡介和資料字典命中率

達芬奇的夢發表於2017-03-20

select * from dictionary;

  --資料字典

  資料字典是Oracle存放有關資料庫資訊的地方,其用途是用來描述資料的。

  比如一個表的建立者資訊,建立時間資訊,所屬表空間資訊,使用者訪問許可權資訊等。

  資料庫資料字典是一組表和檢視結構。它們存放在SYSTEM表空間中

  當使用者在對資料庫中的資料進行操作時遇到困難就可以訪問資料字典來檢視詳細的資訊。

  使用者可以用SQL語句訪問資料庫資料字典。

  資料字典內容包括:

  1,資料庫中所有模式物件的資訊,如表、檢視、簇、及索引等。

  2,分配多少空間,當前使用了多少空間等。

  3,列的預設值。

  4,約束資訊的完整性。

  5,Oracle使用者的名字。

  6,使用者及角色被授予的許可權。

  7,使用者訪問或使用的審計資訊。

  8,其它產生的資料庫資訊。

  Oracle中的資料字典有靜態和動態之分。

  1,靜態資料字典-->主要是在使用者訪問資料字典時不會發生改變的,

  --例如某使用者建立的表

  2,動態資料字典-->是依賴資料庫執行的效能的,反映資料庫執行的一些內在資訊,所以在訪問這類資料字典時往往不是一成不變的。

  --當前鎖住的物件

  靜態資料字典:這類資料字典主要是由表和檢視組成

  資料字典中的表是不能直接被訪問的,但是可以訪問資料字典中的檢視。

  靜態資料字典中的檢視分為三類,它們分別由三個字首夠成:user_*、 all_*、 dba_*。

  user_*

  該檢視儲存了關於當前使用者所擁有的物件的資訊。(即所有在該使用者模式下的物件)

  all_*

  該試圖儲存了當前使用者能夠訪問的物件的資訊。(與user_*相比,all_* 並不需要擁有該物件,只需要具有訪問該物件的許可權即可)

  dba_*

  該檢視儲存了資料庫中所有物件的資訊。(前提是當前使用者具有訪問這些資料庫的許可權,一般來說必須具有管理員許可權)

  -----------------------------------------------------------------------------------------------------------

  select * from dictionary;

  --查詢該使用者擁有哪些表

  --user_tables主要描述當前使用者擁有的所有表的資訊,

  ----主要包括表名、表空間名、簇名等。透過此檢視可以清楚瞭解當前使用者可以操作的表有哪些

  desc user_tables;

  select table_name from user_tables;

  select * from user_tables;

  --查詢該使用者擁有哪些索引

  select index_name from user_indexes;

  --查詢該使用者擁有哪些檢視

  select view_name from user_views;

  --查詢該使用者擁有哪些資料庫物件,物件包括表、檢視、儲存過程、觸發器、包、索引、序列、JAVA檔案等。

  select object_name from user_objects;

  --主要描述當前使用者的資訊,主要包括當前使用者名稱、帳戶id、帳戶狀態、表空間名、建立時間等。

  select * from user_users;

  -----------------------------------------------------------------------------------------------------------

  --user_/all_區別:

  ----all_列出來的資訊是當前使用者可以訪問的物件而不是當前使用者擁有的物件。

  --查詢某一使用者下的所有表、過程、函式等資訊。

  select owner , object_name ,object_type from all_objects

  -----------------------------------------------------------------------------------------------------------

  --對於dba_開頭的需要管理員許可權,

  --查詢表空間的資訊(當前使用者必須擁有DBA角色)。

  select * from dba_data_files

  -----------------------------------------------------------------------------------------------------------

  動態資料字典

  Oracle包含了一些潛在的由系統管理員如SYS維護的表和檢視,由於當資料庫執行的時候它們會不斷進行更新,所以稱它們為動態資料字典(或者是動態效能檢視)。這些檢視提供了關於記憶體和磁碟的執行情況,所以我們只能對其進行只讀訪問而不能修改它們。

  Oracle中這些動態效能檢視都是以v$開頭的檢視.

  v$access

  該檢視顯示資料庫中鎖定的資料庫物件以及訪問這些物件的會話物件(session物件)。

  select * from v$access

  v$session

  該檢視列出當前會話的詳細資訊。

  v$active_instance

  該檢視主要描述當前資料庫下的活動的例項的資訊。依然可以使用select語句來觀察該資訊。

  v$context

  該檢視列出當前會話的屬性資訊。比如名稱空間、屬性值等

 

V$ROWCACHE

  本檢視顯示資料字典快取(也叫rowcache)的各項統計。每一條記錄包含不同型別的資料字典快取資料統計,注意資料字典快取有層次差別,因此同樣的快取名稱可能不止一次出現。

V$ROWCACHE常用列

l         PARAMETER:快取名

l         COUNT:快取項總數

l         USAGE:包含有效資料的快取項數

l         GETS:請求總數

l         GETMISSES:請求失敗數

l         SCANS:掃描請求數

l         SCANMISSES:掃描請求失敗次數

l         MODIFICATIONS:新增、修改、刪除運算元

l         DLM_REQUESTS:DLM請求數

l         DLM_CONFLICTS:DLM衝突數

l         DLM_RELEASES:DLM釋放數

使用V$ROWCACHE資料

1>.確認資料字典快取是否擁有適當的大小。如果shared pool過小,那資料字典快取就不足以擁有合適的大小以快取請求資訊。

2>.確認應用是否有效訪問快取。如果應用設計未能有效使用資料字典快取(比如,大資料字典快取並不有助於解決效能問題)。例如,DC_USERS快取在過去某段時期內出現大量GETS,看起來像是資料庫中建立了大量的不同使用者,並且應用記錄下使用者頻繁登陸和登出。透過檢查logon比率以及系統使用者數可以驗證上述資料。同時解析比率也會很高,如果這是一個大型的OLTP系統的中間層,它可能在中間層更有效的管理個別帳戶,允許中間層以單使用者登陸成為應用所有者。透過保持活動連線來減少logon/logoff比率也同樣有效。

3>.確認是否發生動態空間分配。DC_SEGMENTS, DC_USED_EXTENTS, 以及DC_FREE_EXTENTS大量的類似大小修改將指出存在大量動態空間分配。可行的解決方案包括指定下一個區大小或者使用本地管理表空間。如果發生空間分配的是臨時的表空間,則可以為其指定真正的臨時表空間(If the space allocation is occurring on the temp tablespace, then use a true temporary tablespace for the temp. )。

4>.dc_sequences值的變化指出是否大量sequence號正在產生。

5>.蒐集硬解析的證據。硬解析常表現為大量向DC_COLUMNS, DC_VIEWS 以及 DC_OBJECTS caches的gets。

示例:

1.分組統計資料字典統計項

SELECT parameter,sum("COUNT"),sum(usage),sum(gets),sum(getmisses),

       sum(scans),sum(scanmisses),sum(modifications),

       sum(dlm_requests),sum(dlm_conflicts),sum(dlm_releases)

FROM V$ROWCACHE

GROUP BY parameter;

2.檢查資料字典的命中率

select 1 - sum(getmisses) / sum(gets) "data dictionary hitratio" from v$rowcache;

資料字典命中率

SQL> col parameter format a21
SQL> col pct_succ_gets format 999.9
SQL> col updates format 999,999,999
SQL> select parameter,sum(gets),sum(getmisses)
  2  ,100*sum(gets-getmisses)/sum(gets) pct_succ_gets
  3  ,sum(modifications) updates
  4  from v$rowcache where gets>0
  5  group by parameter;

PARAMETER              SUM(GETS) SUM(GETMISSES) PCT_SUCC_GETS      UPDATES
--------------------- ---------- -------------- ------------- ------------
dc_tablespaces              8148             10          99.9            0
dc_awr_control                39              1          97.4            2
dc_object_grants              82              5          93.9            0
dc_histogram_data           4880           1085          77.8            0
dc_rollback_segments         357             21          94.1           31
dc_sequences                   6              6            .0            6
sch_lj_objs                    1              1            .0            0
dc_segments                 2447            656          73.2            5
dc_objects                 24446           3989          83.7          146
dc_database_links              2              1          50.0            0
dc_histogram_defs          10976           3629          66.9           16

PARAMETER              SUM(GETS) SUM(GETMISSES) PCT_SUCC_GETS      UPDATES
--------------------- ---------- -------------- ------------- ------------
dc_users                   26299             83          99.7            0
outstanding_alerts            23             11          52.2            4
dc_files                      24              8          66.7            0
dc_global_oids              2587            133          94.9            0
dc_profiles                   28              1          96.4            0
global database name         572              1          99.8            0

已選擇17行。

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

相關文章