fetchSize 和 with(nolock) 简单记录了解

0. 开端

最近工作接触到了

  • fetchSize
  • with(nolock)
    两个以前没接触过的概念,特地记录一下

1. fetchSize

最近帮一个银行项目采集表,有个采集任务突然报错OOM,和同事沟通说OpenEdge这个源数据库不支持 fetchSize ,只能调大JVM参数。

fetch-size to specify the number of rows to be fetched from the database when additional rows are needed.

Oracle的文档中,对概念的讲解很清晰。
fetchSize 指的是 从数据库抓取数据时需要的行数,从概念上理解很容易想到这个是类似buffer的概念,这保证了select极大数据集时无需大块内存。

  1. 如果将FetchSize 设为0,会返回所有结果行,会降低性能 并有内存不足错误的可能
  2. FetchSize 可用于调整吞吐量之间的权衡 和响应时间。 较小的提取大小可以提高初始响应时间 查询。 较大的提取大小可以提高整体响应时间,但代价是 额外的内存
    来源process openEdge文档

fetchSize大概就是这样子,不过对于同事说的“OpenEdge这个源数据库不支持 fetchSize ”,我在网上找到的情况是新版本的openEdge是支持的,嘛,毕竟是老项目了,不管了~

2. with(nolock)

采集另一个项目的时候,那边交接人员特意在邮件里提到

一定要带 with(nolock),因为这个库默认是Lock的,不像SQL的默认是nolock逻辑。

爆栈的解释是

WITH (NOLOCK) is the equivalent of using READ UNCOMMITED as a transaction isolation level. So, you stand the risk of reading an uncommitted row that is subsequently rolled back, i.e. data that never made it into the database. So, while it can prevent reads being deadlocked by other operations, it comes with a risk. In a banking application with high transaction rates, it’s probably not going to be the right solution to whatever problem you’re trying to solve with it IMHO.

简单理解是
with(nolock)等价与把事务等级设置为 读未提交,这样就没有执行事务所导致的阻塞。没有阻塞,就提高了读取速率,代价是脏读

参考阅读:https://blog.csdn.net/qq_41153943/article/details/122312434

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值