体系结构

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

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

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

  • 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参数确定

共享池
  • 库高速缓存
存储最近使用的SQL和PL/SQL语句的有关信息
使得常用语句可以共享
由"最近最少使用算法"(LRU)管理
包括以下两个结构:
1.共享的SQL区
2.共享的PL/SQL区
大小由共享池的大小确定

  • 数据字典高速缓存(Data Dictionary Cache)
数据库中最近使用对象的定义的集合
包括与数据文件、表、索引、列、用户、权限以及其他数据库对象有关的信息
在语法分析阶段,服务器进程会在数据字典中查找用于解析对象名和验证访问的信息
将数据字典信息缓存到内存中,可缩短查询和DML的响应时间
大小由共享池的大小决定

  • 数据库缓冲区高速缓存(Buffer Cache)
存储已从数据文件中检索到的数据块的副本
能够大幅提高获取和更新数据时的性能
通过LRU算法管理
主数据块的大小由DB_BLOCK_SIZE确定
所有用户共享

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

  • 大型共享池(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服务器交互的程序
执行生成的数据库调用并返回相关结构
可以是专用服务器或共享服务器

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

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

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

  • 系统监控程序(SMON)
职责:
1.实例恢复:
- 前滚重做日志中的更改
- 打开数据库供用户访问
- 回退未提交的事务处理
2.合并空闲空间
3.回收临时段

  • 进程监视器(PMON)
进程失败后,通过以下方法进行清理:
1.回退事务处理
2.释放锁
3.释放其它资源
4.重新启动已失效的调度程序

  • 检查点
职责包括:
1.在检查点发信号给DBWn
2.使用检查点信息更新数据文件的标头
3.使用检查点信息更新控制文件

  • 归档程序(ARCn)
可选的后台进程
设置ARCHIVELOG模式时自动归档联机重做日志
可以保留数据库的全部更改记录

  • 数据库存储结构(Storage Architecture)
  • 数据库的逻辑和物理结构
  • 逻辑结构
指示数据库物理空间的使用情况
层次结构由表空间、段、区和块组成

  • 表空间和数据文件
表空间包括一个或多个数据文件
一个数据文件只能属于一个表空间

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

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

  • 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 instance_name, host_name, startup_time, status, database_status FROM v$instance;
INSTANCE_NAME    HOST_NAME           STARTUP_TIME         STATUS     DATABASE_STATUS
---------------- ------------------- -------------------- ---------- ---------------
ora12c           VL-Dev-11407        10-DEC-18            OPEN       ACTIVE

  • 查看数据库状态
SELECT name, log_mode, open_mode FROM v$database;
NAME      LOG_MODE     OPEN_MODE
--------- ------------ -----------------
ORA12C    NOARCHIVELOG READ WRITE

  • 控制文件
SELECT status, name FROM v$controlfile;
STATUS  NAME
------- -----------------------------------/oracledata/ora12c/control01.ctl/oracledata/ora12c/control02.ctl

  • 在线日志
SELECT group#, status, type, member FROM v$logfile;
GROUP#     STATUS  TYPE    MEMBER
---------- ------- ------- ------------------------------------1         ONLINE  /oracledata/ora12c/redo01.log2         ONLINE  /oracledata/ora12c/redo02.log3         ONLINE  /oracledata/ora12c/redo03.log

  • 表空间
SELECT tablespace_name, status FROM dba_tablespaces;
TABLESPACE_NAME                STATUS
------------------------------ ---------
SYSTEM                         ONLINE
SYSAUX                         ONLINE
UNDOTBS1                       ONLINE
TEMP                           ONLINE
USERS                          ONLINE
EBS                            ONLINE

  • 数据文件
SELECT file_name, status FROM dba_data_files;
FILE_NAME                           STATUS
----------------------------------  ---------
/oracledata/ora12c/system01.dbf     AVAILABLE
/oracledata/ora12c/sysaux01.dbf     AVAILABLE
/oracledata/ora12c/undotbs01.dbf    AVAILABLE
/oracledata/ora12c/users01.dbf      AVAILABLE
/oracledata/ora12c/datafile/ebs.dbf AVAILABLE

  • 表空间使用情况
SELECT f.tablespace_name,a.total,f.free,round((f.free/a.total)*100) "% Free" FROM (SELECT tablespace_name,sum(bytes/(1024*1024)) total FROM dba_data_files GROUP BY tablespace_name) a, (SELECT tablespace_name,round(sum(bytes/(1024*1024))) free FROM dbs_free_space GROUP BY tablespace_name) f WHERE a.tablespace_name = f.tablespace_name(+) ORDER BY "%Free";TABLESPACE_NAME                     TOTAL       FREE     % Free
------------------------------ ---------- ---------- ----------
EBS                                159104       7589          5
SYSAUX                                800         76         10
SYSTEM                                700        314         45
USERS                                   5          4         80
UNDOTBS1                            11180      11114         99

  • 等待事件
SELECT sid,event,pl,WAIT_TIME,SECONDS_IN_WAITFROM v$session_waitWHERE event NOT LIKE 'SQL%'AND event NOT LIKE 'rdbms%';SID EVENT                                                                    P1  WAIT_TIME SECONDS_IN_WAIT
---------- ---------------------------------------------------------------- ---------- ---------- ---------------1 LGWR worker group idle                                                    0          0           661532 Streams AQ: qmn coordinator idle wait                                     0          0          697 smon timer                                                              300          0             134193 pmon timer                                                              300          0          3194 LGWR worker group idle                                                    1          0           66153

  • diskread
SELECT SQL_TEXT FROM (SELECT * FROM V$SQLAREA ORDER BY DISK_READS);SQL_TEXT
------------------------------------------------------------------
SELECT NVL(TO_NUMBER(EXTRACT(XMLTYPE(:B2 ), :B1 )), 0) FROM DUAL
SELECT count(*) FROM sys.wri$_adv_executions e WHERE e.name = :exec_name and e.task_id = 1982

  • 死锁
SELECT sid,serial#,username,SCHEMANAME,osuser,MACHINE,terminal,PROGRAM,owner,object_name,object_type,o.object_idFROM dba_objects o, v$locked_object l, v$session sWHERE o.object_id = l.object_idAND s.sid = l.session_id; 

  • 缓存命中率
SELECT a.VALUE + b.VALUE logical_reads, c.VALUE phys_reads, ROUND(100*(1-c.value/(a.value+b.value)),4) hit_ratioFROM v$sysstat a, v$sysstat b, v$sysstat cWHERE a.NAME = 'db block gets'AND b.NAME = 'consistent gets'AND c.NAME = 'physical reads';LOGICAL_READS PHYS_READS  HIT_RATIO
------------- ---------- ----------95224770     128346    99.8652

优化案例

一条插入语句,平均耗时0.69秒
INSERT INTO testdb VALUES('a', 'b', 'c', 'd', 'e', 'f', '', '', '', '', '', '');基本情况:
--1--
SELECT num_rows, degree FROM dba_tables WHERE table_name = 'testdb';NUM_ROWS DEGREE
---------- ----------------------------------------6643          1--2--
SELECT SUM(bytes) FROM dba_segments WHERE segment_name = 'testdb';
SUM(BYTES)
-------------------7340032(7M)--3--
SELECT index_name FROM dba_indexes WHERE table_name = 'testdb';
INDEX_NAME
--------------------------------------------------------------------------------
PK_TESTDB--4--
SELECT index_name,column_name,column_position FROM dba_ind_columns WHERE table_name = 'testdb';
INDEX_NAME                 COLUMN_NAME  COLUMN_POSITION
--------------------------------------------- ------------------------- ---------------------------------------------
PK_TESTDB                  ID_SYS        1
PK_TESTDB                  ID_MODU       2AWR分析:
--1--
SQL ID: frjd8zfy2jfdq Plan Hash: 510421217
SELECT executions,end_of_fetch_count,elapsed_time/px_servers elapsed_time,cpu_time/px_servers cpu_time,buffer_gets/executions buffer_getsFROM (SELECT SUM(executions) AS executions,SUM(CASE WHEN px_servers_executions)>0 THEN px_servers_executions ELSE executions END) AS px_servers,SUM(end_of_fetch_count) AS end_of_fetch_count,SUM(elapsed_time) AS elapsed_time,SUM(cpu_time) AS cpu_time,SUM(buffer_gets) AS buffer_getsFROM gv$sql WHERE executions>0AND sql_id='26csw3kagnrds'AND parsing_schema_name = 'SYS')call     count       cpu    elapsed       disk      query    current        rows
------- ------  -------- ---------- ---------- ---------- ----------  ----------
Parse       18      0.00       0.00          0          0          0           0
Execute     18      0.04       0.07          0          0          0           0
Fetch       18      0.02      12.24          0          0          0          18
------- ------  -------- ---------- ---------- ---------- ----------  ----------
total       54      0.06      12.31          0          0          0          18--2--
Elapsed times include waiting on following events:Event waited on                             Times   Max. Wait  Total Waited----------------------------------------   Waited  ----------  ------------enq: PS - contention                           64        0.00          0.01PX Deq: reap credit                           865        0.00          0.00PX Deq: Join ACK                              144        0.00          0.02IPC send completion sync                      108        0.00          0.00PX Deq: Parse Reply                            72        0.00          0.01PX Deq: Execute Reply                          72        0.64         12.17reliable message                               18        0.00          0.00PX Deq: Signal ACK EXT                         72        0.00          0.02PX Deq: Slave Session Stats                    72        0.00          0.00latch: ges resource hash list                   1        0.00          0.00

