为什么我的 postgres 表在更新后变得更大?

2024-02-16

我有一个表,聚集在两列上(销售点和产品 ID)。唯一的索引位于这两列中,并且表聚集在这些列上。

我每周都会更新表中的其他列。当我这样做时,表和关系的大小增加了大约 5 倍。然后,我对表进行聚类,大小恢复到更新前的大小。

这对我来说似乎很奇怪。如果我要更新索引列,我预计需要通过清理来处理一些膨胀,但由于索引列没有被任何更新修改,我不明白为什么更新表会导致以增加尺寸。

这是否按预期工作,或者这是否表明我的配置存在问题?有办法阻止这种情况吗?

[Windows 7 上的 Postgres 9.1]


即使没有索引列,PostgreSQL 仍然需要做MVCC http://www.postgresql.org/docs/current/static/mvcc-intro.html更新写入新行的位置,然后清理并丢弃旧行。否则,如果中途出现错误或崩溃,它无法回滚事务。 (PostgreSQL 没有撤消日志,它使用堆来代替)。

热门更新 http://pgsql.tapoueh.org/site/html/misc/hot.html仅当页面中有足够的可用空间以避免必须将新行写入不同的页面(然后必须创建新的索引条目)时才能完成。因此,即使您没有更新索引列,PostgreSQL 仍然必须将新行写入表末尾的新页,因为当前页上没有地方可以放置新行版本。

我通常只期望空间加倍,但如果您正在进行一系列更新,而中间没有真空赶上,那么预计会增加更多。尝试一次性完成所有更新或VACUUM通行证之间。

为了使更新速度更快,需要消耗一些磁盘空间,ALTER TABLE设置非 100FILLFACTOR在你面前的桌子上CLUSTER它。我建议45,每行有足够的空间容纳一个新版本,再加上一点摆动空间。这将使表的大小增加两倍,但会减少所有重写的干扰。它会让热更新发生并加速更新,因为不需要一直扩展关系。

最重要的是 - 尝试找到一种方法来避免定期批量更新整个表。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么我的 postgres 表在更新后变得更大? 的相关文章

