小编DrC*_*ste的帖子

更改列时会增加大量磁盘空间使用量

我希望这个问题对某人来说很容易回答:)

我有一个看起来像这样的表(隐藏了不重要的列)

CREATE TABLE [dbo].[Log](
    [LogID] [int] IDENTITY(1,1) NOT NULL,
    --several other columns
    [Name] [nvarchar](512) NOT NULL,
 CONSTRAINT [PK_Log] PRIMARY KEY CLUSTERED 
(
    [LogID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO
Run Code Online (Sandbox Code Playgroud)

现在我对该表做了一些索引,这也涉及将Name-column缩短到 256 宽度。但是当我更改此列时

ALTER TABLE Log ALTER COLUMN Name NVARCHAR(256) NOT NULL
GO
Run Code Online (Sandbox Code Playgroud)

数据库增长了一个不平凡的数量。(是的,我仔细检查了 - 这是我在这里所做的唯一更改)该表总共有 90746 个条目,在更改表之前,SSMS 表示大小为 247.56MB。

但是在这次更新之后,数据库增长到了 336.13MB。

不知道这在这里是否重要,但SELECT @@VERSION得到Microsoft SQL Server …

sql-server database-size alter-table disk-space auto-growth

3
推荐指数
1
解决办法
2373
查看次数

sys.database_files 和 SQL Server Management Studio 中的数据库属性对话框之间的可用空间不同

我现在看着这个几分钟,找不到提到这个的线程。

我想从 SQL Server 上的数据库查询当前使用的空间和可用空间。当我在 SQL Server Management Studio 中打开数据库上的属性对话框时,我查询的数字应该与我看到的数字相匹配,如下所示:

示例数据库属性显示大小:17689,00MB 和可用空间:16795,77MB

所以我浏览了一下,发现我可以sys.database_files像这样查询(从这里):

SELECT
        DB_NAME() AS DbName, 
        name AS FileName, 
        size/128.0 AS CurrentSizeMB, 
        size/128.0 - CAST(FILEPROPERTY(name, 'SpaceUsed') AS INT)/128.0 AS FreeSpaceMB 
    FROM sys.database_files; 
Run Code Online (Sandbox Code Playgroud)

这让我得到这个结果:

DbName 文件名 CurrentSizeMB FreeSpaceMB
数据库名称 数据库名称 17338.000000 16795.312500
数据库名 数据库名_日志 351.000000 331.234375

试图从上一个对话框中识别我的号码:

  • 好的,添加17338351让我达到17689对话框列出的大小
  • 但是对于可用空间,我找不到它,16795.312500几乎减少了半 MB

我该怎么做才能获得与属性对话框显示的可用空间完全相同的数字?

我是否以错误的方式使用了查询/公式,或者由于某些舍入(将页面/范围转换为 MB...),此时根本不可能?

sql-server ssms sql-server-2012

3
推荐指数
1
解决办法
478
查看次数