码迷,mamicode.com
首页 > 其他好文 > 详细

OCP第四章:存储结构+SGA

时间:2016-05-25 08:13:48      阅读:166      评论:0      收藏:0      [点我收藏+]

标签:

=======================================================================================================================================

存储结构--视频12  

  1、data file  

  2、control file  

  3、redo log file  

  4、parameter file  

  5、passowrd file

 查询数据库名语句:   

            show parameter db_name   

            select name from v$database;  

  查询实例名语句:   

            show parameter instance_name   

            select instance_name from v$instance;  

  查询数据文件所在位置:   

             select name from v$datafile;  

  查询控制文件所在位置:   

            select name from v$controlfile;  

  查询日志文件所在位置:   

            select member from v$logfile;  

  查询归档文件所在位置:   

            select name from v$archived_log;  

  查询参数文件所在位置:   

            select value from v$parameter where name = ‘spfile‘;

 

=======================================================================================================================================

服务器进程--视频13  

引导:用户进程发出请求后,服务器进程就会接收    

           PGA作用:保存用户进程发送请求到服务器端的私有信息,比如:会话信息、排序信息等等   

           在PGA空间里还包括一个非常重要的空间区域,叫:UGA(用户全局区),会话信息、排序信息等都保存在UGA空间中。

 PGA内存:当与用户进程连接的时候,PGA会被分配    当会话结束的时候,PGA会被释放

 PGA大小:10M 至 4GB-1byte

 PGA管理方式:workarea_size_policy  参数manual【手工管理】 | auto【自动管理】

 查看PGA空间语句:   show parameter pga;  

 查看PGA管理方式语句:   show parameter work;   =======================================================================================================================================      

内存结构(SGA)--视频14    

引导:数据的增删改查操作,都会在SGA内存中完成,该内存被分为6大区域,被操作的数据在这6个区域里是共享的,相互配合完成操作,       

        当实例启动的时候,这6大内存区域就会被分配              

        当实例关闭的时候,这6大内存区域就会被回收

                 1、共享池   

                 2、数据库高速缓冲区   

                3、重做日志缓冲区   

                4、大型池   

                5、Java池   

                6、Streams池             

       SGA是可读可写的内存区域,所有连接到oracle实例的用户,都可以在SGA内存中读取或者更改数据,在工作中有90%的操作都在内存中完成

       

      查询SGA各大区域的大小语句:这些内存区域的大小,是在参数文件中设定的   

                  show sga;

 SGA的分配   

            8i:SGA的总大小由所有内存组建大小之和决定,不能直接定义SGA大小,对内存组建大小的修改必须在数据库重启之后才会生效,所以叫SGA静态管理             9i:SGA的总大小由初始化参数SGA_MAX_SIZE确定,各个内存组建大小之和不能超过这个参数,在这个大小之下,SGA各个内存组建可以在不重启数据库的 情况下直接修改大小,所以叫SGA的动态管理   

            10g:SGA的总大小既可以像9i一样动态管理,也可以实施SGA的自动管理,只需要设置初始化参数SGA_TARGET,SGA各个内存组建就可以由数据库自动设置 大小,设置的依据来源于系统自动收集的统计信息

 

             查询SGA_MAX_SIZE参数大小语句:   

                        show parameter sga_max_size    

             修改SGA_MAX_SIZE参数大小语句:   

                        alter system set sga_max_size=1025m scope=spfile;

   =======================================================================================================================================  内存结构(SGA)--视频15      

               共享池(shared pool)作用:

                              (1)储存最近执行的SQL语句                                      

                              (2)保存最近使用的数据定义                         

                                           组成:数据库缓冲区                               

                                                    数据字典缓存                         

                大小:由SHARED_POOL_SIZE决定大小

    数据库缓冲区:存储最近使用的SQL和PL/SQL语句信息                  

                        共享最常用的语句                  

                        管理上遵循LRU规则                  

                        包括两个部分:                      

                              1、共享SQL区                      

                              2、共享PL/SQL区           

数据字典缓存:存储在数据库中最近使用的定义                    

                    保存了数据文件、表、索引、列、用户、权限和其他的数据库对象                    

                    在分析阶段,服务器进程查找数据字典缓存区验证对象的名字以及是否为合法的访问                    

                    对于查询和DML语句,如果数据字典的信息在缓存中,能够提高响应时间                    

                    大小由Shared pool参数决定

SGA对一条SQL语句的分析                   

                        如果以前执行过,则按照以前执行的计划执行,通常是软分析【soft parse】或快速软分析                   

                        软分析:通过PGA提交SQL语句 --> parse语句 --> soft parse --> 执行语句 --> 通过PGA输出                                      

                        如果没执行过,oracle开始分析语句的语法、语义,按照优化器规则获得最佳执行计划,并且在内存中保存这个语句与之对应的执行计划等信息

                        硬分析:通过PGA提交SQL语句 --> parse语句 --> hard parse --> 分析与得到优化方案【CBO or RBO】

                                   --> 根据优化方案制定执行计划 --> 执行语句 --> 通过PGA输出

