SGA--Redo Log Buffer & Shared Pool_abnerfrmh的博客-程序员信息网

技术标签: Oracle  

Redo Log Buffer
The redo log buffer is a circular buffer in the SGA that stores redo entries describing changes made to the database. Redo entries contain the information necessary to reconstruct, or redo, changes made to the database by DML or DDL operations. Database recovery applies redo entries to data files to reconstruct lost changes.

Oracle Database processes copy redo entries from the user memory space to the redo log buffer in the SGA. The redo entries take up continuous, sequential space in the buffer. The background process log writer (LGWR) writes the redo log buffer to the active online redo log group on disk. 
--Oracle进程把用户内存区的redo条目复制到SGA中的redo log buffer里。Redo条目占用连续的,顺序的空间。


LGWR writes redo sequentially to disk while DBWn performs scattered writes of data blocks to disk. Scattered writes tend to be much slower than sequential writes. Because LGWR enable users to avoid waiting for DBWn to complete its slow writes, the database delivers better performance.
--LGWR避免用户等待DBWn完成它的slow writes,这样数据库性能表现更好。

The LOG_BUFFER initialization parameter specifies the amount of memory that Oracle Database uses when buffering redo entries. Unlike other SGA components, the redo log buffer and fixed SGA buffer do not divide memory into granules.
--与SGA其它组件不同,redo log buffer和fixed SGA buffer不把内存分成一个个的粒组。


Shared PoolThe shared pool caches various types of program data. For example, the shared pool stores parsed SQL, PL/SQL code, system parameters, and data dictionary information. The shared pool is involved in almost every operation that occurs in the database. For example, if a user executes a SQL statement, then Oracle Database accesses the shared pool.--共享池存各种程序数据,例如解析的SQL,PL/SQL代码,系统参数,数据字典信息。共享池几乎参与了数据库中的任何一个操作。
The shared pool is divided into several subcomponents, the most important of which are shown below.


--下面逐个讲解内部组件
Library Cache
Data Dictionary Cache
Server Result Cache
Reserved Pool

Library Cache The library cache is a shared pool memory structure that stores executable SQL and PL/SQL code. This cache contains the shared SQL and PL/SQL areas and control structures such as locks and library cache handles. In a shared server architecture, the library cache also contains private SQL areas. --简单来说,library cache就是存储SQL,PL/SQL。里面包含共享SQL,PL/SQL区,控制结构,比如锁和库缓存句柄。在共享服务器架构下,library cache也包含似有SQL区。
When a SQL statement is executed, the database attempts to reuse previously executed code. If a parsed representation of a SQL statement exists in the library cache and can be shared, then the database reuses the code, known as a soft parse or a library cache hit. Otherwise, the database must build a new executable version of the application code, known as a hard parse or a library cache miss.
--简单说了软硬解析。区别就是在library cache是否有之前解析过的SQL语句。

Shared SQL Areas The database represents each SQL statement that it runs in the following SQL areas:
Shared SQL area
The database uses the shared SQL area to process the first occurrence of a SQL statement. This area is accessible to all users and contains the statement parse tree and execution plan. Only one shared SQL area exists for a unique statement.
数据库使用共享SQL区来执行第一次出现的SQL语句。所有的用户都可以访问这个区域,里面包含语句解析树和执行计划。对与每个唯一的语句只有一个共享SQL区。

Private SQL area
Each session issuing a SQL statement has a private SQL area in its PGA. Each user that submits the same statement has a private SQL area pointing to the same shared SQL area. Thus, many private SQL areas in separate PGAs can be associated with the same shared SQL area.
--每个发布SQL语句的会话在自己的PGA中都有一个私有SQL区。每个提交相同语句的用户都有一个指向相同的共享SQL区的私有SQL区。

The database automatically determines when applications submit similar SQL statements. The database considers both SQL statements issued directly by users and applications and recursive SQL statements issued internally by other statements.
--数据库会同时考虑用户和应用直接发布的SQL和其它语句在内部发布的递归SQL

