存档
文章标签 ‘shared pool’
10/04 26
2 条评论
1,946 次查看
top数据库实例结构
当Oracle实例启动之后,所看到的就是在服务器内存上的一个个不同内存块加上产生的与这些内存交互的后台进程。Oracle文档将这些内存结构和进程收的很详细。
由Oracle实例所占用的内存块成为SGA(System Global Area),它的大小可以通过调整Oracle初始化参数(initialisation parameter)进行修改,在SGA里边至少会创建3个不同的区域,它们分别是:
- 数据块缓存区(Database Buffer Cache)
- 这里缓存的是数据块。和SQL Server一样,用户不会直接的访问数据文件上的数据:当读取数据时,相关的数据块会从数据文件中拷贝到内存中;修改数据时也是修改内存中的数据,然后再由单独的进程将数据缓存区中被修改的数据写入到数据库中。
- 重做日志缓存(Redo Log Buffer)
- SGA中的这个区域连续的记录着数据缓存区数据修改的记录,重做日志缓存中的内容会被写入到在线日志文件中去。
- 共享池(Shared Pool)
- SGA中有一大块的内存用作共享池,共享池等价于SQL Server中的执行缓存(Procedure Cache)。它的主要作用就是缓存数据库中最近执行过的SQL语句。共享池由下面的模块组成:
- 数据字典缓存(Dictionary Cache)
- 数据字典缓存缓存了Oracle最近使用的数据字典信息。
- 库缓存(Library Cache)
- 这个区域包含了最近执行的SQL和PL/SQL语句和对应的执行计划。SQL区还能进一步分成共享区和私有区:共享SQL区保存的语句可以由多个用户使用而私有区保存的则是跟各个连接对应的绑定变量的信息。PL/SQL是Oracle对于行业标准SQL的程序扩展,当PL/SQL程序执行时,它的代码会拷贝到库缓存中的共享PL/SQL区中。除了缓存执行代码和执行计划外,库缓存还包含锁、阀以及字符集等信息。
根据你所使用的组件的不一样,Oracle的SGA中也可能存在其它一些可选的内存区域。在Oracle中使用Java应用时要使用到Java池(Java Pool),Oracle内置的备份恢复工具RMAN(Recovery Manager)要用到大池(Large Pool),当使用Oracle高级队列机制时要用到流池(Steams Pool)。
本译文采用知识共享署名-非商业性使用-相同方式共享 3.0 Unported许可协议发布,转载请保留此信息
译者:马齿苋 | 链接:http://www.dbabeta.com/2010/oracle-sql-server-comparison-ii.html
作者:Sadequl Hussain | 原文:http://www.sql-server-performance.com/articles/dba/oracle_sql_server_comparison_ii_p1.aspx
译者:马齿苋 | 链接:http://www.dbabeta.com/2010/oracle-sql-server-comparison-ii.html
作者:Sadequl Hussain | 原文:http://www.sql-server-performance.com/articles/dba/oracle_sql_server_comparison_ii_p1.aspx
近期评论