dryu999 发表于 2018-9-24 09:25:32

Oracle内存结构(02)--缓冲区

  专供数据字典使用的缓冲区,SQL语句分析过程中需要大量访问系统数据字典(从磁盘数据文件中访问数据字典成为recursive calls),即可使用该缓存区专门存放数据字典,从而避免过多的recursive calls所带来的性能损失。
  数据字典是关于数据库的参考信息、数据库的结构信息、数据库的用户信息等各类信息描述的一组表和视图的集合。
  数据字典用于描述所有数据库对象的数据库对象的集合。
  SQL> select * from v$fixed_table;   #查看系统中所有的动态表。
  SQL> select * from dict;          #查看数据字典。
  SQL> select object_name,object_type,created from dba_objects where object_name in ('TEST','T1');                      #从数据字典的dba_objects表中查询指定数据库对象的相关描述。
  SQL> select * from dba_users;         #从数据字典dba_users表中查询数据库用户的相关描述。
  SQL> select * from dba_data_files;#从数据字典dba_data_files表中查询所有数据库文件的相关描述。
  数据字典中表的分类:
  静态表:对各类数据库对象的各类属性的描述,常见的有下面三类字母开头:

[*]dba_*:存储当前数据库中所有数据库对象的描述
[*]all_*:存储当前用户能够访问的数据对象的描述
[*]user_*:存储当前用户所拥有的数据库对象的描述
  动态表:不断动态更新以反映数据库当前运行状况,常见以“v$”开头。
  查看data dictionary cache的大小:
  SQL> select sum(sharable_mem) from v$sqlarea;
  测试的data dictionary cache作用:
  SQL> set autot on stat                              #打开统计信息显示。
  SQL> select count(*) from dba_source;             #查询一张表。
  COUNT(*)
  ----------
  292167
  Statistics
  ----------------------------------------------------------
  312recursive calls                                 #recursive calls 次数。
  0db block gets
  1998consistent gets
  698physical reads

  0redo>  413bytes sent via SQL*Net to client
  385bytes received via SQL*Net from client
  2SQL*Net roundtrips to/from client
  6sorts (memory)
  0sorts (disk)
  1rows processed
  SQL> select count(*) from dba_source;             #再次查同一张表。
  COUNT(*)
  ----------
  292167
  Statistics
  ----------------------------------------------------------
  0recursive calls                                  #可见recursive calls 次数明显减少。
  0db block gets
  1927consistent gets
  0physical reads

  0redo>  413bytes sent via SQL*Net to client
  385bytes received via SQL*Net from client
  2SQL*Net roundtrips to/from client
  0sorts (memory)
  0sorts (disk)
  1rows processed

页: [1]
查看完整版本: Oracle内存结构(02)--缓冲区