Physical Reads(物理读)和Logical Reads(逻辑读)(转)

现在没得时间去总结,记录一下别人写的有关文章了

这个是关于oracle里的物理读和逻辑读比较清楚的文章

physicalreads> "physicalreads direct +physicalreads cache"

Total number of data blocks read from disk.
This value can be greater than the value of "physicalreads direct" plus "physicalreads cache" as reads into process private buffers also included in this statistic.

physicalreads direct(物理上直接读取的块数

Number of reads directly from disk, bypassing the buffer cache.
For example, in high bandwidth, data-intensive operations such as parallel query, reads of disk blocks bypass the buffer cache to maximize transfer rates and to prevent the premature aging of shared data blocks resident in the buffer cache.


physicalreads cache(物理读取缓存)
Total number of data blocks read from disk into the buffer cache. This is a subset of "physicalreads " statistic.

sessionlogicalreads= "db block gets" + "consistent gets".

逻辑读 = 一致读 + db block gets
物理读是内容不在内存中,要去硬盘中读入内存 增加IO
逻辑读内容在内存中,不需要读硬盘 无IO

consistent gets:来自buffer cache + undo(如果有数据改变的话,即在查询点之前的DML操作没有提交)
db_block_gets:来自buffer cache

DB Block Gets:请求的数据块在buffer能满足的个数
Consistent Gets:数据请求在回滚段Buffer中的总数
逻辑读 = 一致读 + DB Block Gets

逻辑读就是从内存在读取的数据块数,物理读就是从硬盘读取到缓冲区的数据块数。

The sum of "db block gets" plus "consistent gets".This includes logicalreadsof database blocks from either the buffer cache or process private memory.

db block gets
Number of times a CURRENT block was requested

consistent gets
Number of times a consistent read was requested for a block.
See Also: "consistent changes" and "session logicalreads" statistics

consistent changes
Number of times a user process has applied rollback entries to perform a consistent read on the block
Work loads that produce a great deal of consistent changes can consume a great deal of resources. The value of this statistic should be small in relation to the "consistent gets" statistic.

PhysicalReads:从磁盘读到Buffer cache数据块的数量

物理读是由于在DB_BLOCK_BUFFER中没有找到需要的数据,需要进行缓冲区的数据置换,物理读操作是非常消耗系统资源的,应当尽量避免。

DB Bocks gets,Consistent gets And Physicalreads
通过前面关于索引扫描还是全表扫描(Index Scan Or Full Table Scan)?的讨论又发现了自己基础概念不清晰的一个大问题:
DB block gets,Consistent gets,PhysicalreadsLogicalreads各自具体表示的是什么以及之间的的关系到底是怎样。

官方在线文档基本的定义为如下:
DB block gets:the number of accesses to the current image of a block
Consistent gets:the number of accesses to a read-consistent image of a block
Physicalreads:the number of blocks read from disk

通过官方的简要解释加上对fenng和旺旺的请教以及网上搜索了一些资料,终于加深了一些理解:

这其中主要涉及到了Oracle读取数据的consistent mode和current mode这两个模式,对于db block gets是在current mode下读取的block数目(单位应该是“块次”,同一个block读取了两个算做2),而consistent gets是在consistent mode下读取的block数目(单位同上)。
current mode下读取数据是为了保证读取到的数据是当前时间点上最新的数据,这样做的目的一般都是为了DML语句的需求,比如需要更新,自然需要知道最新的数据才行;consistent mode呢主要是为了保证Oracle数据一致读的特性,一般都是在select情况下发生,读到的数据可能是一个实际存在的block,也有可能需要根据scn信息以及transaction相关信息以及回滚段中数据来构造。

physicalreads是与logicalreads相对的一个概念,两者的区别是读取的数据是从buffer中读取到还是从disk上的db file中取到。通过v$sysstat也可以看到,里面还有db block gets from cache以及consistent gets from cache两项,且这两项的数值与db block gets和consistent gets并不相同且小于后两者。

所以不管是db block gets还是consistent gets,都可能出现了physicalreadslogicalreads两种情况(由buffer中的是否已经存在需要的数据),也即是说,db block gets与consistent gets两者已经构成了一次数据库操作中读取的所有block的总次数了。因此,logicalreads自然也就可以通过如下公式算的:logicalreads= (db block gets + consistent gets) - physicalreads

由此,自然也就得出了cache命中率的公式:
Hit Ratio = (db block gets + consistent gets - physicalreads) / (db block gets + consistent gets)
OR
Hit Ratio = 1 – (physicalreads/(db block gets + consistent gets))

PS:
由于在Oracle中,取数据最后都是从Buffer中取,所以每出现一个physicalreads必然会出现一次 logicalreads,但是这里有一个需要注意的地方,就是当出现一个physicalreads后接着会有一个logicalreads这里,实际上这里只算了1 block(physicalreads)!

一致读是由于需要读取的数据已经被锁定或修改,需要从回滚段的缓冲区中读取,一致读保证了数据一致性,但是大量的一致读说明系统设计或内存配置出现了问题,也是需要特别注意的。

DB Block Gets是指用户请求而且又恰好在DB_BLOCK_BUFFER中的数据量,对于一个良好的系统,绝大部分都就应当是这种情况。

逻辑读 = 一致读 + DB Block Gets 逻辑读就是从内存在读取的数据块数,物理读就是从硬盘读取到缓冲区的数据块数。


内容概要:本文档围绕六自由度机械臂的ANN人工神经网络设计展开,涵盖正向与逆向运动学求解、正向动力学控制,并采用拉格朗日-欧拉法推导逆向动力学方程,所有内容均通过Matlab代码实现。同时结合RRT路径规划与B样条优化技术,提升机械臂运动轨迹的合理性与平滑性。文中还涉及多种先进算法与仿真技术的应用,如状态估计中的UKF、AUKF、EKF等滤波方法,以及PINN、INN、CNN-LSTM等神经网络模型在工程问题中的建模与求解,展示了Matlab在机器人控制、智能算法与系统仿真中的强大能力。; 适合人群:具备一定Ma六自由度机械臂ANN人工神经网络设计:正向逆向运动学求解、正向动力学控制、拉格朗日-欧拉法推导逆向动力学方程(Matlab代码实现)tlab编程基础,从事机器人控制、自动化、智能制造、人工智能等相关领域的科研人员及研究生;熟悉运动学、动力学建模或对神经网络在控制系统中应用感兴趣的工程技术人员。; 使用场景及目标:①实现六自由度机械臂的精确运动学与动力学建模;②利用人工神经网络解决传统解析方法难以处理的非线性控制问题;③结合路径规划与轨迹优化提升机械臂作业效率;④掌握基于Matlab的状态估计、数据融合与智能算法仿真方法; 阅读建议:建议结合提供的Matlab代码进行实践操作,重点理解运动学建模与神经网络控制的设计流程,关注算法实现细节与仿真结果分析,同时参考文中提及的多种优化与估计方法拓展研究思路。
### 基于Spring Boot的甜品店点餐系统的设计与实现开题报告模板 #### 1. 研究背景及意义 随着互联网技术的飞速发展,餐饮行业逐渐向数字化和智能化方向转型。传统的点餐方式已无法满足现代消费者对便捷性和效率的需求。基于Spring Boot框架的甜品店点餐系统能够有效解决传统点餐模式中的诸多问题,如排队等待时间长、人工沟通不畅等,同时提升用户体验和服务质量[^3]。通过引入微信小程序或Web端作为前端展示平台,结合后端Spring Boot框架进行数据处理和业务逻辑管理,可以为甜品店提供一套完整的解决方案。 #### 2. 系统目标 本系统旨在设计并实现一个基于Spring Boot的甜品店点餐系统,主要目标包括: - 提供用户友好的界面,支持菜品浏览、下单、支付等功能。 - 实现后台管理功能,包括商品信息管理、订单管理、用户管理等。 - 提升甜品店的服务效率和客户满意度。 - 通过数据分析模块,帮助商家了解销售情况和用户偏好。 #### 3. 系统功能需求分析 根据用户和管理员的实际需求,系统功能可分为前台功能和后台功能两部分: ##### 3.1 前台功能 - 用户注册与登录:支持用户通过手机号或邮箱完成注册和登录操作。 - 菜品展示:用户可以查看甜品店提供的所有菜品信息,包括图片、价格、描述等。 - 购物车管理:用户可以将菜品加入购物车,并对购物车中的商品进行增删改查操作。 - 下单与支付:用户可以提交订单并选择支付方式(如微信支付、支付宝等)。 - 订单查询:用户可以查看自己的历史订单状态。 ##### 3.2 后台功能 - 商品管理:管理员可以添加、修改、删除商品信息。 - 订单管理:管理员可以查看、处理用户的订单,包括确认、发货、退款等操作。 - 用户管理:管理员可以查看用户信息,并对异常用户进行封禁或解封操作。 - 数据统计:提供销售报表和用户行为分析功能,辅助商家决策。 #### 4. 技术选型 本系统采用Spring Boot作为后端开发框架,结合Vue.js或微信小程序作为前端展示层。数据库选用MySQL,用于存储用户信息、商品信息、订单信息等数据。此外,为了提升系统的可扩展性和性能,还引入了Redis缓存技术和Maven构建工具。 #### 5. 系统架构设计 系统整体采用前后端分离的架构设计,具体如下: - **前端**:使用Vue.js或微信小程序开发,负责与用户交互,通过RESTful API与后端通信。 - **后端**:基于Spring Boot框架实现,负责处理业务逻辑、数据持久化以及与其他服务的集成。 - **数据库**:采用MySQL存储系统的核心数据,并通过MyBatis或JPA实现数据访问层。 #### 6. 开发环境配置 - 操作系统:Windows 10/Linux - 开发工具:IntelliJ IDEA/VS Code - Java版本:JDK 1.8+ - 数据库:MySQL 5.7+ - 其他依赖:Maven、Redis、Nginx #### 7. 系统预期成果 - 完整的基于Spring Boot的甜品店点餐系统源码。 - 功能齐全的前端界面和后台管理页面。 - 数据库设计文档和系统部署说明。 - 用户手册和技术文档。 --- ### 示例代码片段 以下是系统中可能涉及的部分代码示例: #### 7.1 商品实体类定义 ```java @Entity @Table(name = "t_product") public class Product { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private String name; private Double price; private String description; private String imageUrl; // Getter and Setter methods } ``` #### 7.2 商品控制器示例 ```java @RestController @RequestMapping("/api/products") public class ProductController { @Autowired private ProductService productService; @GetMapping public List<Product> getAllProducts() { return productService.getAllProducts(); } @PostMapping public ResponseEntity<String> addProduct(@RequestBody Product product) { productService.addProduct(product); return ResponseEntity.ok("Product added successfully"); } } ``` --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值