如何检查我是否达到Express Edition的大小限制?


10

我很困惑。AFAIK SQL Server 2005 Express的数据库 数据大小限制为4GB 。但是我得到以下结果sp_spaceused

数据库的实际大小是多少

  1. 如何检查我的数据库是否达到大小限制?
  2. 未分配的空间是否会space left达到极限?
  3. 我还剩多少空间?
  4. 是否index_size在极限算?

您可以检查msdb.dbo.backupset的backup_size列。

Answers:


6

这是我从这里毫不客气地撕下来的一个好脚本:

use [Insert DB Name]

select
a.FILEID,
[FILE_SIZE_MB] = 
convert(decimal(12,2),round(a.size/128.000,2)),
[SPACE_USED_MB] =
convert(decimal(12,2),round(fileproperty(a.name, 'SpaceUsed')/128.000,2)),
[FREE_SPACE_MB] =
convert(decimal(12,2),round((a.size-fileproperty(a.name, 'SpaceUsed'))/128.000,2)) ,
NAME = left(a.NAME,15),
FILENAME = left(a.FILENAME,30)
from
dbo.sysfiles a

这很好,因为它将为您提供每个DB文件中的可用空间(您可能有多个文件,也许有人设置了每个文件中的一些对象)以及可用大小。

例如,您有一个4GB的数据文件,其中有3GB的可用空间。也许您有1个MDF,但是没有很多数据,而NDF却有很多数据。该查询将告诉您每个文件的可用大小以及该文件分配给的数据库。记住为每个数据库加所有“ SPACE_USED_MB”,以得到总大小。

祝好运!

编辑: 删除了一个我认为我可以摆脱在此查询中发布的不支持和错误的命令。:(



PS,如果您要使用旧的,向后兼容的视图,则可以通过使用来简化此过程sysaltfiles(这根本不需要进入每个数据库)。
亚伦·伯特兰

1
感谢Aaron的sysaltfiles,我还没有研究它!sp_msforeachdb有很多痛苦的问题,但是我发现要进行SQL Express安装,该家伙只想运行一个查询以查看他有多少可用空间就可以了。
阿里·拉泽吉

除非它跳过数据库并且不引发错误……
亚伦·伯特兰

是的,但是在这种情况下,您真的认为最终用户只需要数据库大小计数会是一个问题吗?我猜我什至不应该发布它,即使最终用户绝对会看到它是否跳过了他们正在寻找的数据库,从而不会加剧不良行为。现在我将删除该部分,您是对的,我们不需要在其他任何地方粘贴该命令。
阿里·拉泽吉

5

数据库的大小就是文件的大小。查看数据文件的实际大小(事务日志不计算在内)。是的,索引很重要。如果空间不足,请考虑升级到SQL 2012 Express,因为这会将大小限制增加到10 Gig。


6
SQL Server 2008 R2 Express也有10 GB的限制(仅出于完整性考虑)
marc_s

1

当sp_spaceused在第一个结果集中显示约25 GB的database_size时,其中包括数据文件/索引事务日志。只有实际的数据和索引才计入SQL Server Express限制,因此您大约有3.3 GB的数据(如第二个结果集中一样),其余的22 GB将作为事务日志。如果运行“ sp_helpdb”,这将显示真实情况,因为它在两个单独的行上报告数据使用情况和事务日志使用情况。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.