oracle临时表经常被锁_5.性能测试 - Oracle体系结构和性能优化简介

体系结构

05f50a66121c8397e07c0ad082faf286.png
Oracle体系结构示意图
  • Oracle服务器:
Oracle服务器是一个数据库管理系统,它为信息管理提供了开放、综合和集成的方法,包括Oracle实例和
Oracle数据库。

57136069c51405c3698b05b1b492bff4.png
Oracle服务器
  • Oracle实例(Instance)
单实例数据库,RAC
由内存结构和后台就进程结构组成

e0da01f77c8f597ed80faf4565f28657.png
Oracle实例
  • Oracle数据库
是一个被统一处理的数据集合
包括三类文件:数据文件、控制文件、redo日志文件

37caa37a395b68bf2cb989535d383c0e.png
  • Oracle数据库内存结构
Oracle的内存结构由两个内存区组成,分别是:
系统全局区(SGA, System Global Area):在实例启动时分配,是Oracle实例的基本组件
程序全局区(PGA, Program Global Areas):在服务器进程启动时分配
  • 系统全局区(SGA)
SGA包括以下几种内存结构:
1.共享池
2.数据库缓冲区高速缓存
3.undo日志缓冲区
4.其他结构(例如锁和栓锁的管理信息以及统计数据等)
在SGA中还可配置其他几种内存结构:
1.大型共享池
2.Java池
3.Streams池
SGA是动态的:
1.大小由SGA_MAX_SIZE参数指定
由SGA组件以粒组(Granule)为单位进行分配和跟踪:
1连续的虚拟内存分配
2粒组大小由估算的SGA_MAX_SIZE总计大小确定
  • 共享池(Share Pool)
用于存储:
1.最近执行的SQL语句
2.最近使用的数据定义
它包括以下两个与性能相关的关键内存结构:
1.库高速缓存
2.数据字典高速缓存
其大小由SHARED_POOL_SIZE参数确定

ca2d85123a7b7c1b9e8a17249ed9f795.png
共享池
  • 库高速缓存
存储最近使用的SQL和PL/SQL语句的有关信息
使得常用语句可以共享
由"最近最少使用算法"(LRU)管理
包括以下两个结构:
1.共享的SQL区
2.共享的PL/SQL区
大小由共享池的大小确定
  • 数据字典高速缓存(Data Dictionary Cache)
数据库中最近使用对象的定义的集合
包括与数据文件、表、索引、列、用户、权限以及其他数据库对象有关的信息
在语法分析阶段,服务器进程会在数据字典中查找用于解析对象名和验证访问的信息
将数据字典信息缓存到内存中,可缩短查询和DML的响应时间
大小由共享池的大小决定
  • 数据库缓冲区高速缓存(Buffer Cache)
存储已从数据文件中检索到的数据块的副本
能够大幅提高获取和更新数据时的性能
通过LRU算法管理
主数据块的大小由DB_BLOCK_SIZE确定
所有用户共享

50c164cd9d90c49ec20c146f0a4cf4a8.png
  • 重做日志缓冲区(Redo Log Buffer)
记录对数据库数据块所做的全部更改
主要目的是用于恢复
其中记录的更改称作重做条目
重做条目包含用于重新构造或重做更改的信息
大小由LOG_BUFFER定义

ec3e3cac888ba8e4147bc68542ebc18c.png
  • 大型共享池(Large Pool)
SGA中的可选内存区
分担了共享池的一部分工作
用于:
1.共享服务器的会话内存(UGA)
2.I/O服务器进程
3.备份和恢复操作或RMAN
4.并行执行的消息缓冲区 - 将PARALLEL_AUTOMATIC_TUNING设置为TRUE
不使用LRU列表
大小由LARGE_POOL_SIZE确定
可以动态调整
  • Java池
用于Java命令的解析
在安装并使用Java时是必需的
大小由JAVA_POOL_SIZE参数确定
  • 程序全局区
为连接到Oracle数据库的每个用户进程保留的内存
在创建进程时分配
在进程终止时释放
仅供一个进程使用
  • Oracle进程
在数据库用户请求连接到Oracle服务器时启动
服务器进程(Server Process):与Oracle实例相连接,在用户建立会话时启动
后台进程(BackGround Process):在Oracle实例启动时启动
  • 用户进程
与Oracle服务器就进行交互的程序
必须先建立连接 
不与Oracle服务器直接交互
  • 服务器进程
