详情页标题前

阿里云RDS数据库RDS for SQL Server如何回收表空间-云淘科技

详情页1

问题描述

RDS SQL Server在删除变长列或者减小变长列的长度后,表的大小不会自动减小。其中变长列包括的字段类型有varcharnvarcharvarchar(max)nvarchar(max)varbinarytextntextimagesql_variantvarbinary(max)xml

问题原因

因为空间是不会自动回收的,每个记录都占了一个位置。即使删除了数据,位置也会空在那里,下次插入记录的时候,会优先选这些空的槽位。

解决方法

您可以考虑定时重建聚集索引。另外,即使收缩了表的空间,数据库的数据文件大小也不会变小。如果需要收缩一个SQL Server的数据文件,必须使用DBCC SHRINKDATABASE命令收缩指定数据库的指定数据或日志文件大小,或者使用DBCC SHRINKFILE命令收缩当前数据库的指定数据或日志文件大小。MySQL表的空间是独立的一个文件,所以收缩MySQL的大表,可以收缩整体数据库的大小,但是SQL Server所有的表都是在数据库的文件里,只有收缩文件才可以缩小空间。

因为MySQL表的空间是独立的一个文件,如果收缩MySQL的大表,会相应收缩整体数据库的大小。又由于SQL Server所有的表存储在数据库的文件里,只有收缩文件才可以缩小空间。本文主要介绍以下两种方法:

  • 方法一:使用DBCC CLEANTABLE命令回收表或索引视图中已删除可变长度列的空间。语法如下所示:
    DBCC CLEANTABLE  
    (  
        { database_name | database_id | 0 }  
        , { table_name | table_id | view_name | view_id }  
        [ , batch_size ]  
    )  
    [ WITH NO_INFOMSGS ]

    说明如下:

    语句 描述
    database_name | database_id | 0 待清除的表所在的数据库。如果指定0,则使用当前数据库。
    table_name | table_id | view_name | view_id 待清除的表或索引视图。
    batch_size 每个事务处理的行数。如果未指定或指定为0,则该语句将在一个事务中默认处理整个表。
    WITH NO_INFOMSGS 取消显示所有信息性消息。

    具体示例如下:

    DBCC CLEANTABLE (testDB,'testTable', 0)  
    WITH NO_INFOMSGS;  
    GO
  • 方法二:重建索引。

内容没看懂? 不太想学习?想快速解决? 有偿解决: 联系专家

阿里云企业补贴进行中: 马上申请

腾讯云限时活动1折起,即将结束: 马上收藏

同尘科技为腾讯云授权服务中心。

购买腾讯云产品享受折上折,更有现金返利:同意关联,立享优惠

转转请注明出处:https://www.yunxiaoer.com/166715.html

(0)
上一篇 2023年12月10日 上午9:18
下一篇 2023年12月10日
详情页2

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信
本站为广大会员提供阿里云、腾讯云、华为云、百度云等一线大厂的购买,续费优惠,保证底价,买贵退差。