随机推荐

  • Angular2中如何将值从一个组件传递到另一个组件?

    我正在尝试将值从 Angular2 中的一个组件传递到另一个组件 例如 我正在尝试实现一个组件并在该组件中设置数据和标题 然后将该数据和标题传递给嵌入其中的另一个组件 这是更好解释的代码
  • 施特拉森的矩阵乘法在哪里有用?

    Strassen 的矩阵乘法算法仅比传统算法略有改进O N 3 算法 它具有更高的常数因子并且更难以实现 鉴于这些缺点 strassens 算法实际上有用吗 它是否在任何矩阵乘法库中实现 此外 矩阵乘法在库中是如何实现的 一般来说 施特拉森
  • 重试 MySQL / SQLAlchemy 的死锁

    我已经搜索了很长一段时间 但找不到解决我的问题的方法 我们在项目中将 SQLAlchemy 与 MySQL 结合使用 并且多次遇到可怕的错误 1213 尝试获取锁定时发现死锁 尝试重新启动事务 在这种情况下 我们最多尝试重新启动交易三次 我
  • Selenium - 使用透明代理的 MoveToElement()

    我有元素 public ArticlePage PageFactory InitElements Browser driver this FindsBy How How Id Using someId private IWebElement
  • 命令行无法识别 Node-sass

    我正在尝试设置node sass 遵循CSS Tricks 说明 https css tricks com why npm scripts Node 和 npm 已正确安装 node sass 安装也正常 当我去跑步时node sass o
  • 如何设置对 Azure 应用服务的 FTP 访问?

    我使用 Visual Studio 将我的网站 发布 到 Azure 看起来工作正常 现在我希望能够将文件通过 FTP 传输到此应用程序服务 但是 如何在此应用服务中设置 FTP 凭据 以便可以通过 FTP 进行身份验证 我本来希望在 部署
  • 创建新的 AVD-CPU/ABI 字段显示“未安装系统映像”

    我正在创建一个新的 AVD 我用 ARM CPU 镜像创建了一个 但大约 45 分钟后仍无法启动 所以我删除了它并下载了 Intel x86 Atom 映像 创建 AVD 时 选择 CPU 的字段变为非活动状态 并显示 未为此目标安装系统映
  • Powershell StreamReader - 如何等待新文件可读

    我的脚本通常假设存在一个 txt 文件 其中包含有助于其更好运行的设置 但是 如果该脚本不存在 它会创建一个本地文件来保存这些设置 我意识到这没有逻辑need然后阅读此文件 但我想了解为什么我不能 void System IO File C
  • 使用 Polymer 和 app-route 每次点击时重新加载页面

    我正在使用 app route 和iron pages 以及纸质工具栏来显示我的视图 就我的一个观点来说 main view 显示随机选择的图像 该图像每次加载页面时都会发生变化 每次main view从工具栏中选择后 页面应重新加载 以便
  • 粘性元素不与同级元素一起向上滚动?

    这是我之前问题的延伸 如何使元素具有粘性但可与同级元素一起滚动到其完整 可变 高度 https stackoverflow com questions 75469958 how to make an element sticky but s
  • 为什么 HTTPS 请求会产生 SSL CERTIFICATE_VERIFY_FAILED 错误?

    这是我的Python代码 import requests requests get https google com 这是错误 requests exceptions SSLError HTTPSConnectionPool host go
  • XCTest 的 @testable 幕后发生了什么?

    我知道 testable import MyModule 提供探索非公开成员的能力MyModule来自 test 使用 testTarget 构建 模块MyModuleTests 我的 非测试 模块需要相同的功能 不在生产中 仅在调试模式下
  • TF 错误:没有剩余的更改需要签入

    我们有一个 NAnt 脚本来更新 TFS 中的 预构建 程序集 作为我们的 TeamCity 构建项目之一 该构建由其他构建触发 它执行 TF 签出 移动一些文件 然后执行 TF 签入 相关目标 tf解析为TF exe的路径
  • 识别任意日期字符串[关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我需要能够识别日期字符串 如果我无法区分月份和日期 例如 12 12 10 也没关系 我只需将字符串分
  • 从命令行、Linux 中使用函数执行 python 脚本

    我有一个名为convertImage py的python文件 在文件中我有一个脚本可以根据我的喜好转换图像 整个转换脚本设置在一个名为convertFile fileName 的函数内 现在我的问题是我需要从linux命令行执行这个pyth
  • python - django:为什么我收到此错误:AttributeError:'method_descriptor'对象没有属性'today'?

    我有以下 python 代码 from django db import models from datetime import datetime class Poll models Model question models CharFi
  • ASP.NET 随机丢失会话值

    我已经为此寻找答案很长一段时间了 因为它继续困扰着我 我们在会话状态 InProc 中存储用户登录信息和有关用户当前活动的其他数据 我经常在尝试使用会话变量之一时遇到空引用异常 它发生在随机页面上 具有随机会话变量 我修改了 web con
  • 单个页面上有多个 FullCalendars

    我想在同一页面上添加多个 FullCalendars 可选 用于安排不同类型的事件并将信息保存在数据库中 但查看演示 示例代码 似乎我只能在每页添加单个日历 因为它是由 div div 您能否告诉我是否有办法实现此目的 以便当用户在同一页面
  • rvest::html_text 和 RSelenium::getPageSource 有什么区别?

    我正在抓取一些网页 我注意到 rvest read html 然后 html text 提供的结果与 RSelenium getPageSource 提供的结果不同 更具体地说 当涉及下拉菜单时 使用 html text 只会提供选项的名称
  • 为什么我的 postgres 表在更新后变得更大?

    我有一个表 聚集在两列上 销售点和产品 ID 唯一的索引位于这两列中 并且表聚集在这些列上 我每周都会更新表中的其他列 当我这样做时 表和关系的大小增加了大约 5 倍 然后 我对表进行聚类 大小恢复到更新前的大小 这对我来说似乎很奇怪 如果