AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / dba / 问题 / 257512
Accepted
sachin-SQLServernewbiee
sachin-SQLServernewbiee
Asked: 2020-01-16 23:00:06 +0800 CST2020-01-16 23:00:06 +0800 CST 2020-01-16 23:00:06 +0800 CST

有没有最快的方法来缩小 SQL Server 中的 LOB 数据

  • 772

我们有一个总大小为 3886 GB 的数据库。其中 778 GB 是免费的。因此,总共存在 3108 GB 的数据。

其中 2458 GB 是“LOB 数据”,400 GB 是“常规”。

由于数据库托管在 AWS 上,因此为了节省成本,我们正在尝试缩小数据文件以释放空间。儿子为了容纳数据,我们已经有两个 2 TB 的驱动器,而且都快满了,我的经理不想创建另一个驱动器并将新文件放在那里。

但是,当我们尝试一次缩小 2 GB 时,会花费很多时间(看到 dbcc lobcompact 在 sp_who2 中运行),而且我们有时也会看到阻塞。谷歌搜索后,我在下面看到 Paul S. Randal 的博客文章,他还指出 LOB 数据使收缩变慢。

https://www.sqlskills.com/blogs/paul/why-lob-data-makes-shrink-run-slooooowly-t-sql-tuesday-006/

我担心的是:

在这种情况下,有什么办法可以让收缩更快,或者根本没有办法?
当涉及到云时,其他人在这种情况下正在做什么,他们想通过减少存储大小来节省一些成本?
我的理解是正确的,即缩小文件可以以某种方式节省组织成本,还是我在浪费时间并使事情变得更糟?如果是,那我该如何说服他?

sql-server shrink
  • 1 1 个回答
  • 1144 Views

1 个回答

  • Voted
  1. Best Answer
    AMtwo
    2020-01-27T17:33:22+08:002020-01-27T17:33:22+08:00

    收缩数据库并不快。事实上,它往往非常慢,除了减少要压缩的数据之外,您无法加快速度。

    收缩是如何工作的?

    收缩数据文件时,SQL Server 会从文件末尾取出 8k 页,并将它们移动到文件开头的(随机)位置。它一次将页面移动一页。在某种程度上,数据的逐页移动类似于 a 的REORGANIZE工作方式,只是相反。由于页面是单独移动到(随机)新位置的,因此它将通过使先前连续的页面不连续来“打乱”页面,从而产生碎片。

    逐页移动本质上是缓慢的,这就是为什么REBUILD高度碎片化的索引比REORGANIZE它们更快的原因。

    REBUILD反而

    通常,我建议您只REBUILD进入一个新文件组,然后删除或缩小旧(空)文件组。进入REBUILD新文件组将比缩小更快,因为REBUILD如果更快REORGANIZE(并且“向后REORGANIZE”又名缩小)。然后,在旧文件组为空的情况下,当它为空或几乎为空时,它将快速删除或缩小,因为没有/很少的页面要删除。

    而且因为收缩会产生碎片,所以无论如何你都需要REORGANIZE在收缩之后做一个。

    LOBing 一个曲线球

    在您的方案中,LOB 数据代表 3108GB 总数据中的 2458GB (80%)。当您执行 aREBUILD时,它会移动 B-Tree 页面,但不会移动 LOB 数据。所以如果你重建一个新的文件组,你的旧文件组仍然是 60+% 满的。

    对于具有大量 LOB 数据的表,您需要采用不同的方法。您可以在新文件组中创建一个新表,将数据迁移到该新表,然后交换表名并删除旧表。您可以将此过程视为“手动重建”——除非这样做会允许您将 LOB 数据复制到新文件组。我在一篇关于更改数据类型的博客文章中描述了这种方法,但在这种情况下,完全相同的方法也可以使用——除非您将更改文件组,而不是更改数据类型。

    缩小(几乎)空文件组很快

    收缩很慢,因为它必须移动分配的页面才能在数据文件的末尾创建连续的可用空间。如果文件组为空,则可以在不移动页面的情况下截断文件末尾,并且会非常快。

    如果您要缩小的文件组是,PRIMARY那么您将无法将其完全清空——PRIMARY包含所有系统表和元数据。通过将所有用户表移出PRIMARY,文件组将几乎是空的,并且需要移动的页面数量非常少。只需移动几页也将非常快,特别是与移动 2TB 的页面相比。

    • 1

相关问题

  • SQL Server - 使用聚集索引时如何存储数据页

  • 我需要为每种类型的查询使用单独的索引,还是一个多列索引可以工作?

  • 什么时候应该使用唯一约束而不是唯一索引?

  • 死锁的主要原因是什么,可以预防吗?

  • 如何确定是否需要或需要索引

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目

    • 12 个回答
  • Marko Smith

    如何让sqlplus的输出出现在一行中?

    • 3 个回答
  • Marko Smith

    选择具有最大日期或最晚日期的日期

    • 3 个回答
  • Marko Smith

    如何列出 PostgreSQL 中的所有模式?

    • 4 个回答
  • Marko Smith

    列出指定表的所有列

    • 5 个回答
  • Marko Smith

    如何在不修改我自己的 tnsnames.ora 的情况下使用 sqlplus 连接到位于另一台主机上的 Oracle 数据库

    • 4 个回答
  • Marko Smith

    你如何mysqldump特定的表?

    • 4 个回答
  • Marko Smith

    使用 psql 列出数据库权限

    • 10 个回答
  • Marko Smith

    如何从 PostgreSQL 中的选择查询中将值插入表中?

    • 4 个回答
  • Marko Smith

    如何使用 psql 列出所有数据库和表?

    • 7 个回答
  • Martin Hope
    Jin 连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目 2014-12-02 02:54:58 +0800 CST
  • Martin Hope
    Stéphane 如何列出 PostgreSQL 中的所有模式? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh 为什么事务日志不断增长或空间不足? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland 列出指定表的所有列 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney MySQL 能否合理地对数十亿行执行查询? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx 如何监控大型 .sql 文件的导入进度? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison 你如何mysqldump特定的表? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 对 SQL 查询进行计时? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas 如何从 PostgreSQL 中的选择查询中将值插入表中? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 列出所有数据库和表? 2011-02-18 00:45:49 +0800 CST

热门标签

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve