亚洲一区精品自拍_2021年国内精品久久_男同十八禁gv在线观看_免费观看a级性爱黄片

Article / 文章中心

阿里云數(shù)據(jù)庫RDS SQL Server如何回收表空間?

發(fā)布時間:2020-04-20 點擊數(shù):1236

問題描述

RDS SQL Server在刪除變長列或者減小變長列的長度后,表的大小不會自動減小。其中變長列包括的字段類型有varchar、nvarchar、varchar(max)、nvarchar(max)、varbinary、text、ntext、image、sql_variant、varbinary(max)、xml。

問題原因

空間是不會自動回收的,每個記錄都占了一個位置。即使刪除了數(shù)據(jù),位置也會空在那里,下次插入記錄的時候,會優(yōu)先選這些空的槽位。

解決方案

阿里云提醒您:

?如果您對實例或數(shù)據(jù)有修改、變更等風(fēng)險操作,務(wù)必注意實例的容災(zāi)、容錯能力,確保數(shù)據(jù)安全。

?如果您對實例(包括但不限于ECS、RDS)等進行配置與數(shù)據(jù)修改,建議提前創(chuàng)建快照或開啟RDS日志備份等功能。

?如果您在阿里云平臺授權(quán)或者提交過登錄賬號、密碼等安全信息,建議您及時修改。

您可以考慮定時重建聚集索引。另外,即使收縮了表的空間,數(shù)據(jù)庫的數(shù)據(jù)文件大小不會變小。要收縮 一個SQL Server的數(shù)據(jù)文件,必須用DBCC SHRINKDATABASE語句收縮指定數(shù)據(jù)庫的指定數(shù)據(jù)或日志文件大小,或者用DBCC SHRINKFILE語句收縮當(dāng)前數(shù)據(jù)庫的指定數(shù)據(jù)或日志文件大小。MySQL表的空間是獨立的一個文件,所以收縮MySQL的大表,可以收縮整體數(shù)據(jù)庫的大小,但是SQL Server所有的表都是在數(shù)據(jù)庫的文件里,只有收縮文件才可以縮小空間。本文主要介紹如下兩種方法。

?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:要清除的表所在的數(shù)據(jù)庫。如果指定0,則使用當(dāng)前數(shù)據(jù)庫。

   ?table_name | table_id | view_name | view_id:要清除的表或索引視圖。

   ?batch_size:每個事務(wù)處理的行數(shù)。如果未指定,或指定為0,則該語句將在一個事務(wù)中處理整個表。

   ?WITH NO_INFOMSGS:取消顯示所有信息性消息。

具體示例如下所示。

DBCC CLEANTABLE (testDB,'testTable', 0)  

WITH NO_INFOMSGS;  

GO

?重建索引或者reorganized索引。

適用于

?云數(shù)據(jù)庫 RDS SQL Server 版

阿里云代理商  阿里云分銷商