The database performs the following steps:
1.Checks the shared pool to see if a shared SQL area exists for a syntactically and semantically identical statement:
a.If an identical statement exists, then the database uses the shared SQL area for the execution of the subsequent new instances of the statement, thereby reducing memory consumption.
b.If an identical statement does not exist, then the database allocates a new shared SQL area in the shared pool. A statement with the same syntax but different semantics uses a child cursor.
In either case, the private SQL area for the user points to the shared SQL area that contains the statement and execution plan.
--1.先看共享SQL区是否存在着语法,语义上相同的语句。然后再判断,如果存在相同的,就使用它的执行计划,减少内存消耗;如果不存在,就从共享池中分配一个新的共享SQL区。让那些语法相同,但是语义不同的语句使用子游标

2.Allocates a private SQL area on behalf of the session
The location of the private SQL area depends on the connection established for the session. If a session is connected through a shared server, then part of the private SQL area is kept in the SGA.
--私有SQL区的位置取决于会话所建立的连接。如果是共享服务器,则私有SQL区会放到SGA中。

The following figure shows a dedicated server architecture in which two sessions keep a copy of the same SQL statement in their own PGAs. In a shared server, this copy is in the UGA, which is in the large pool or in the shared pool when no large pool exists.


Program Units and the Library Cache

The library cache holds executable forms of PL/SQL programs and Java classes. These items are collectively referred to as program units.
--可执行的PL/SQL程序和Java类统称为程序单元,它们都存在与library cache中。

The database processes program units similarly to SQL statements. For example, the database allocates a shared area to hold the parsed, compiled form of a PL/SQL program. The database allocates a private area to hold values specific to the session that runs the program, including local, global, and package variables, and buffers for executing SQL. If multiple users run the same program, then each user maintains a separate copy of his or her private SQL area, which holds session-specific values, and accesses a single shared SQL area.
--数据库处理程序单元的方式与SQL语句类似。比方数据库会分配共享区来存储解析的,编译的PL/SQL,分配私有区来存储变量。如果多个用户运行相同的程序,那么每个用户都会维护一个自己的私有SQL区的独立的副本,用来存储会话变量,访问单独的共享SQL区。

The database processes individual SQL statements within a PL/SQL program unit as previously described. Despite their origins within a PL/SQL program unit, these SQL statements use a shared area to hold their parsed representations and a private area for each session that runs the statement.
--这段话不知所谓。但是,可以这样说,在PL/SQL程序单元里的SQL也使用共享区存解析的内容,运行语句的每个会话使用私有区。

Allocation and Reuse of Memory in the Shared Pool 当解析一条新的SQL语句时,数据库从共享池中分配一块儿内存,大小由SQL的复杂程度决定。一般来说,除非数据库根据LRU算法把把SQL移出共享池,否则它就一直待在那里。只要这些条目有用,即使生成它们的进程结束了,它们仍然待在内存中供别的会话使用。这种机制使得处理SQL的耗费最小化。 如果新条目要求使用空间,数据库就会释放不常用的条目所占用的内存。如果共享SQL区corresponds to an open cursor,但是这个游标有段时间没被使用了,那么数据库也会把这个共享SQL区移出共享池。若这个游标接下来要被使用,那么数据库就会重新解析SQL,分配共享区。
The database also removes a shared SQL area from the shared pool in the following circumstances:
If statistics are gathered for a table, table cluster, or index, then by default the database gradually removes all shared SQL areas that contain statements referencing the analyzed object after a period of time. The next time a removed statement is run, the database parses it in a new shared SQL area to reflect the new statistics for the schema object.
If a schema object is referenced in a SQL statement, and if this object is later modified by a DDL statement, then the database invalidates the shared SQL area. The optimizer must reparse the statement the next time it is run.
--如果一个SQL用到了一个schema对象,但是后来这个对象被DDL语句修改,那么分配的shared SQL area就会失效,下次运行时候就必须reparse the statement。

If you change the global database name, then the database removes all information from the shared pool.
--这个有意思,一旦你把数据库的global name改了,那么数据库就会把shard pool中所有信息移出。

