阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

Oracle delete操作隐藏着你可能不知道的秘密

414次阅读
没有评论

共计 1899 个字符,预计需要花费 5 分钟才能阅读完成。

一 现象描述

Delete 是 Oracle 数据库中的常用操作,尤其是在自动化测试中,初始化环境、前置准备都不可避免的进行增删操作,但持续一时间后,可能会碰到表空间不足这类报错现象,这就不禁纳闷儿了,明明插入数据前会有删除的,数据总量并没有呈现明显的量级变化,为什么表占用空间却在偷偷增大呢?

二 现象分析

出现上述现象的原因是 Delete 操作并不会释放占用的空间。在讲解原因之前,先了解下 oracle 中高水位线的概念,有助于理解 delete 操作产生的这种现象。

所谓的高水位(HWM),通俗的讲就是一个标记,用来记录已经有多少数据块(Block)分配给表,可以拿水库的历史最高水位来类比,当使用 delete 操作后,数据虽然被删除了,但这个高水位的标记并没有降低,就好比水库的历史最高水位不会因为水被释放了而降低。因而,原则上在没有外部干预的条件下,这个高水位标记值只会增大,不会降低。

三 实战模拟重现现象

根据上面的现象描述和分析,接下来,我会用具体的实例模拟该现象,使大家可以更直观的了解。

第 1,创建一张测试表 test,具体字段不需要关心,只要知道初始了存储空间为 100M,如图所示:

Oracle delete 操作隐藏着你可能不知道的秘密

第 2,创建完成后,我们查看下数据表占用的空间,如图所示:

Oracle delete 操作隐藏着你可能不知道的秘密

其中,查询前需要对表进行分析,使用命令为:ANALYZE TABLE test ESTIMATE STATISTICS; 查询语句为:SELECT blocks, empty_blocks, num_rows FROM user_tables WHERE table_name = ‘TEST’;

注意上面三个字段的结果:BLOCKS=0;  EMPTY_BLOCKS=13312;  NUM_ROWS=0,即当前表占用的块数为 0,默认 1 BLOCK = 8kb,预分配的块为 13312,行数为 0。

一切都没有问题,新创建的表,没有数据嘛,当然行数为 0,占用块数为 0 喽。

第 3,写一个语句块,循环插入 1000 条语句,再次对 test 表进行分析、查询,结果如下:

Oracle delete 操作隐藏着你可能不知道的秘密

从图中可以看到,占用 BLOCKS=222,NUM_ROWS=1000,合乎逻辑,插入了 1000 条数据,占用了空间嘛。

第 4,使用 Delete 语句删除 1000 条数据,再次对 test 表进行分析、查询,结果却是如下:

Oracle delete 操作隐藏着你可能不知道的秘密

从上图中可以清楚的看到,数据被删除后,NUM_ROWS= 0 了,但是 BLOCKS 并没有被置为 0,也就是这部分数据块仍然被认为是占用的。

因此,就出现了本文一开始就提到的现象,随着不断的插入、删除数据,BLOCKS 也会不断扩大,尽快 delete 操作后,可能表中数据量很少,但表占用的存储空间未减少。

四 解决方法

针对 delete 操作引起的空间不释放现象,或者,更正式一点的说法,如何降低高水位线,方法有很多种,如,shrink space;move tablespace;create table xxx as select * from xxx 重建表等。使用这些方法前,我们的原则是:

如果可以 truncate,直接 truncate,该操作会重置高水位线,BLOCKS 会被置为 0,NUM_ROWS 置为 0;否则,优先使用 shrink space,该方法不需要重建索引。

接着上面第 4 步,我们使用 shrink space 降低高水位线,释放空间,其中,使用 shrink space 命令前,需要先 alter table test enable row movement; 开启行移动,再次对表进行分析、查询,结果如下:

Oracle delete 操作隐藏着你可能不知道的秘密

从图中可以看出,此时 BLOCKS 已经被置为 0 了,但是,细心的你可能也发现,EMPTY_BLOCKS 已经不是初始的 13312,而是此时的 40,这说明 shrink space 不仅会释放高水位线以下的空间,也会释放申请的空间,即高水位线上下都有操作,这也是与 move、truncate 的不同,它们只能释放高水位线以下的空间。

五 shrink space 常用操作命令

Shrink space 的常用命令如下:

Oracle delete 操作隐藏着你可能不知道的秘密

六 Delete 操作的潜在影响

根据上述分析,delete 操作产生的潜在影响如下:

1. 全表扫描通常要读出直到 HWM 标记的所有属于该表的数据块,即使该表中没有任何数据;(造成查询变慢)

2. 插入操作时使用 append 关键字,即使 HWM 以下有空闲的数据库块,插入时使用 HWM 以上的数据块;(造成 HWM 自动增大)

七 总结

通过上文的现象描述和分析,随着 insert 的不断操作,高水位线也随着不断增加,尽管 delete 了数据,但高水位线并没有下降,导致表占用的空间没有释放。因此,在实际应用中,如果可能,尽量使用 truncate,而且该操作高效、快速;否则要考虑下 delete 操作遗留的影响,使用合适的方法整理空间。

