相关疑难解决方法(0)

释放未使用的空间 SQL Server 表

我在 SQL Server 2012 Express 中有一个表,有很多未使用的空间。

我需要释放数据库中的空间。

| 姓名 | 行 | 保留 | 数据 | INDEX_SIZE | 未使用 |
|-------------|--------|--------------|----------- ---|------------|--------------|
| 我的表名 | 158890 | 8928296 KB | 5760944 KB | 2248 KB | 3165104 KB |

如何让 SQL 释放 3165104KB?

我已经试过了:

Alter table MyTableName Rebuild
DBCC CLEANTABLE (MyDbName,"MyTableName ", 0)
ALTER INDEX ALL ON MyTableName REORGANIZE ; 
ALTER INDEX PK_Image ON MyTableName REBUILD WITH (ONLINE = OFF) 
Run Code Online (Sandbox Code Playgroud)

这是表:

CREATE TABLE [dbo].[MyTableName](
    [ImageID] [int] IDENTITY(1,1) NOT NULL,
    [DateScan] …
Run Code Online (Sandbox Code Playgroud)

sql-server sql-server-2012

11
推荐指数
2
解决办法
3万
查看次数

如何释放表的未使用空间

这个问题被问了几十次,令我惊讶的是,这样一个简单的要求变得如此困难。然而我无法解决这个问题。

我使用 SQL Server 2014 Express 版,数据库大小限制为 10GB(不是文件组大小,数据库大小)。

我抓取了新闻,并将 HTML 插入到表格中。表的架构是:

Id bigint identity(1, 1) primary key,
Url varchar(250) not null,
OriginalHtml nvarchar(max),
...
Run Code Online (Sandbox Code Playgroud)

数据库容量不足,我收到了 insufficient disk space

当然缩小数据库和文件组没有帮助。DBCC SHRINKDATABASE没有帮助。所以我写了一个简单的应用程序来读取每条记录,去掉一些不需要的部分,OriginalHtml比如 head section 和 aside 和 footer 以只保留主体,现在我在获取顶级表的磁盘使用情况报告时看到这个图像:

在此处输入图片说明

据我了解这张图片,未使用的空间现在占总大小的 50%。也就是说,现在我有 5GB 未使用的空间。但我无法收回它。重建索引没有帮助。该truncateonly选项无济于事,因为据我所知,没有记录被删除,只有每条记录的大小减少。

我被困在这一点上。请帮忙,我该怎么办?

聚集索引在列上Id

这是结果 EXECUTE sys.sp_spaceused @objname = N'dbo.Articles', @updateusage = 'true';

name        rows     reserved     data        index_size   unused
----------- -------- ------------ ----------- ------------ -----------
Articles    112258   8079784 KB   5199840 KB  13360 KB …
Run Code Online (Sandbox Code Playgroud)

sql-server shrink dbcc database-size

8
推荐指数
1
解决办法
1万
查看次数

仅将数据库收缩到创建数据库后设置的初始大小

在 SQL Server 中,每个数据库都有一个属性Initial Size (MB),可以在 SSMS 的数据库属性中看到。默认情况下,mdf 文件为 3 MB,ldf 文件为 1 MB。

所以现在如果创建一个新数据库,那么它将被设置为默认大小(即 mdf 为 3 MB,ldf 文件为 1 MB)。但是在创建数据库后,我将初始大小更改为其他一些值,例如 For mdf 10 MB 和 ldf 5 MB。(实时某些数据库管理员可能希望在创建数据库后更改初始大小)

但是现在如果缩小数据库,它将缩小到我在创建后设置的初始大小之外(考虑数据库中没有数据,否则它将缩小到其实际内容大小)。它会缩小到创建数据库时的初始大小(即 mdf 为 3mb,ldf 为 1mb)。我希望缩小到我设置的初始大小(即 mdf 为 10 mb,ldf 为 5mb)。可以做到吗?如果可能,那么如何?

在一些文章中,我看到 dbcc SHRINKFILE 可用于缩小超过初始大小,而 dbcc SHRINKDATABASE 不能缩小超过初始大小。但我只想缩小到我设置的初始大小。

注意:我知道收缩不好,不应该做。但我想知道怎么做?如果sql server只考虑创建数据库时设置的初始大小,那么创建数据库后设置初始大小有什么用?

编辑:

来自微软收缩相关文章:使用 DBCC SHRINKDATABASE 您不能将数据库收缩到其初始大小以下。

我的问题是我可以更改现有数据库本身的初始大小吗?

编辑:

我有大约 5 个 sql server 实例。创建的所有数据库的数据默认大小为 3 mb,日志大小为 1 mb(大约 3 年前)。现在所有的数据库都在 100-1000 mb 的范围内。我不会正常收缩数据库,因为这不是一个好习惯。但是一些数据库增长超过 10 GB(mdf 文件本身,因为我在其中插入了如此多的数据)。因此,当数据库很大时,我会将不重要的旧内容从该数据库转移到另一台服务器,因为该服务器不需要我。这样数据库大小从 10 GB …

sql-server maintenance shrink sql-server-2008-r2

5
推荐指数
1
解决办法
1万
查看次数