oracle awr报告生成_5.性能测试 - Oracle体系结构和性能优化简介相关推荐

  1. oracle awr报告生成_分享AWR报告的生成和简单分析方法

    生成AWR报告方法: 第一步:数据库压力测试卡开始时:生成第一个快照: Sql>exec dbms_workload_repository.create_snapshot(); 第二步:数据库压 ...

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

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

  3. oracle awr报告生成_oracle11g awr报告分析—WORKLOAD REPOSITORY report

    概述 关于生产环境的一份awr报告分析,之前闲着无聊整理了100页,后面拆分下各个模块介绍下怎么看awr报告. 我们在看性能指标的时候,需要知道数据库出现性能问题,一般都在三个地方,io,内存,cpu ...

  4. oracle av rd ms,Oracle AWR报告生成与查看

    接上一段报告文件 Instance Activity Stats                      DB/Inst: PENG/peng  Snaps: 64-70 Statistic     ...

  5. Oracle AWR报告生成步骤

    1.手工刷出快照 开始压测前执行 SQL> exec dbms_workload_repository.create_snapshot();  结束压测后执行 SQL> exec dbms ...

  6. Oracle AWR 报告的生成和分析

    1.背景 1.1.Linux 服务器情况 # cat /etc/issue Red Hat Enterprise Linux Server release 6.1 (Santiago) Kernel ...

  7. Oracle AWR报告指标全解析-11011552

    1-5 Top 5 Timed Events Waits : 该等待事件发生的次数, 对于DB CPU此项不可用 Times : 该等待事件消耗的总计时间,单位为秒, 对于DB CPU 而言是前台进程 ...

  8. Oracle AWR报告指标全解析

    1-5 Top 5 Timed Events Waits : 该等待事件发生的次数, 对于DB CPU此项不可用 Times : 该等待事件消耗的总计时间,单位为秒, 对于DB CPU 而言是前台进程 ...

  9. Oracle AWR报告详细分析

    Oracle AWR报告详细分析  (文档 ID 1523048.1) AWR 是 Oracle  10g 版本 推出的新特性, 全称叫Automatic Workload Repository-自动 ...

