Oracle数据库体如何用才是最好用的呢?
下图为Oracle数据库体系总体图:
![](http://www.postbbs.com/data/attachment/forum/201709/04/231724g9l9c5h6ahll9b3y.jpg)
Oracle数据库的体系很复杂,复杂的原因在于它最大限度的节约内存,从上图可以看出,它在整体上分实例和数据库文件两部分。
一、实例(Instance):指数据库服务器的内存及相关处理程序,它是Oracle的心脏。与Oracle性能关系最大的是SGA(System Global Area,即系统全局区活共享内存区),SGA包含三个部分:
1、数据缓冲区,可避免重复读取常用的数据;
2、日志缓冲区,提升了数据增删改的速度,减少磁盘的读写而加快速度;
3、共享池,使相同的SQL语句不再编译,提升了SQL的执行速度。
二、数据库文件,由操作系统内的各种文件组组成。
1、Oracle数据库逻辑结构:
1)。表空间,数据库的基本逻辑结构,是一系列数据文件的集合;
2)。段,不同类型数据在数据库中占用的空间,有许多区组合而成;
3)。区,目的是为数据一次性预留一个较大的空间;
4)。块,最小的存储单位,在创建数据库时指定。
2、Oracle数据库物理结构:
1)。数据文件(Data File),存储数据的文件;
2)。重做日志文件(Redo Log File),负责记录数据库内任何数据的处理情况,可用于数据的恢复;
3)。控制文件(Control File),控制和记录数据库的实体结构;
4)。初始化参数文件(Initialization Parameter File),配置内存空间的依据;
5)。口令文件(Password File),认证用户启动和关闭Oracle例程的权限。
![](http://www.postbbs.com/data/attachment/forum/201709/04/231824sgup5m8bm5v3mum2.jpg)
![](http://www.postbbs.com/data/attachment/forum/201709/04/231826mfan3dfd0zrdxr3s.jpg)
查看系统的redo log的信息
SQL> select group#,sequence#,bytes,members,status from v$log;
GROUP# SEQUENCE# BYTES MEMBERS STATUS
---------- ---------- ---------- ---------- ----------------
1 22 52428800 1 INACTIVE
2 23 52428800 1 CURRENT
3 21 52428800 1 INACTIVE
SQL> select member from v$logfile;
MEMBER
/u01/app/oracle/oradata/hnzk/redo03.log
/u01/app/oracle/oradata/hnzk/redo02.log
/u01/app/oracle/oradata/hnzk/redo01.log
三、实例的整体架构
![](http://www.postbbs.com/data/attachment/forum/201709/04/231827bxlkrvso5sveonum.jpg)
![](http://www.postbbs.com/data/attachment/forum/201709/04/231829elo7fj394kekk4da.jpg)
3.2系统全局区
![](http://www.postbbs.com/data/attachment/forum/201709/04/231830j3911z0dy09n1g13.jpg)
由上图可知SGA至少包含三种数据结构:数据库缓冲区缓存、日志缓冲区及共享池。还可能包括:大池、JAVA池。可以使用show sga,查看sga的状态。
共享池由许多子结构组成,这些子结构由oracle服务器内部自动管理。在共享池的总体大小范围内,各个结构的大小将因针对实例的活动模式而异。共享池本身的大小可以动态重调。
a.库缓存是内存区域,按其已分析的格式存储最近执行的代码。分析就是将编程人员编写的代码转换为可执行的代码,这是oracle根据需要执行的一个过程。通过将代码缓存在共享池,可以在不重新分析的情况下重用,极大地提高性能。
b.数据字典缓存有时称为“行缓存”,它存储最近使用的对象定义:表、索引、用户和其他元数据定义的描述。通过将此类定义放在SGA的内存中,以便使所有会话可以直接访问它们,而不是被迫从磁盘上的数据字典中重复读取它们,从而提高分析性能。
c.PL/SQL区:存储的PL/SQL对象是过程、函数、打包的过程、打包的函数、对象类型定义和触发器。它们全都像源代码那样存储在数据字典中,也使用已编译的格式。当会话调用存储的PL/SQL对象时,它必须从数据字典读取。为了避免重复读取,将对象缓存到共享池的PL/SQL区。
共享池的大小对性能产生重要影响,它应该足够大,以便缓存所有频繁执行的代码和频繁访问的对象定义,但也不能过大,以至于连仅执行一次的语句也要缓存。如果共享池过小,则性能下降,因为服务器会话将反复抢夺其中的空间来分析语句,此后,这些语句会被其他语句重写,在重新执行时,将不得不再次分析。过大的共享池也会对性能产生不良影响,因为搜索需要的时间过长。如果共享池小于最优容量,则性能将下降。但有一个最小容量,如果低于此限度,则语句将失败。确定最优容量是一个性能调整问题,大多数数据库都需要一个数百MB的共享池。有些应用程序需要1GB以上的共享池,但很少有应用程序能够在共享池小于100 MB时充分运行。
共享池在实例启动时分配。从9i开始,可以随时将其调大或调小。可以采用手动方式重调,也可以根据工作负荷自动调整大小。
手动调整共享池的大小:
select COMPONENT,CURRENT_SIZE,MIN_SIZE,MAX_SIZE from v$sga_dynamic_components;//显示可以动态重设大小的SGA组件的当前、最大和最小容量
SQL> select COMPONENT,CURRENT_SIZE,MIN_SIZE,MAX_SIZE from v$sga_dynamic_components;
COMPONENT CURRENT_SIZE MIN_SIZE MAX_SIZE
---------------------------------------------------------------- ------------ ---------- ----------
shared pool 104857600 100663296 0
large pool 4194304 4194304 0
java pool 4194304 4194304 0
streams pool 0 0 0
DEFAULT buffer cache 167772160 167772160 0
KEEP buffer cache 0 0 0
RECYCLE buffer cache 0 0 0
DEFAULT 2K buffer cache 0 0 0
DEFAULT 4K buffer cache 0 0 0
DEFAULT 8K buffer cache 0 0 0
DEFAULT 16K buffer cache 0 0 0
DEFAULT 32K buffer cache 0 0 0
ASM Buffer Cache 0 0 0
13 rows selected.
SQL> ALTER SYSTEM SET SHARED_POOL_SIZE = 110M;
System altered.
SQL> select COMPONENT,CURRENT_SIZE,MIN_SIZE,MAX_SIZE from v$sga_dynamic_components;
COMPONENT CURRENT_SIZE MIN_SIZE MAX_SIZE
---------------------------------------------------------------- ------------ ---------- ----------
shared pool 117440512 100663296 0
large pool 4194304 4194304 0
java pool 4194304 4194304 0
streams pool 0 0 0
DEFAULT buffer cache 155189248 155189248 0
KEEP buffer cache 0 0 0
RECYCLE buffer cache 0 0 0
DEFAULT 2K buffer cache 0 0 0
DEFAULT 4K buffer cache 0 0 0
DEFAULT 8K buffer cache 0 0 0
DEFAULT 16K buffer cache 0 0 0
DEFAULT 32K buffer cache 0 0 0
ASM Buffer Cache 0 0 0
13 rows selected.
数据库缓冲区是oracle用来执行SQL的工作区域。在更新数据时,用户会话不直接更新磁盘上的数据,而是首先复制到数据库缓冲区缓存。更改应用于数据库缓冲区缓存中这些数据块的副本,块将在缓存中保留一段时间,直至其占有的缓冲区需要缓存另一块为止。在查询数据时,数据也要经过缓存。会话计算出那些块包含关键的行,并将它们复制到数据库缓冲区缓存。此后,相关行传输到会话的PGA作进一步处理。此后数据块会在数据库缓存区缓存中保留一段时间。
理想状况下,包含频繁访问的数据的所有块将位于数据库缓冲区缓存中,从而最大程度地减少磁盘I/O的需要。如果缓冲区的缓存中存储的块的映像与磁盘上的映像不同,那么这样的缓冲区常称为“脏缓冲区”。脏缓冲区必须写回到数据文件,然后缓冲区又变得干净了。即使再写入磁盘后,此块也仍留在内存中,可能有一段时间,此缓冲区不会被另一个块所重写。
数据库缓冲区缓存的大小会对性能产生至关重要的影响。缓存应足够大,以便能缓存所有频繁访问的块,但也不能太大,以至于它会缓存极少使用的块。如果缓存过小,那么将导致磁盘活动过多,因为频繁访问的块持续从磁盘读取,并由其他块使用和重写,然后再从磁盘读取。数据库缓冲区缓存在实例启动时分配。从数据库9i开始,可以随时将其调大或调小。可以采用手动方式重调,也可以根据工作负荷自动重调大小(如果启用了自动化机制)。(优化的时候会用到)
日志缓冲区是小型的、用于短期存储将写入到磁盘上的重做日志的变更向量的临时区域。"变更向量"是应用于某些对象的修改,执行DML语句会生成应用于数据的变更向量。有了重做日志,数据库就保证数据永不丢失,每当数据块放生变更时,都会将应用于块的变更向量写到重做日志,如果需要还原数据文件,则通过重做日志,可以将变更向量提取并应用于数据文件备份。
会话服务器进程不将重做记录直接写入到重做日志文件,否则,每当执行DML语句时,会话将不得不等待磁盘I/O操作完成。相反,会话将重做记录写入内存中的日志缓冲区。这样做的速度将远比写入磁盘快。此后,日志缓冲区写出到重做日志文件。写操作由日志写入器后台进程(LGWR)完成。
日志缓冲区在启动是实例时分配,如果不重新启动实例,就不能在随后调整其大小。在oracle体系结构中,将日志缓冲区转储到磁盘时基本瓶颈之一。DML的速度不能超过LGER将变更向量转储到联机重做日志文件的速度。如果重做生成是限制数据库性能的因素,唯一的选项是使用RAC,在RAC数据库中,每个实例都有自己的日志缓冲区和自己的LGWR,这是将重做数据并行写入磁盘的唯一方法。
大池是一个可选区域,如果创建了大池,则那些在不创建大池的情况下使用共享池内存的不同进程将自动使用大池。大池的一个主要用途是供共享的服务器进程使用。在缺少大吃的情况下,这些进程将使用共享池中的内存,将导致对共享池的恶性竞争。如果使用的是共享服务器或并行服务器,那么始终应该创建大池。设置大池的大小与性能无关,如果某个进程需要大内存池,而内存不够用,则此进程将失败并发生错误。如果分配的内存超过需要,语句的执行速度并不会因此加快。从9i第2版本开始,用户可以在启动实例后创建大池,并重设其大小。
3.1.5 JAVA池
只有当应用程序需要在数据库中运行java存储程序时,才需要java池。用户可以在启动实例后创建池并重设池的大小,可以完全自动地创建池,并设置池的大小
Oracle数据库体如何用才是最好用的呢?相关推荐
- 部署Oracle数据库
Oracle ORACLE数据库系统是美国ORACLE公司(甲骨文)提供的以分布式数据库为核心的一组软件产品,是目前最流行的客户/服务器(CLIENT/SERVER)或B/S体系结构的数据库之一.比如 ...
- 如火如荼的国产数据库,能否替换Oracle数据库?
一.蓬勃发展的国产数据库 2020年5月20日,蚂蚁金服100%自主研发的分布式关系数据库OceanBase,以7.07亿(707,351,007)tpmC的在线事务处理性能,打破了OceanBase ...
- linux数据库创建表空间语句,如何用LINUX用命令创建ORACLE数据库表空间和用户
如何用LINUX用命令创建ORACLE数据库表空间和用户 文本模式下如何建 更新时间:2019-06-21 19:36 最满意答案 先su 到 oracle用户,SYS用户以DBA身份登陆 //创建临 ...
- 数据如何导入oracle数据库,如何用Oracle导入导出工具来实现Oracle数据库移植?
Oracle数据库作为目前市场的主流数据库之一,许多应用都在其上进行开发,由于Oracle数据库更新换代的原因和不同的应用程序提供商,可能会造成在一个单位的应用中存在Oracle的几种版本,如Orac ...
- 工作笔记:如何用Django连接Kerberized甲骨文(Oracle)数据库
背景简介 很多企业上的数据库是使用Kerberos授权的无明文密码数据库.这种把普通Oracle数据库转化为由Kerberos授权的Oracle数据库的过程叫做Kerberize,也可以说是Kerbe ...
- oracle数据库如何写翻页_ORACLE数据库分页查询/翻页 最佳实践
ORACLE数据库分页查询/翻页 最佳实践 一.示例数据: Select Count(*) From dba_objects ; ----------------------------------- ...
- 【干货】Oracle数据库常用十一大操作指令
相关文章导读 收藏 | 超详细的Oracle19c安装步骤_XMWS-IT-CSDN博客 DBA数据库管理必备认证:ORACLE OCP 19C 教材下载 Oracle数据库常用十一大操作指令 1. ...
- Oracle 数据库、实例、表空间、用户、数据库对象
Oracle是一种数据库管理系统,是一种关系型的数据库管理系统.通常情况了我们称的"数据库",包含了物理数据.数据库管理系统.内存.操作系统进程的组合体,就是指这里所说的数据库管理 ...
- Oracle数据库常用十一大操作指令
活动预告: ACOUG 成都 2019 于4月27日在成都举办,欢迎参会,马上报名:2019 ACOUG China Tour 成都站 DBA们每天会用到大大小小很多指令,本文对这些指令做了归纳总结, ...
最新文章
- 【2012天津区域赛】部分题解 hdu4431—4441
- 接口的特点及,抽象类与接口的区别
- 顺子对百录收录的看法
- matlab loopcount,求助一个数值积分问题,用matlab的quadgk函数来计算,谢谢!
- 大数据互联网架构阶段 前台系统架构 跨域请求
- php oracle 中文字段,怎么解决php oracle乱码问题
- Python zipfile模块(压缩解压zip)
- 俄罗斯电力公司T Plus完成25MW光伏电站
- 计算机专业教研成绩,2018学年第一学期计算机组教研组工作计划
- 6.Python深入_内存管理
- C语言 三角函数用法
- 细说php第四版笔记,细说PHP 学习笔记(三)
- 【FreeSwitch开发实践】使用SIP客户端Yate连接FreeSwitch进行VoIP通话
- 使用GitHub搭建个人博客
- MyBatis第N+1种分页方式,全新的MyBatis分页
- 烤仔TVのCCW丨密码学通识(一)密码学基础及常见误区
- 微信京东手机怎么联系客服人工服务器,微信人工客服电话是多少?打不通怎么办?...
- Selenium自动化测试:如何使用cookie跳过验证码登录
- 室内定位:基于NB/LTE Cat.1蜂窝网络的穿戴设备定位 BLE-4
- Sketch 56 中文版发布 最佳产品原型设计工具
热门文章
- 单点登录系统SSO是如何实现的?
- 计算机处理英语的顺序,顺序多处理方式,sequential multiprocessing ],音标,读音,翻译,英文例句,英语词典...
- 实用宝典 | 如何用Python实现人机猜拳小游戏
- 吴世春:哲学底层的互联网世界观
- dota自定义机器人队友_7.00新游记 三大英雄模型重制、自定义机器人
- 小学四年级家长计算机,小学四年级家长的寄语
- Maven编译Freemarker源码及二开
- git push报错 Empty reply from server
- Naive UI之Data Table
- 一位面试官的真情剖白