先说一下数据库的两个基本概念:
创新互联是一家专业提供郫都企业网站建设,专注与做网站、网站制作、H5响应式网站、小程序制作等业务。10年已为郫都众多企业、政府机构等服务。创新互联专业网站建设公司优惠进行中。数据库和实例关系:一个实例只能装载一个数据库,而在非集群的情况下,一个数据库也是被一个实例装载(mount);集群环境下则可以由多个实例装载一个数据库
下面说一下SGA:
共享池(shared pool):我们数据字典高速缓存和库高速缓存。知道,SQL、PL/SQL在执行的时候,都会进行语法校验与语法分析、编译,尤其是SQL语句还有优化器进行优化,这些都需要耗费时间来处理,所以为了提高性能,ORACLE会把编译完成的SQL语句缓存起来,下次再执行相同的SQL时,就不用再执行这些流程。这些编译好的SQL、PL/SQL放在哪呢?就放在共享池里,更具体来说是放在共享池里的库高速缓存里面,这是一个队列,最近使用的SQL放在队首,长时间没有使用的SQL放在队尾,当缓存达到大值时,队尾的SQL会被清除掉以存放最新的SQL。数据字典高速缓存,里面存放的是SQL语句执行时的相关数据文件、表、索引、列、用户、其他的数据对象的定义和权限信息。
注:共享池的大小严重影响性能,太大或太小都会造成严重的性能问题。如果SQL里不使用绑定变量,那么SQL不会被重用,切记切记。
数据缓冲区(block buffer cache):或者叫块缓冲区,现在计算机的性能瓶颈其实一直卡在IO上面,磁盘IO速度永远跟不上CPU的计算速度。由于磁盘IO是计算机最慢的部分,所以为了提高性能,就必须减少IO操作。数据缓冲区就是起这样的作用,它将最近从数据文件(data file)里读取的数据放入到数据缓冲区里面,这样当用户查询数据的时候,oracle会先从缓冲区里面查找,如果有该请求所需要的数据,就直接从缓冲区里返回给用户(要知道内存的速度比磁盘可快好几个数量级的),这就叫做缓存命中(Cache Hit),这样就减少了IO次数;如果没有该请求所需要的数据,则称之谓缓存未命中(Cache Miss),然后就从数据文件中读取数据,先放入数据库缓冲区中,再传送给用户。
日志缓冲区(也就是重做日志缓冲区):重作日志记录了数据库对数据库每个数据块的更改,包括对数据的修改和对数据库结构的修改。当我们对数据进行修改时,相关数据并不会马上写入到数据文件中,而是首先生成重做信息,并写入日志缓冲区中,当有以下条件时,LGWR会把这个缓冲区的日志写入到重作日志中去:
重作日志写满了之后,会进行归档,生成归档日志,有了归档日志和重作日志,即使用数据文件丢失也可以恢复。
Large池:为了进行大的后台进程操作而分配的内存空间,主要指备份恢复、大型IO操作、并行查询等。
数据库的逻辑结构:表空间-->段-->区-->数据块
表空间: 数据库大的逻辑单位是表空间(tablespace),一个表空间可以由多个数据文件组成(数据文件是指.dbf文件),一个表空间可以由多个数据文件组成,但是一个数据文件只能属于一个表空间。一个数据库至少有一个表空间(SYSTEM表空间),它存放oracle的数据字典,表空间的大小等于构成该表空间的所有数据文件大小之和。
段:段是构成表空间的逻辑存储结构,段由一组区组成,这些区可以分布在不同的数据文件中。按照段所存储数据的特征,将段分为若干种类型,主要有数据段、索引段、回退段和临时段。
区:由连续的数据块组成。
表空间USER_DATA在物理上由两个数据文件user_data01.dbf和user_data02.dbf两个数据文件组成,在逻辑上由三个段组成。data01分为两个区,data02也分为两个区,段T1由两个区组成,分别分布在不同数据文件中,而T2和II则只有一个区组成。
数据块:是数据库中最小的数据存储单元,一般块的大小是当前操作系统的文件系统块的倍数,这是oracle官方的建议,使用 show parameter db_block_size来查看块大小。