最新文章

  1. Strom程序的并发机制,配置并行度(代码实现)、动态改变并行度,local or shuffle分组,分组的概念以及分组类型
  2. Raft成员变更的工程实践
  3. React使用create-react-app 创建项目失败,解决方法
  4. IC卡应用系统开发-(一)卡片读写
  5. 苹果手机连接电脑服务器传文件,实用!三种iPhone与Windows电脑互传文件操作技巧,...
  6. 思科单臂路由最详细教程
  7. 如何在国外进行自然科学研究
  8. 优雅计算算式:后缀表达式
  9. 关于下一代安全防护的讨论
  10. 基于区块链的大数据交易模式研究与探索
  11. 深度解读互联网新时代:Web3.0
  12. ubuntu-CPU频率调节
  13. Ueditor编辑器实战 HTML / vue+v-model
  14. 盘点明年让你高攀不起的50个项目
  15. Java Swing去掉按钮(JButton)中文字周围的虚线框
  16. 【转载】生活常识,人人必备
  17. python判断sqlite数据库是否存在_sqlite3 判断数据库是否存在
  18. 字符串转化为 List 集合
  19. java获取视频时长_Java获取视频的大小、时长
  20. word如何显示空格、回车、tab、分隔符等格式标记

热门文章

  1. 【干货】2021技术展望:开拓新局,掌握变局时代的技术先机-埃森哲.pdf(附下载链接)
  2. 测试开发之测试方法第二篇
  3. 视觉slam第一讲——
  4. 跨越『时空』的难样本挖掘!
  5. 文本匹配开山之作--双塔模型及实战
  6. python拖拽获取文件路径_求助tkinter模块如何获取拖拽文件的内容
  7. 面试准备每日系列:计算机底层之并发编程(二)缓存行、一致性协议、伪共享、disruptor、CAS等待
  8. 关于稀疏矩阵转化为稠密矩阵问题 (scipy.sparse格式和tensor稀疏张量格式)
  9. 文章内部设置目录,锚点
  10. 【十】JDBC:使用 jmeter 批量在数据库创建 1 万多条数据;批量删除重复数据