正文完
星哥玩云-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-22发表,共计1899字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中

星哥玩云

星哥玩云
星哥玩云
分享互联网知识
用户数
4
文章数
19348
评论数
4
阅读量
7801458
文章搜索
热门文章
开发者必备神器:阿里云 Qoder CLI 全面解析与上手指南

开发者必备神器:阿里云 Qoder CLI 全面解析与上手指南

开发者必备神器:阿里云 Qoder CLI 全面解析与上手指南 大家好,我是星哥。之前介绍了腾讯云的 Code...
星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛 NAS-6:抖音视频同步工具,视频下载自动下载保存 前言 各位玩 NAS 的朋友好,我是星哥!...
云服务器部署服务器面板1Panel:小白轻松构建Web服务与面板加固指南

云服务器部署服务器面板1Panel:小白轻松构建Web服务与面板加固指南

云服务器部署服务器面板 1Panel:小白轻松构建 Web 服务与面板加固指南 哈喽,我是星哥,经常有人问我不...
我把用了20年的360安全卫士卸载了

我把用了20年的360安全卫士卸载了

我把用了 20 年的 360 安全卫士卸载了 是的,正如标题你看到的。 原因 偷摸安装自家的软件 莫名其妙安装...
星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛 NAS-3:安装飞牛 NAS 后的很有必要的操作 前言 如果你已经有了飞牛 NAS 系统,之前...
阿里云CDN
阿里云CDN-提高用户访问的响应速度和成功率
随机文章
星哥带你玩飞牛NAS-1:安装飞牛NAS

星哥带你玩飞牛NAS-1:安装飞牛NAS

星哥带你玩飞牛 NAS-1:安装飞牛 NAS 前言 在家庭和小型工作室场景中,NAS(Network Atta...
星哥带你玩飞牛NAS-5:飞牛NAS中的Docker功能介绍

星哥带你玩飞牛NAS-5:飞牛NAS中的Docker功能介绍

星哥带你玩飞牛 NAS-5:飞牛 NAS 中的 Docker 功能介绍 大家好,我是星哥,今天给大家带来如何在...
每天一个好玩的网站-手机博物馆-CHAZ 3D Experience

每天一个好玩的网站-手机博物馆-CHAZ 3D Experience

每天一个好玩的网站 - 手机博物馆 -CHAZ 3D Experience 一句话介绍:一个用 3D 方式重温...
我用AI做了一个1978年至2019年中国大陆企业注册的查询网站

我用AI做了一个1978年至2019年中国大陆企业注册的查询网站

我用 AI 做了一个 1978 年至 2019 年中国大陆企业注册的查询网站 最近星哥在 GitHub 上偶然...
优雅、强大、轻量开源的多服务器监控神器

优雅、强大、轻量开源的多服务器监控神器

优雅、强大、轻量开源的多服务器监控神器 在多台服务器同时运行的环境中,性能监控、状态告警、资源可视化 是运维人...

免费图片视频管理工具让灵感库告别混乱

一言一句话
-「
手气不错
星哥带你玩飞牛NAS硬件02:某鱼6张左右就可拿下5盘位的飞牛圣体NAS

星哥带你玩飞牛NAS硬件02:某鱼6张左右就可拿下5盘位的飞牛圣体NAS

星哥带你玩飞牛 NAS 硬件 02:某鱼 6 张左右就可拿下 5 盘位的飞牛圣体 NAS 前言 大家好,我是星...
多服务器管理神器 Nexterm 横空出世!NAS/Win/Linux 通吃,SSH/VNC/RDP 一站式搞定

多服务器管理神器 Nexterm 横空出世!NAS/Win/Linux 通吃,SSH/VNC/RDP 一站式搞定

多服务器管理神器 Nexterm 横空出世!NAS/Win/Linux 通吃,SSH/VNC/RDP 一站式搞...
星哥带你玩飞牛NAS-7:手把手教你免费内网穿透-Cloudflare tunnel

星哥带你玩飞牛NAS-7:手把手教你免费内网穿透-Cloudflare tunnel

星哥带你玩飞牛 NAS-7:手把手教你免费内网穿透 -Cloudflare tunnel 前言 大家好,我是星...
4盘位、4K输出、J3455、遥控,NAS硬件入门性价比之王

4盘位、4K输出、J3455、遥控,NAS硬件入门性价比之王

  4 盘位、4K 输出、J3455、遥控,NAS 硬件入门性价比之王 开篇 在 NAS 市场中,威...
星哥带你玩飞牛NAS-13:自动追番、订阅下载 + 刮削,动漫党彻底解放双手!

星哥带你玩飞牛NAS-13:自动追番、订阅下载 + 刮削,动漫党彻底解放双手!

星哥带你玩飞牛 NAS-13:自动追番、订阅下载 + 刮削,动漫党彻底解放双手! 作为动漫爱好者,你是否还在为...