LRU管理规则:由于内存是非常紧缺的资源,对于SQL程序就需要多注意优化,提交到内存的SQL语句就需要LRU进行管理,LRU算法确定共享对象的持续保存期,                   长期不用的SQL语句保存信息会在LRU中被释放,如果不想被释放,就调用dbms_shared_pool.keep存储过程将该过程驻留在shared pool中

 

 

=======================================================================================================================================  内存结构(SGA)--视频16

数据库高速缓存区:       (1)暂存从数据文件中获得的数据块的数据映像,由于内存中读写速度快,为了减少物理IO,就将要读取的数据保存在内存中操作,即保存在高速缓存区中      

                                 (2)同样遵循LRU算法管理内存      

                                 (3)当再次需要操作这些数据时,可以从内存中直接获取和更新,语句执行效率能够大幅度的提高      

                                 (4)初始化参数DB_BLOCK_SIZE决定了数据块的大小,这也是数据库I/O的最小单位,默认的大小是8K      

                                 (5)数据库高速缓冲区由多个独立的子缓存池构成,可以独立的设置大小              

default池    DB_CACHE_SIZE:如果没有指定数据块保存在哪个缓冲池的情况下,就会将这些数据块默认保存在default池中              

keep池       DB_KEEP_CACHE_SIZE:将对象的数据块保留在内存中,keep池中所保存的数据,不会被LRU释放,会一直保留在内存中              

recycle池    db_recycle_cache_size:当该池中所保留的数据里某些如果不再重要的时候,就会将这些数据清除掉,为新的数据腾出空间             

【只有default池可以设置成被SGA自动管理】

扩展:不管被保存进来的数据被保留在高速缓冲区里的哪一个池中,如果在对这些数据做修改操作的时候,被修改的数据都会拥有两种状态,即干净状态和脏状态干净的状态在oracle中被称为:可写的列表,该列表中保留的是已经被修改之后的数据,这部分数据叫做脏数据脏的状态在oracle中被称为:ARU的列表,该列表中保留的是没有被修改过的数据,这部分数据叫做干净数据脏数据就会被DBWR后台进程写入物理磁盘中,其他的数据就不会被写入。

数据库缓冲区大小:       

                        db_cache_size参数决定

查询default池的大小语句:                

                        show parameter db_cache_size       

查询keep池的大小语句:                

                        show parameter db_keep_cache_size       

查询recycle池的大小语句:                

                        show parameter db_recycle_cache_size              

 

=======================================================================================================================================  内存结构(SGA)--视频17

重做日志缓冲区        (1)暂存数据库中所有数据块的改变,当对某些数据块中的数据做更改等操作时,就会被记录到重做日志缓冲区中

                            (2)内存管理是采用FIFO方式,先进先出,用这种方式会保证数据库的日志按照顺序循环的向重做日志缓冲区中写入       

                            (3)重做日志被用于提供数据库的恢复,如果不恢复的话,基本用不到日志       

                            (4)数据库中会通过LGWR后台进程,定期或满足条件后,会将保留在日志缓冲区中的内容,物理写入磁盘中的日志文件里       

                            (5)重做日志缓冲区的大小由参数LOG_BUFFER决定,但这个内存区不能动态调整大小,一般不用设置太大,1M至2M即可       

                            (6)该日志缓冲区不能被SGA自动管理,缓冲区的大小要手动设置

查看日志缓冲区大小语句:          

                            show parameter log_buf

       

=======================================================================================================================================  内存结构(SGA)--视频18:大池部分略过... 内存结构(SGA)--视频19:Java池部分略过...

=======================================================================================================================================  内存结构(SGA)--视频20    

进程部分       1、用户进程:客户端连接数据库的程序,当客户端发出连接请求,用户进程启动,当断开连接,用户进程关闭      

                   2、服务进程:响应并接受用户操作请求的程序,连接则启动,服务进程被分配,连接断开后,服务进程关闭      

                   3、后台进程:DBWR、LGWR、PMON、SMON、CKPT

查看当前系统中正在被执行的后台进程语句:      

                   select name from v$bgprocess where paddr <> ‘00‘;      

=======================================================================================================================================  内存结构(SGA)--视频21:数据库的安装部分略过... 内存结构(SGA)--视频22:数据库的安装部分略过...

OCP第四章:存储结构+SGA

标签:

原文地址:http://www.cnblogs.com/login2012/p/5525689.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!