You can use the ALTER SYSTEM FLUSH SHARED_POOL statement to manually remove all information in the shared pool to assess the performance that can be expected after an instance restart.

Data Dictionary Cache The data dictionary is a collection of database tables and views containing reference information about the database, its structures, and its users. Oracle Database accesses the data dictionary frequently during SQL statement parsing.
The data dictionary is accessed so often by Oracle Database that the following special memory locations are designated to hold dictionary data:
Data dictionary cache

This cache holds information about database objects. The cache is also known as the row cache because it holds data as rows instead of buffers.
--data dictionary cache也叫row cache,因为它以rows的形式存储数据而不是buffers
Library cache

All server processes share these caches for access to data dictionary information.

Server Result Cache Unlike the buffer pools, the server result cache holds result sets and not data blocks. The server result cache contains the SQL query result cache and PL/SQL function result cache, which share the same infrastructure.
client result cache differs from the server result cache. A client cache is configured at the application level and is located in client memory, not in database memory.

SQL Query Result Cache
The database can store the results of queries and query fragments in the SQL query result cache, using the cached results for future queries and query fragments. Most applications benefit from this performance improvement.

For example, suppose an application runs the same SELECT statement repeatedly. If the results are cached, then the database returns them immediately. In this way, the database avoids the expensive operation of rereading blocks and recomputing results. 
The database automatically invalidates a cached result whenever a transaction modifies the data or metadata of database objects used to construct that cached result.
Users can annotate a query or query fragment with a RESULT_CACHE hint to indicate that the database should store results in the SQL query result cache. TheRESULT_CACHE_MODE initialization parameter determines whether the SQL query result cache is used for all queries (when possible) or only for annotated queries.
PL/SQL Function Result Cache

The PL/SQL function result cache stores function result sets. Without caching, 1000 calls of a function at 1 second per call would take 1000 seconds. With caching, 1000 function calls with the same inputs could take 1 second total. Good candidates for result caching are frequently invoked functions that depend on relatively static data.

PL/SQL function code can include a request to cache its results. Upon invocation of this function, the system checks the cache. If the cache contains the result from a previous function call with the same parameter values, then the system returns the cached result to the invoker and does not reexecute the function body. If the cache does not contain the result, then the system executes the function body and adds the result (for these parameter values) to the cache before returning control to the invoker.

You can specify the database objects that are used to compute a cached result so that if any of them are updated, the cached result becomes invalid and must be recomputed.

The cache can accumulate many results—one result for every unique combination of parameter values with which each result-cached function was invoked. If the database needs more memory, then it ages out one or more cached results.

--上面写了很多东西,整理一下

--这个功能很强大,有很多好处,上面的那几段都有说明,此处不再赘述


版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/abnerfrmh/article/details/8480212

智能推荐

R语言分类汇总_chengdehe的博客-程序员信息网_r语言分类汇总

R语言分类汇总##加载包library(dplyr)##函数 group_by 制定数据集 data 中针对 type 变量进行分类汇总grou <- group_by(data,type)##summarise函数计算分类结果——sd 标准差,还可计算其他类,分类汇总type_sd <- summarise(grou ,sd(range ,na.rm = T))dat...

Windows下 解决端口占用Error:listen EADDRINUSE_会飞的闲鱼的博客-程序员信息网

(一):根据端口找进程(端口我这里是8088)netstat -ano|findstr "8088"找到最后一列的数字就是 PID (二):杀死进程TSKILL 4836此刻你发现已经成功了(注意是在win运行命令下)...

java实现从实体到SQL语句的转换_Mr_Tank_的博客-程序员信息网_java实体转sql

使用过Hibernate,EF之类的ORM框架都知道一般的CRUD之类的简单操作,只要调用框架封装好了的方法,框架就自动生成相应的SQL语句了,参照实习公司给的代码,那个是C#版的,今天弄了一下java的,这里介绍怎么从实体转换为标准的Insert SQL语句

CC00017.NavigationLog——|OwnCloud网盘|_yanqi_vip的博客-程序员信息网

