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 / 问题 / 286047
Accepted
Newbie-DBA
Newbie-DBA
Asked: 2021-02-26 12:36:33 +0800 CST2021-02-26 12:36:33 +0800 CST 2021-02-26 12:36:33 +0800 CST

迁移前缩小数据文件以节省磁盘空间

  • 772

我知道这是在各种论坛上讨论最多的答案:我完全理解在大多数情况下答案是否定的。

但是想知道在任何情况下它是否都是好方法:

假设当前的产品数据库在我们的例子中超过 30 TB,并且数据保留了 1 年。表大多是压缩和分区的。

开发团队提出了他们不需要数据来保持长达一年的逻辑,并希望将保留期更改为 6 个月。因此,预计清除后数据将减少一半,并且只有 6 个月的数据。

这是我们被要求缩小数据文件的地方,以便可以返回那些具有 TB 空间的 LUN,或者如果我们迁移到新的 sql 版本,我们会要求让我们说少一些(大约 10)TB,这样可以节省一些钱,假设我们为未来的数据库增长保留了 5Tb 的额外空间。

在这种情况下,如果我们假设在低峰值时间阻塞可以被接受或者如果收缩运行更长的时间可以被取消,那么我们在小块中进行收缩会有所帮助吗?

上述收缩数据文件活动的价值是多少,还是有更好的方法?

编辑 --> 我们正在迁移到最新版本,可能是 SQL 2017 或 SQL2K19。这些表不是基于文件组进行分区的,因为对于这个数据库,所有 30 多个文件都在主数据库上。我知道,它只是一个供应商数据库设计,我手里没有太多东西。

sql-server sql-server-2012
  • 3 3 个回答
  • 108 Views

3 个回答

  • Voted
  1. Shamvil Kazmi
    2021-02-26T13:02:29+08:002021-02-26T13:02:29+08:00

    您可以在此处阅读相关信息 - https://www.brentozar.com/archive/2017/12/whats-bad-shrinking-databases-dbcc-shrinkdatabase/

    关于什么时候必须缩小,你可以在这里做什么 - https://www.brentozar.com/archive/2020/07/what-if-you-really-do-need-to-shrink-a-database/

    当我们缩小数据库时,它会引入外部和内部碎片,它会导致阻塞,它会在运行时导致事务日志增长。索引碎片变高。当我们重建索引时,数据库大小会恢复。因此造成了无限循环的收缩重建。

    假设您有适当的停机时间,并且如果我必须缩小以移动数据库,我将编写所有索引并删除它们。多次运行检查点,进行日志备份,收缩日志文件然后收缩数据库,进行完整备份并将此备份恢复到新位置。运行索引脚本以​​再次创建它们并让它在新服务器中增长。注意:在 30TB 上创建索引会很痛苦。

    可能有更好的方法来做到这一点,我很乐意关注其他答案。

    • 3
  2. Best Answer
    Tibor Karaszi
    2021-02-27T00:22:56+08:002021-02-27T00:22:56+08:00

    这是一个非常庞大的数据库,需要缩小。在开始收缩操作之前,我只想指出您要检查的两件事:

    LOB 数据。这将永远持续下去,因为 LOB 数据没有反向指针。即,一个LOB 页面被移动并且所有SQL Server 都知道它属于哪个表。它必须进行表扫描才能找到该行,该行对应于该页面上的每个 lob 值。

    堆表。对于移动的每个页面,SQL Server 必须修改该页面上每一行的每个 nc 索引。与聚簇表相比,缩小堆表所需的时间很容易延长 5-10 倍。

    对于该大小,您可能要考虑的一个选项是在收缩之前将数据移动到其他位置(文件组)(或者如果该文件组现在为空,则可能只是删除该文件组)。

    • 2
  3. Stephen Morris - Mo64
    2021-02-27T00:09:08+08:002021-02-27T00:09:08+08:00

    一种可能性是使用事务复制并添加静态行过滤器来过滤掉旧数据,这也将具有缩短新服务器时间的优势(我假设您正在进行并行迁移不是就地升级)。

    • 0

相关问题

  • 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