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 / 问题 / 72313
Accepted
A-K
A-K
Asked: 2014-07-25 12:38:16 +0800 CST2014-07-25 12:38:16 +0800 CST 2014-07-25 12:38:16 +0800 CST

我应该缩小我的数据库吗?

  • 772

我有一个 1.2Tb SQL Server 2008 R2 数据库,其中 50% 以上是空的,因为我将很多功能迁移到 PostgreSql。该数据库仍在使用中,并且仍在增长,但我认为在未来 3-5 年内它不会增长到使用全部 1.2Tb。

按照目前的增长速度,我们不会在 14 年多的时间里用完 1.2Tb。更重要的是,每当我们需要进行重大更改时,我们都会将功能迁移到 PostgreSql。在一个非常动态的敏捷环境中,这意味着我们经常将数据迁移出这个 SQL Server 数据库。因此,该数据库在未来的增长速度可能会更慢:它最终会被逐步淘汰。

因此,我们宁愿将这个未使用的空白空间用于其他数据库等 - 可能永远不需要它来增长表/索引。

我记得曾经的经验法则是“永远不要缩小数据库”。它适用于这种情况吗?目前服务器运行的是 2008 R2 EE,但我们计划很快升级到 2012。我认为因为存在这种收缩功能,所以应该有有效的用例可以进行收缩。否则为什么它存在呢?

我们可以承受周末几个小时的停机时间。

编辑:我们正在解决的问题就像我上面所说的:“我们宁愿将这个未使用的空白空间用于其他数据库”。此外,我们更喜欢不需要花费太多时间来学习我们正在迁移的技术的解决方案。

sql-server-2008-r2 sql-server-2012
  • 3 3 个回答
  • 2345 Views

3 个回答

  • Voted
  1. Best Answer
    Kin Shah
    2014-07-25T13:08:35+08:002014-07-25T13:08:35+08:00

    我记得曾经的经验法则是“永远不要缩小数据库”。它适用于这种情况吗?

    是的。不要触摸那个收缩按钮——这是一条通用规则,也是许多著名 SQL Server 大师——Paul Randal、Brent Ozar、Mike Walsh、Gail Shaw等人提出的非常合理的建议。

    该数据库仍在使用中,并且仍在增长,但我认为在未来 3-5 年内它不会增长到使用全部 1.2Tb。

    您必须 1000% 确定您的假设,即它会在您提议的 3-5 年内增长但不会增长到这个规模(它也有 2 年的差异 :-))。

    still somewhat growing--> 你真的需要了解它的增长速度。您是否通过收集整个业务周期内的数据增长来进行数据库增长跟踪?

    如今,数据是企业维持业务的关键,而数据库则意味着增长。

    想一想——您打算如何处理从缩小数据库中获得的磁盘空间?

    正如@AaronBertrand 建议的那样,专注于更重要的优化领域。

    即使你决定缩水,我也建议你

    • 在讨厌的收缩操作之后进行重组/重建并更新统计信息
    • 进行完整备份以确保所有索引都完好无损。
    • 调整您的自动增长设置,以不允许自动增长事件更频繁地启动。

    编辑

    在OP的评论之后---

    然后去做吧……因为您正在或将要从 SQL Server 转移数据到 PostgreSql。但是,正如我在回答中提到的那样,执行一次发布步骤 - 一旦您执行了收缩操作。此外,使用DBCC SHRINKFILE 可以更好地控制要缩小的内容,而不是DBCC SHRINKDATABASE.

    • 3
  2. usr
    2014-07-25T13:47:27+08:002014-07-25T13:47:27+08:00

    规则是永远不要收缩。规则是当你需要再次增长时不要缩小。

    继续收缩以回收空间。处理由此产生的碎片。请注意,收缩会导致极端的磁盘负载。这些几乎是收缩导致的唯一问题。

    或者,将所有索引重建为一个新的文件组并删除/截断旧的。这可能会快得多,并且会在此过程中对所有索引进行碎片整理/压缩。请注意,在文件组之间移动 blob 数据要困难得多,因此这可能不适用于所有索引/表。只是一个想法。

    • 2
  3. Shanky
    2014-07-25T14:26:47+08:002014-07-25T14:26:47+08:00

    通过管理工作室收缩时收缩操作的一件重要事情是选项“释放未使用的空间”它的作用是

    ''导致文件中任何未使用的空间被释放给操作系统并将文件收缩到最后分配的范围,在不移动任何数据的情况下减小文件大小。不会尝试将行重新定位到未分配的页面。''

    您应该尝试这个选项,因为没有页面移动的碎片机会非常少,如果数据库中有可用空间,则可以使用此选项。

    知道收缩的缺点是件好事 我相信 Paul、Brent 和 Gail 的建议更多地是在教育用户了解收缩的缺点而不是阻止它们。如果你想回收空间,你必须在某个时候缩小,而缩小会导致碎片,所以你必须处理它。它不像没有人使用数据库收缩人们确实使用但不推荐在公共论坛上,因为他们不知道他们的周围环境和它会产生的影响。

    我会说,如果您了解有关数据库的增长并知道在未来一年将不会使用空间,请谨慎收缩它可能是小块检查选项,我指出它是否有效

    • 1

相关问题

  • 代理执行的维护计划

  • 为什么 Denali 序列应该比标识列表现更好?

  • SQL Server 不应该支持范围吗?

  • 随机化表内容并将它们存储回表中

  • 什么是 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