当前位置: 首页 > news >正文

读书笔记:Oracle数据库的水位线秘密:为什么空表查询还很慢?

我们的文章会在微信公众号IT民工的龙马人生和博客网站( www.htz.pw )同步更新 ,欢迎关注收藏,也欢迎大家转载,但是请在文章开始地方标注文章出处,谢谢!
由于博客中有大量代码,通过页面浏览效果更佳。

本文为个人学习《Expert Oracle Database Architecture Techniques and Solutions for High Performance and Productivity(第四版本》一书过程中的笔记与理解分享,仅用于学习与交流,部分内容参考原书观点并结合>实际经验进行整理。若涉及版权问题,请联系删除或沟通处理。也请大家支持购买原版书籍。

Oracle数据库的"水位线"秘密:为什么空表查询还很慢?

一、什么是数据库的"水位线"?

想象你有一个装水的浴缸,水位线标记了浴缸曾经达到的最高水位。Oracle数据库也有类似的标记,叫做"高水位线"(High Water Mark, HWM),它记录了表曾经使用过的最大空间位置。

举个生活中的例子:假设你有一个书架:

  • 刚开始是空的,HWM在第一格
  • 你买了100本书放进去,HWM就移到第100格
  • 后来你捐掉了所有书,但HWM仍然停留在第100格
  • 即使书架现在是空的,如果有人要检查整个书架,还是会从第1格看到第100格

二、水位线如何影响数据库性能?

这个机制会导致一个有趣的现象:一个完全空的表,执行全表扫描可能和它装满数据时一样慢!

真实案例:

  1. 我们创建一个有100万行数据的表
  2. SELECT COUNT(*) 需要5秒钟
  3. 删除表中所有数据
  4. 再次SELECT COUNT(*)——还是需要约5秒钟!

这是因为Oracle会忠实地检查水位线下的所有块,即使它们现在空空如也。

高效解决方案:使用TRUNCATE TABLE命令,它就像直接把书架重置回全新状态,水位线归零。

⚠️ 重要提醒:TRUNCATE是"不可撤销"操作,不会触发删除触发器,使用前请三思!

三、Oracle的"智能水位线"技术

在新式存储管理(ASSM)中,Oracle引入了"双水位线"机制:

  1. 高水位线(HWM):曾经达到的最高存储位置
  2. 低水位线(Low HWM):保证所有块都已格式化的分界线

这就像图书馆的两种标记:

  • 高标记:曾经放过书的最高书架
  • 低标记:保证所有书都整理好的位置

查询时:

  • 低水位线以下:直接读取(已整理好的区域)
  • 高低水位线之间:需要检查目录(位图)确认是否有内容

四、预防"数据搬家"的秘诀:PCTFREE

在Oracle中,每个数据块就像一个个小容器。PCTFREE参数决定了要为未来更新预留多少空间(默认10%)。

为什么这很重要?

想象你在整理行李箱:

  • 如果预留空间太少(PCTFREE设太低),后期想放入大件物品时,就得把东西搬到另一个箱子(行迁移)
  • 如果预留太多(PCTFREE设太高),箱子利用率就低了

行迁移的危害

  1. 查询需要多走一步(先到原位置,再跳转到新位置)
  2. 占用更多内存缓存
  3. 使表结构变得更复杂

设置建议

  • 经常更新的表:设置较高PCTFREE(如30%)
  • 只增不删的日志表:设置较低PCTFREE(如5%)

五、给数据库管理员的实用建议

  1. 定期维护:对大表使用ALTER TABLE...SHRINK SPACE整理空间
  2. 批量删除:清空表时优先考虑TRUNCATE而非DELETE
  3. 监控迁移:定期检查表的行迁移情况
  4. 合理规划:根据数据增长模式设置适当的PCTFREE

记住:理解这些存储机制,就像了解图书馆的书籍整理系统,能帮助你更好地管理数据库性能!

小知识:在自动管理的表空间中,Oracle会忽略PCTUSED参数,只关注PCTFREE设置。

------------------作者介绍-----------------------
姓名:黄廷忠
现就职:Oracle中国高级服务团队
曾就职:OceanBase、云和恩墨、东方龙马等
电话、微信、QQ:18081072613
个人博客: (http://www.htz.pw)
CSDN地址: (https://blog.csdn.net/wwwhtzpw)
博客园地址: (https://www.cnblogs.com/www-htz-pw)

相关文章:

读书笔记:Oracle数据库的水位线秘密:为什么空表查询还很慢?

我们的文章会在微信公众号IT民工的龙马人生和博客网站( www.htz.pw )同步更新 ,欢迎关注收藏,也欢迎大家转载,但是请在文章开始地方标注文章出处,谢谢! 由于博客中有大量代码,通过页面浏览效果更佳。本文为个人学习《Expert Oracle Database Architecture Techniques and…...

AI测试平台自动遍历:低代码也能玩转全链路测试

在日常测试工作中,大家一定遇到过这样的情况: 功能点很多,想快速做一遍稳定性验证,却苦于用例编写耗时; 页面结构复杂,手工点来点去容易遗漏; 系统频繁迭代,每次都要重复回归,工作量翻倍。 如果能有一种方式,不用写脚本,只要提供一个入口地址或安装包,就能把系统从…...

0代码5分钟一键生成Springboot+Vue后台管理系统

0代码5分钟一键生成Springboot+Vue后台管理系统​0代码5分钟一键生成Springboot+Vue后台管理系统 1 项目概述 今天给大家介绍一款基于Spring Boot和Vue的前后端分离脚手架项目,内置高效代码生成器,可快速生成基础增删改查功能。本文将完整演示如何使用该脚手架快速构建一个商…...

nvm与node.js的安装指南

UNIX类操作系统(Linux和macOS) 安装NVM打开终端。使用curl或wget安装NVM。访问NVM的GitHub仓库页面(https://github.com/nvm-sh/nvm)以获取最新的安装脚本。例如,使用curl执行以下命令: curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.1/install.sh | bas…...

故障处理:2分钟处理Oracle RAC中OCR磁盘组丢失磁盘的故障

我们的文章会在微信公众号IT民工的龙马人生和博客网站( www.htz.pw )同步更新 ,欢迎关注收藏,也欢迎大家转载,但是请在文章开始地方标注文章出处,谢谢! 由于博客中有大量代码,通过页面浏览效果更佳。故障背景 近期,为备考 Oracle ADG (Active Data Guard) 相关认证,我与…...

Saga分布式事务框架执行逻辑

Saga分布式事务框架执行逻辑 📋 目录框架概述 核心组件架构 数据库表设计 完整执行流程 节点发现与调用机制 精简补偿策略设计 总结框架概述 这是一个基于数据库驱动的Saga分布式事务框架,专门用于解决跨服务间数据同步的一致性问题。框架采用了混合编排模式,结合了集中式任…...

在Android开发中实现两个Intent跳转及数据交换的方法

在Android开发中,两个活动(Activity)之间的Intent跳转及数据交换是一项基本而重要的功能。这通常涉及两个步骤:从一个活动发送数据,并在另一个活动中接收数据。 一、发起活动 — 发送数据 首先是初始化一个Intent对象,并使用 putExtra()方法来传递数据。以下是具体的步骤…...

ARC188 做题记

训A () 题意 题解 \(\bf{record}\) B () 题意 题解 \(\bf{record}\) C () 题意 题解 \(\bf{record}\) D () 题意 题解 \(\bf{record}\) E () 题意 题解 \(\bf{record}\)...

AT_arc145_d [ARC145D] Non Arithmetic Progression Set

在这个构造题上展示出了战犯级表现。 首先你先别想和的限制,\(x - y \ne y - z\) 就已经是一个很强的限制了,先想想这个怎么做。 在我看来一个很无厘头的想法是,将 \(3\) 进制下分配数字,如果只有 \(0/1\) 必然合法,想想就会觉得很妙,但是很无厘头。 然后如何满足和的限制…...

Microsoft AI Genius | 第三集实战课正式开启:用 Copilot Studio 定制你的专属智能体

想为团队快速定制专业级 AI 智能体,却担心增加工程负担或陷入复杂流程? 我们在前两期已解锁 GitHub Copilot Agent Mode、Azure AI Foundry Agent Service(国际版)的开发秘籍,本期将带你直达智能体定制最前线——Microsoft AI Genius 2.0系列第三集实战课来了!请锁定9月2…...

C# 多线程编程核心要点:不只是Thread和lock

聊到C#多线程,很多人第一反应就是Thread和lock。没错,它们是基石,但如果你只停留在它们,那就像只会用菜刀切菜,永远做不出满汉全席。现代C#多线程的核心思想是 “高效地利用计算资源,并安全地处理并发”。下面我跟你捋几个最核心的点,保证接地气。1. 为什么要用多线程?…...

基于MATLAB的图像融合拼接GUI系统设计

一、GUI架构设计(基于App Designer) % 创建GUI组件 fig = uifigure(Name,图像融合拼接系统,Position,[100,100,800,600]);% 控件布局 btnLoad = uibutton(fig,Text,加载图像,Position,[20,500,100,30],...ButtonPushedFcn,@(btn,event) loadImageCallback());btnPreprocess =…...

Python使用多线程和异步调用

概述 在 Python 中,多线程和异步调用是处理并发任务的两种常用方式,适用于不同场景。 多线程(threading 模块) 多线程适合处理 I/O 密集型任务(如网络请求、文件读写),因为这类任务大部分时间在等待,线程可以在等待时切换到其他任务。 import threading import timedef…...

研究生学术英语读写教程(中国科学院大学出版) Unit10 TextA 原文以及翻译(仅供学习)

本文全程使用kimi助手识别原书文字并翻译,无人工校准,没有参考任何其他翻译文章,仅供学习使用,如有侵权请联系我,会及时删除。 The Doctors Dilemma: Is It Ever Good to Do Harm? 原文1 Medical knowledge changes swiftly, and technological changes make new and exp…...

基于Python+Vue开发的蛋糕商城管理系统源码+运行步骤

项目简介该项目是基于Python+Vue开发的蛋糕商城管理系统(前后端分离),这是一项为大学生课程设计作业而开发的项目。该系统旨在帮助大学生学习并掌握Python编程技能,同时锻炼他们的项目设计与开发能力。通过学习基于Python的蛋糕商城管理系统项目,大学生可以在实践中学习和…...

某运营商智慧协同平台——构建高效、敏捷的运营管理新模式

项目背景 在某运营商数字化运营战略的指引下,我司携手该运营商,共同打造智慧协同运营平台。该平台旨在实现省市协作,赋能一线,通过引入君南信息的技术和服务支持,提升业务支撑效率、加强系统安全防护、增强平台功能与服务,以满足全省21个地市独立配置、维护和管理数据展示…...

go使用反射获取http.Request参数到结构体 - 实践

go使用反射获取http.Request参数到结构体 - 实践pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", monospace …...

基于MATLAB/Simulink的TI2000系列DSP模型设计

一、开发环境配置工具安装安装MATLAB R2023a + Simulink 安装TI C2000 Support Package(通过Add-On Explorer) 安装Code Composer Studio (CCS) v7.5+硬件连接将TI2000系列DSP开发板(如C28069)通过USB连接至PC 在CCS中完成设备驱动配置二、模型设计流程 1. 创建Simulink模型…...

nginx 常用参数

...

Python常见函数和代码示例

内置函数 print() - 输出信息到控制台 name = "Alice" age = 30 print("姓名:", name, "年龄:", age) # 输出多个值 print(f"姓名: {name}, 年龄: {age}") # 使用f-string格式化输出 print("姓名: {}, 年龄: {}".format(na…...

69-SQLite应用 - 详解

69-SQLite应用 - 详解pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", monospace !important; font-size: 14…...

mysql 源码下载,从获取到安装的完整指南

你是否曾想过亲手剖析MySQL这个影响了整个互联网时代的数据库?本文将带你一步步获取MySQL源码,让你不仅能安装使用,更能深入探索其内部机制。 MySQL作为最流行的开源关系型数据库之一,其发展历程堪称传奇。从最初的免费开源到被Oracle收购,MySQL始终保持着强大的生命力。它…...

docker中centos7配置

拉取centos7镜像: docker pull centos:7 启动容器: docker run -d -it --privileged --name=test centos:7 /usr/sbin/init 进入容器: docker exec -it test /bin/sh centos7安装: #设置时区 timedatectl set-timezone Asia/Shanghai #安装crontab服务 yum install -y rsy…...

centos7虚拟机下系统环境配置

​1. 网络配置 网卡: nmcli d 网络查看: ip addr 网络配置文件: /etc/sysconfig/network-scripts/ifcfg-enoXXX BOOTPROTO=static;IPADDR=;GATEWAY=;NETMASK=255.255.255.0;ONBOOT=yes 重启网络服务: systemctl restart network.service 或:service network restart 配置D…...

CefSharp高版本问题

​最近做一个PC端功能,打算用CefSharp+vue3来做,但在设置cookie时,出现了怎么也设置不上的问题。以前用CefSharp+vue2做过PC端,思路是差不多的。开始觉得是vue3哪里的设置问题,没找到,那就将cookie打印出来,打印出来是空的。那么问题就出在CefSharp上了,由于安装新的Ce…...

前缀和pre,如何求总和:pre(r) - pre(l)(1 = l = r = n),以及|pre(r) - pre(l)|

前缀和pre,如何求总和:pre(r) - pre(l)(1 <= l <= r <= n),以及|pre(r) - pre(l)|我们假设 pre[i]: 数组前i个数的之和,这就是前缀和 计算所有下标对 (1 <= l <= r <= n) pre[r] - pre[l] 之和 如果数据量是 n <= 1e5,直接两个for循环暴力求解的话,时…...

P11537 [NOISG 2023 Finals] Toxic Gene 题解

先考虑如果所有的 T 已被排除,剩下的位置怎么判断是 R 还是 S。 注意到每种细菌可以在样本中放入任意多个,容易想到经典的套路:将 \(8\) 个位置一起处理,第 \(i\) 个在样本中出现 \(2^{i-1}\) 次,再加入一个 T。若结果 \(\land 2^{i-1}=2^{i-1}\),则第 \(i\) 个对应的位置…...

keil5中stm32相关记录

在Keil 5中如何建立一个STM32项目_keil cmsis-CSDN博客 keil中怎么使用中文语言_keil怎么设置中文-CSDN博客 STM32入门开发-详解GPIO口的配置与控制方式(以LED灯为例) - 知乎...

centos7中mysql环境配置

​mysql源: rpm -ivh http://repo.mysql.com/mysql-community-release-el7-5.noarch.rpm yum install mysql-server mysql-client libmysqlclient-dev mysql-devel MySQL-python远程连接: GRANT ALL PRIVILEGES ON *.* TO root@% IDENTIFIED BY 123456 ; flush privileges; 记…...

centos7中php环境配置

​php7源: rpm -Uvh https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm rpm -Uvh https://mirror.webtatic.com/yum/el7/webtatic-release.rpm yum -y install php72w php72w-cli php72w-fpm php72w-common php72w-devel php72w-embedded php72w-gd ph…...

Symfony学习笔记 - 利用Doctrine开发一个学生信息的增删查改

现在在学习Symfony,Doctrine作为官方重点推荐的数库库Bundle,必须要试试! 1、创建Symfony的Demo的Web应用 symfony new symfony_webapp --webapp 正确安装后,目录应该是这样的:如果你的目录仅仅只有config和vendor目录,那就表明你没有安装完整。原因是symfony时,需要从h…...

如何在Nginx服务器配置https以及强制跳转https

...

centos7中安装protobuf-c

​前言 设备服务与设备端通讯,设备服务使用Go构建,使用protobuf格式与设备端通讯,设备端采用stm32系列mcu,使用C语言开发,所以要生成protobuf C语言版协议库。步骤1.准备 yum -y install autoconf automake libtool yum -y install gcc gcc-c++2.安装protobuf protobuf版本…...

赞助NYU-Poly女性网络安全研讨会:推动行业多元发展

本文介绍Trail of Bits公司赞助纽约大学理工学院女性网络安全研讨会的举措,包括活动目标、技术工作坊内容、职业发展指导以及往期参与记录,旨在促进网络安全领域的性别多元化。我们正在赞助NYU-Poly女性网络安全研讨会 Dan Guido 2014年9月29日 会议, 教育, 赞助 网络安全是一…...

MyEMS:开源能源管理的探索与实践

在当今社会,能源的有效管理与优化利用已成为企业、公共机构乃至全社会关注的核心议题。随着物联网(IoT)和大数据技术的成熟,相应的软件工具应运而生,旨在为解决能源挑战提供技术方案。MyEMS便是这一领域中的一个代表性开源项目。 什么是MyEMS? MyEMS是一个专为能源管理设…...

实时内核中的调度程序节流

实时内核包含一个保护机制,它允许分配供实时任务使用的带宽。保护机制被称为实时调度程序节流。 实时节流机制的默认值定义实时任务可以使用 95% 的 CPU 时间。其余的 5% 将被视为非实时任务,例如在 SCHED_OTHER 和类似调度策略下运行的任务。务必要注意,如果单个实时任务占…...

配置Burp Suite与Proxifier抓取微信小程序流量

微信小程序抓包教程:Burp Suite + Proxifier 配置指南 .container { max-width: 800px; margin: 0 auto; padding: 24px 40px; background-color: rgba(255, 255, 255, 1); box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1); border-radius: 8px } .chart-container { position: rel…...

我的ai 相关工具站

在AI技术席卷日常生活的今天,美容与时尚领域也迎来了革新。如果你正在犹豫是否换发型、尝试新发色,或想看看不同年龄或面部效果的自己,RightHair.ai就是你的理想选择。这款完全免费的在线AI工具不仅能让你上传照片试穿200+种发型和发色,还提供AI年龄滤镜、微笑滤镜、瘦脸滤…...

C#第十一章 023 024

类 是一种数据结构析构器的声明 和构造器类似 ~Student(){}这样静态构造器是给静态属性的在类里面的类可以说是成员类或者嵌套类...

MyEMS:赋能每一个组织,成为自己的能源管理专家

能源管理曾是一件“昂贵”的事情。它意味着动辄七位数的软件许可费、依赖外部专家的深度定制,以及被特定供应商“锁定”的长期合约。这无形中为众多企业,特别是中小型企业和机构,筑起了一道难以逾越的高墙。 然而,数字时代的真正精神是“赋能”与“ democratization”(民主…...

Vue开发微信公众号上传图片

​处理思路:从服务器获取微信配置参数,进行微信配置 选择本地图片,获取图片base64输出 将base64图片转化为文件上传 关键代码: 1.获取配置与选择本地图片输出import http from ./http import api from ./api import wx from "weixin-js-sdk"; export default {g…...

centos7中scrapy运行环境配置

最近根据需要,使用scrapy开发了一个爬虫应用,直接使用的python2,记录一下部署环境。 1.安装epel扩展源 yum -y install epel-release 2.安装pip yum -y install python-pip3.安装scrapy pip install scrapy 阿里云镜像:pip install scrapy -i http://mirrors.aliyun.com/py…...

flutter配置国内镜像

git clone -b master https://mirrors.tuna.tsinghua.edu.cn/git/flutter-sdk.git设定方式如下: export FLUTTER_STORAGE_BASE_URL="https://mirrors.tuna.tsinghua.edu.cn/flutter" export PUB_HOSTED_URL="https://mirrors.tuna.tsinghua.edu.cn/dart-pub&qu…...

微信小程序 live-player 无声音

由于微信公众号在播放直播视频,方案上视频存在严重的延时,而小程序有live-player,可以做为低延时解决方案,所以准备改用小程序重写原来功能。问题描述: 1.微信小程序使用live-player控件播放基于腾讯lvb平台直播服务直播,视频由本地客户端,拉取摄像头视频向直播平台推流…...

栈的妙用:如何优雅地处理括号匹配难题 (C语言版)

栈的妙用:如何优雅地处理括号匹配难题 (C语言版)pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", monospace…...

食品包装 AI 视觉检测技术:原理、优势与数据应用解析

一、食品行业包装质检的核心技术痛点 在食品行业现代化生产体系中,包装质检作为保障食品安全与品质的关键环节,面临多维度技术挑战,具体体现在以下方面: 1、检测效率与产线速度不匹配 现代化食品生产线(如饮料灌装线、零食包装线)已实现高速运转,部分产线每分钟可完成数…...

电流探头的常见应用场景

电流探头是一种用于测量电流的传感器,广泛应用于电子、电力、通信等多个领域,其常见测试场景主要包括以下几类: 一、电子设备研发与调试 在电子设备的设计、研发和故障排查阶段,电流探头是关键工具,主要用于: 电路工作电流监测:测量各类电子电路(如主板、模块、芯片)的…...

WebRTC编码过载检测与帧率适应机制分析报告

WebRTC编码过载检测与帧率适应机制分析报告 1. 概述 本报告基于WebRTC源码分析,详细阐述了编码过载检测机制及其触发的帧率降级算法。分析范围涵盖从编码时间测量到最终帧率调整的完整调用链。 2. 编码使用率计算机制 2.1 基本计算公式 位置: android/cmake/src/video/adaptat…...

PC桌面应用开发选择

要使用Web方式,基本有3种方案可供选择: cef electron nwjs 1.cef情况下,.NET可以很好的支持,是个不错的方案 2.electron、nwjs主要在nodejs环境下开发,也是个不错选择 最后采用cef做壳,浏览器方式,Vue做页面形式开发。写于 2020-08-12...

陈燕的项目启动笔记

现在已经把项目起来了。 启动过程如下:1. 拉代码这里的前端的代码是缺少的,需要跟人要一下 2. 后端的mysql创建CREATE DATABASE IF NOT EXISTS lth_test CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; 3. sql也有一些问题,把错误的sql都删除 4. mysql -u root -p 1234…...