直接与Oracle服务器交互的程序
执行生成的数据库调用并返回相关结构
可以是专用服务器或共享服务器

d0a5c536362636ad19343b8d8aab3fce.png
  • 后台进程
维护并保证物理结构与内存结构之间的关系
必备的后台进程:
1.DBWn PMON CKPT
2.LGWR SMON
可选的后台进程:
1.ARCn LMDn RECO
2.CJQ0 LMON Snnn
3.Dnnn Pnnn
4.LCKn QMNn
  • 数据库写入程序(DBWn)

2ec41ae39ac31515a057e7109d822951.png
在一下情况下将数据库高速缓存中的脏块写入磁盘:
1.出现检查点
2.脏数据缓冲区达到阈值
3.没有空闲缓冲区
4.出现超时
5.执行了RAC ping请求
6.表空间处于OFFLINE状态
7.表空间处于READ ONLY状态
8.对表执行DROP或TRUNCATE操作
9.对表空间执行BEGIN BACKUP操作
  • 日志写入器(LGWR)

1f18410e6fa9736c5c88d6618b6643c7.png
将重做日志缓冲区的内容写入磁盘上的重做日志文件
下面的事件触发LGWR进行操作:
1.用户提交一个事务时
2.当重做日志缓冲区写满1/3时
3.有1MB的重做数据时
4.每隔三秒
5.在DBWn将脏块写入磁盘前
  • 系统监控程序(SMON)

9c676d89d50c1a41f70e062a3f21676f.png
职责:
1.实例恢复:
- 前滚重做日志中的更改
- 打开数据库供用户访问
- 回退未提交的事务处理
2.合并空闲空间
3.回收临时段
  • 进程监视器(PMON)
进程失败后,通过以下方法进行清理:
1.回退事务处理
2.释放锁
3.释放其它资源 
4.重新启动已失效的调度程序

575f9fa6fe232eed22c2885330737764.png
  • 检查点

3730676f61b18959d4d3c4aeaf4fa5af.png
职责包括:
1.在检查点发信号给DBWn
2.使用检查点信息更新数据文件的标头
3.使用检查点信息更新控制文件
  • 归档程序(ARCn)
可选的后台进程
设置ARCHIVELOG模式时自动归档联机重做日志
可以保留数据库的全部更改记录

db84b2936e5f4e75158e5bc3455822ac.png
  • 数据库存储结构(Storage Architecture)

f701cbf0c1cd1ff15610df12b1d297ff.png
  • 数据库的逻辑和物理结构

7c67d33c46769df47f675ccbd4e340c5.png
  • 逻辑结构

ccdcd0c5db49b83547f6d72dd13d2d60.png
指示数据库物理空间的使用情况
层次结构由表空间、段、区和块组成
  • 表空间和数据文件
表空间包括一个或多个数据文件
一个数据文件只能属于一个表空间

729bd82921b59893a368c3f9c3a98db8.png
  • 段(Segment)、区(Extents)和块(Blocks)
段存在于一个表空间中
段是区集合
区是数据块的集合
数据块和磁盘上的块相映射,但不等同

be8eef77aa481a59cd5d3100b8a56a49.png
  • 物理结构
物理结构包括以下三种文件类型:
1.控制文件
2.数据文件
3.重做日志文件

7e9d88bb16eb699985c4b80da8ccf7fd.png
  • Oracle体系结构小结
1.内存结构:
- SGA:数据库高速缓存、重做缓冲区以及各种池
- PGA(Program Global Area)
2.进程结构:
- 用户进程和服务器进程
- 后台进程:SMON、PMON、DBWn、CKPT、LGWR、ARCn等
3.存储结构:
- 逻辑:Database、Schema、Tablespace、Segment、Extent
4.Oracle block
- 物理:Data files、Control files、Redo log files

性能优化

数据字典可以有效分析和定位问题
AWR是最常用的调优工具
  • 查看实例状态
SELECT 
  • 查看数据库状态
SELECT 
  • 控制文件
SELECT 
  • 在线日志
SELECT 
  • 表空间
SELECT 
  • 数据文件
SELECT 
  • 表空间使用情况
SELECT 
  • 等待事件
SELECT 
  • diskread
SELECT 
  • 死锁
SELECT 
  • 缓存命中率
SELECT 

优化案例

一条插入语句,平均耗时
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值