oracle awr报告生成_5.性能测试 - Oracle体系结构和性能优化简介
体系结构
- Oracle服务器:
Oracle服务器是一个数据库管理系统,它为信息管理提供了开放、综合和集成的方法,包括Oracle实例和
Oracle数据库。
- Oracle实例(Instance)
单实例数据库,RAC
由内存结构和后台就进程结构组成
- 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体系结构和性能优化简介相关推荐
- oracle awr报告生成_分享AWR报告的生成和简单分析方法
生成AWR报告方法: 第一步:数据库压力测试卡开始时:生成第一个快照: Sql>exec dbms_workload_repository.create_snapshot(); 第二步:数据库压 ...
- oracle临时表经常被锁_5.性能测试 - Oracle体系结构和性能优化简介
体系结构 Oracle体系结构示意图 Oracle服务器: Oracle服务器是一个数据库管理系统,它为信息管理提供了开放.综合和集成的方法,包括Oracle实例和 Oracle数据库. Oracle ...
- oracle awr报告生成_oracle11g awr报告分析—WORKLOAD REPOSITORY report
概述 关于生产环境的一份awr报告分析,之前闲着无聊整理了100页,后面拆分下各个模块介绍下怎么看awr报告. 我们在看性能指标的时候,需要知道数据库出现性能问题,一般都在三个地方,io,内存,cpu ...
- oracle av rd ms,Oracle AWR报告生成与查看
接上一段报告文件 Instance Activity Stats DB/Inst: PENG/peng Snaps: 64-70 Statistic ...
- Oracle AWR报告生成步骤
1.手工刷出快照 开始压测前执行 SQL> exec dbms_workload_repository.create_snapshot(); 结束压测后执行 SQL> exec dbms ...
- Oracle AWR 报告的生成和分析
1.背景 1.1.Linux 服务器情况 # cat /etc/issue Red Hat Enterprise Linux Server release 6.1 (Santiago) Kernel ...
- Oracle AWR报告指标全解析-11011552
1-5 Top 5 Timed Events Waits : 该等待事件发生的次数, 对于DB CPU此项不可用 Times : 该等待事件消耗的总计时间,单位为秒, 对于DB CPU 而言是前台进程 ...
- Oracle AWR报告指标全解析
1-5 Top 5 Timed Events Waits : 该等待事件发生的次数, 对于DB CPU此项不可用 Times : 该等待事件消耗的总计时间,单位为秒, 对于DB CPU 而言是前台进程 ...
- Oracle AWR报告详细分析
Oracle AWR报告详细分析 (文档 ID 1523048.1) AWR 是 Oracle 10g 版本 推出的新特性, 全称叫Automatic Workload Repository-自动 ...
最新文章
- Strom程序的并发机制,配置并行度(代码实现)、动态改变并行度,local or shuffle分组,分组的概念以及分组类型
- Raft成员变更的工程实践
- React使用create-react-app 创建项目失败,解决方法
- IC卡应用系统开发-(一)卡片读写
- 苹果手机连接电脑服务器传文件,实用!三种iPhone与Windows电脑互传文件操作技巧,...
- 思科单臂路由最详细教程
- 如何在国外进行自然科学研究
- 优雅计算算式:后缀表达式
- 关于下一代安全防护的讨论
- 基于区块链的大数据交易模式研究与探索
- 深度解读互联网新时代:Web3.0
- ubuntu-CPU频率调节
- Ueditor编辑器实战 HTML / vue+v-model
- 盘点明年让你高攀不起的50个项目
- Java Swing去掉按钮(JButton)中文字周围的虚线框
- 【转载】生活常识,人人必备
- python判断sqlite数据库是否存在_sqlite3 判断数据库是否存在
- 字符串转化为 List 集合
- java获取视频时长_Java获取视频的大小、时长
- word如何显示空格、回车、tab、分隔符等格式标记
热门文章
- 【干货】2021技术展望:开拓新局,掌握变局时代的技术先机-埃森哲.pdf(附下载链接)
- 测试开发之测试方法第二篇
- 视觉slam第一讲——
- 跨越『时空』的难样本挖掘!
- 文本匹配开山之作--双塔模型及实战
- python拖拽获取文件路径_求助tkinter模块如何获取拖拽文件的内容
- 面试准备每日系列:计算机底层之并发编程(二)缓存行、一致性协议、伪共享、disruptor、CAS等待
- 关于稀疏矩阵转化为稠密矩阵问题 (scipy.sparse格式和tensor稀疏张量格式)
- 文章内部设置目录,锚点
- 【十】JDBC:使用 jmeter 批量在数据库创建 1 万多条数据;批量删除重复数据