ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 数据字典简介和数据字典命中率

数据字典简介和数据字典命中率

Linux操作系统 作者:达芬奇的梦 时间:2017-03-20 14:02:55 0 删除 编辑

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博客 ” ,链接:https://blog.itpub.net/31444259/viewspace-2135668/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2017-03-15

  • 博文量
    172
  • 访问量
    296703