Oracle性能概要备忘(20190224工事中)

编程入门 行业动态 更新时间:2024-10-25 16:30:14

Oracle性能概要备忘(20190224<a href=https://www.elefans.com/category/jswz/34/1719911.html style=工事中)"/>

Oracle性能概要备忘(20190224工事中)

1.Sql实行计划,表的访问方式和结合方法


大致理一下Oracle体系结构,从上图可以看出,能简单的分为俩块
1.DB Instance
主要由共享池(Shared Pool)和DB Buffer,RODO Log Buffer
2.DB Storage
Oracle用到的数据文件(Data数据文件,参数文件,制御文件,REDO Log文件,归档Log文件)
思路:
1).用户进程(User Process)通过SQL*PLUS客户端或者通过Web App向通过监听文件的用户配置向Oracle发送请求
2).然后在Server Process中会持有PGA领域(这个领域会用于,排序,hash)
3).在SGA领域(Shared Pool:实行计划,DB Buffer:读取的Data文件数据,RODO Log Buffer:记录日志)
4).Background进程(CKPT:不同期的更新DB Buffer的数据到Data文件,LGWR:COMMIT的时候把RODO Log Buffer写入到REDO Log文件)

Select请求发生,Sql语句语法检测,权限检测(有没有这张表,对这张表有没有访问权限),SQL语句hash化,在Shared Pool中查找有没有一致的实行计划,没有Oracle优化器根据统计情报产生实行计划,选择IO cost最小的实行计划(这步尽量避免)(这步叫做硬解析),把实行计划缓存在Shared Pool中,执行实行计划,访问Data文件,把从文件中读取到的数据缓存到DB buffer中,然后Fetch。

实行计划解析:
1.软软解析(Softer Softer)
在Session中执行3次相同的游标会缓存到PGA,这个游标一直开着,当再有相同的SQL执行时,则跳过解析的所有过程直接去取实行计划。
2.软解析
1.语法、语义及权限检查;
2.将整条SQL hash后从库缓存中查找一致的实行计划。
3.硬解析:
1.语法、语义及权限检查;
2.将整条SQL hash后从库缓存中查找一致的实行计划。
3.软解析找不到一致的实行计划,根据统计情报生成可能成千上万个实行计划
4.实行计划缓存

shared pool:
1.free (空闲)
2.library cache (库缓存,缓存sql语句以及sql所对应的执行计划)
3.row cache (字典缓存——库里有多少表,多少用户,多少个列,列的名字,列的数据类型,每个表多大等等都属于数据库自身信息。也就是统计情报)

DB Buffer:分为Default、Keep和Recycle

Sql实行计划分为下面大致两个方向:
表的访问方式(索引访问,全表访问…)
两张表之间的结合顺序,结合方法(嵌套循环连接:Nested Loops Join,排序合并连接:Sort Merge Join,哈希连接:Hash Join)

1-1 表的访问方式(索引访问,全表访问…)

  1. 索引唯一扫描(INDEX UNIQUE SCAN)
    唯一索引查找一个数值经常返回单个ROWID。如果存在UNIQUE 或PRIMARY KEY 约束(它保证了语句只存取单行)的话,Oracle经常实现唯一性扫描。

  2. 索引范围扫描(INDEX RANGE SCAN)
    1.在唯一索引列上使用了range操作符(> < <> >= <= between)
    2.在组合索引上,只使用部分列进行查询,导致查询出多行
    3.对非唯一索引列上进行的任何查询

  3. 全表扫描(TABLE ACCESS FULL)
    为实现全表扫描,Oracle顺序地访问表中每条记录,并检查每一条记录是否满足WHERE语句的限制条件。
    ORACLE采用一次读入多个数据块(database block)的方式优化全表扫描,而不是只读取一个数据块,这极大的减少了I/O总次数,提高了系统的吞吐量,所以利用多块读的方法可以十分高效地实现全表扫描。需要注意的是只有在全表扫描的情况下才能使用多块读操作。在这种访问模式下,每个数据块只被读一次。

  4. 通过ROWID访问表(table access by ROWID)
    ROWID指出了该行所在的数据文件、数据块以及行在该块中的位置,所以通过ROWID来存取数据可以快速定位到目标数据上,是Oracle存取单行数据的最快方法。
    select column1,column2 from tableName where rowid=‘WWEDAAA12DAA’;

1-2 表之间的结合顺序,结合方法(嵌套循环连接:Nested Loops Join,排序合并连接:Sort Merge Join,哈希连接:Hash Join)

  1. NESTED LOOP(驱动顺序)

  2. Hash Join(驱动顺序)

  3. SORT MERGE JOIN

2.从事务方面

事务的四大特性以及事务的隔离级别,脏读,不可重复读,幻读,乐观锁,悲观锁等等

3.分区相关

性能提升一般马上会想到的就是分区
范围分区
散列分区
列表分区
复合分区

4.实行计划具体分析和统计情报

更多推荐

Oracle性能概要备忘(20190224工事中)

本文发布于:2024-03-08 05:06:43,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1719909.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:工事   概要   性能   Oracle

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!