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 / 问题 / 181918
Accepted
crichavin
crichavin
Asked: 2017-07-27 21:08:01 +0800 CST2017-07-27 21:08:01 +0800 CST 2017-07-27 21:08:01 +0800 CST

关于删除所有行和回收超大表空间的建议

  • 772

我不是 dba...让我们从那个开始 :) 我是应用程序开发人员。但是我们的数据库有一个存档表,它有 2.52 亿行和 170GB,我被派去修复它(实际上,这个类别中有多个表我需要清理)。但我们决定不需要保留任何此类数据。因为这个表是一个存档表,我的意思是这个数据有一个主事务表,但是应用程序有办法通过存档或移动旧记录到这个存档表来保持事务表更小。

作为存档表,它没有每个 SSMS 的依赖项(没有索引或外键)。此数据库设置为完全恢复模式。

我们的维护窗口很短,所以需要一个快速的过程,而且我们的磁盘空间有限,所以我们需要从这个表中回收磁盘空间。

我们可以截断表,那么如何回收空间呢?我们不想进行数据库收缩,因为它会收缩所有表,因此我们需要运行索引重建……至少这是我的理解,这可能是不正确的。

我可以从 SSMS 中保存一个脚本(脚本表作为 Create To...)。然后删除表,然后重新创建它......这有风险吗?它会回收空间吗?

其他想法?

sql-server-2005 maintenance
  • 1 1 个回答
  • 142 Views

1 个回答

  • Voted
  1. Best Answer
    S M
    2017-07-27T23:31:13+08:002017-07-27T23:31:13+08:00

    因为您在数据库管理方面的经验有限,所以要格外小心。您设置了数据库服务器的测试副本,对吗?

    您提到数据库使用完整恢复模式。这非常重要,因为如果事务日志没有足够频繁地备份,就没有办法收缩它们。您必须将数据库置于简单恢复模式(出于所有意图和目的摆脱事务日志)并等待该过程,然后您可以继续前进。考虑到数据量,我想这需要一段时间。有关恢复模型的信息,请访问此处:   https ://learn.microsoft.com/en-us/sql/relational-databases/backup-restore/recovery-models-sql-server本文提供了基本概述。

    要回答您的问题,截断或删除存档表不会释放空间——这就是缩小数据库的作用。truncate/drop 所做的只是将数据库中适当的页面标记为未使用。删除表并重新创建它没有什么意义。截断基本上得到相同的最终结果并且不太容易出错。 

    请记住,如果此应用程序向此存档表发送更多数据,则在您运行收缩过程后数据库将扩展!(你真的在使用 SQL Server 2005 吗?如果是这样,请认真考虑升级到受支持的版本,如果是物理服务器,则使用更新的硬件。)因此,就像应用程序将数据移动到存档表一样,你应该考虑实现一种方法从归档表中删除不需要的数据以避免将来出现这种情况。但首先是第一件事。

    如果您还没有阅读此内容,请阅读:https ://learn.microsoft.com/en-us/sql/t-sql/database-console-commands/dbcc-shrinkdatabase-transact-sql这是一个描述收缩的 Microsoft 文档一个非常详细的数据库。这是一个不错的概述,包含一些最佳实践和注意事项。

    如果你不想缩小数据库,你的另一个选择是创建一个新数据库,将你想要从旧数据库中保留的内容转移到它,然后删除旧数据库。当然,这会占用相当多的磁盘空间和时间。它还会使服务器承受相当大的负载。

    您是正确的,因为数据库收缩会增加索引碎片。话虽如此,这种碎片化可能不会对性能产生明显影响。这就是为什么你有一个测试服务器。:-)

    您可能必须为此操作调整维护窗口。它会花多少时间。在截断过程中,数据库将联机。您也可以在收缩期间保持数据库在线。根据使用情况、查询的调整方式、硬件和操作系统配置,性能可能会受到明显影响。同样,在生产中做任何事情之前进行测试!收缩可以停止并在稍后时间开始,但是,如果空间非常宝贵,则开始和停止会达不到目的。

    还有一件事:根据将数据添加到该数据库的速度,截断和收缩可能只会延迟不可避免的事情。考虑增加存储容量。

    如果您有更多详细信息或说明,我会相应地更新我的答案。与此同时,祝你好运,让我们知道事情进展如何!

    • 1

相关问题

  • SQL Server 2005 中可空列的唯一约束

  • 如何更改触发器的触发顺序?

  • 有人在实践中使用过 sqlcmd 模式吗?[关闭]

  • 如何在不安装新实例的情况下更改 MS SQL 2005 中的实例名称?

  • 从 SQL Server 2008 降级到 2005

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