一、ownCloud简介### --- ownCloud简介~~~ ownCloud(官网)是一款开源的私有云框架,可以通过它实现个人网盘的功能,~~~ 如果拥有一个性能不错的VPS,那么就可以摆脱奇慢无比的百度云等网盘啦!~~~ 我花了大约一天的时间总算搭好了ownCloud。~~~ ownCloud提供了各个平台的文件同步客户端,~~~ 因此搭建好o...

双击.bat文件闪退_来个鸡蛋的博客-程序员信息网

因为我bat文件里引用了绝对路径,之后修改了文件名,导致和bat文件中的路径对应不上,修改路径以后成功执行bat文件

STEVAL-MKI109V3评估板 PART2 - LPS27HHW传感器接口_weixin_40239197的博客-程序员信息网

1. 传感器接口电路双列直插的传感器模块可以通过这个接口插入,数字信号是通过缓冲器中转的,例如GP,DEN等信号。2. 逻辑接口电路-1用于控制DEN,CS和GP信号,信号方向是从A->B,因此,OE=0,DIR1=1,DIR2=1.3. 逻辑接口电路-2中断信号INT1/2/3/4,传感器的输出信号,方向从B->A,因此OE=0,DIR_INT3_INT4=0。4. 逻辑接口电路-3I2C信号缓冲,因此OE=1...

随便推点

python3 TypeError: can only concatenate str (not "dict") to str_-九斤-的博客-程序员信息网

问题代码:url = 'http://localhost:84/#/admin/login'data = {}data['account'] = '123'data['password'] = '123123123.'# 将数据和url进行连接request = url+'?'+data问题原因:类型不兼容,不能强制组合解决方案:url = 'http://local...

python判断正数还是负数_PythonExcel如何知道出现负数和正数的次数(计数/频率)?..._weixin_39580042的博客-程序员信息网

使用两个计数器变量来跟踪总计数和阳性数。在开始时将它们设置为0,然后无论何时您想要添加1,在循环中使用+= 1。然后,通过去掉百分比符号,然后使用以下方法将字符串转换为数字,测试百分比是否大于0。if float(row[0].strip('%')) > 0。你可以将此更改为>=如果您想将0包含在“正”类别中。totalCount = 0numberOfPositives = 0with open...

Jimoshi_LDS-物流管理系统的路线管理系统增删改_Jimoshi_的博客-程序员信息网

Jimoshi成长经历:前面的笔记后面再慢慢整理-------方便自己目录:展示路线管理系统的数据、删除路线管理系统的数据、添加路线管理系统的数据、修改路线管理系统的数据LDS-物流管理系统的路线管理系统增删改一、展示路线管理系统的数据  1、编写route.jsp页面  代码示例:       pageEncoding="UTF-8"%> 

上下界网络流_weixin_30466421的博客-程序员信息网

目录 无源汇有上下界可行流 有源汇有上下界可行流 有源汇有上下界最大流 有源汇有上下界最小流 无源汇有上下界最小费用可行流 有源汇有上下界最小费用可行流 有源汇有上下界最小费用最大流 有源汇有上下界最小费用最小流 ...

Linux内核漏洞精准检测如何做?SCA工具不能只在软件层面_华为云开发者联盟的博客-程序员信息网

摘要:二进制SCA工具要想更好的辅助安全人员实现安全审计、降低漏洞检测的误报率,必须向更细颗粒度的检测维度发展,而不仅仅停留在开源软件的层面,同时对漏洞库的要求也需要向细颗粒度的精准信息提出的挑战。

吴恩达机器学习第十周测试_一叶知秋Autumn的博客-程序员信息网

第一题答案B分析:当代价函数呈上升趋势的时候,可以试着将学习率减小第二题答案CD分析:A:随机梯度下降并不能并行化,错误。B:批量梯度下降是在每一次迭代后计算代价函数,错误。C:在随机梯度下降算法执行之前,先要将样本打乱,正确。D:在大量数据样本的情况下,随机梯度下降要比批量梯度下降效率高,正确。第三题答案AD第四题答案CD第五题答案ACD...

推荐文章

热门文章

相关标签