我通常使用以下方法来确定数据库的每个文件中的可用/已用空间:
Select *, fileproperty(name, 'SpaceUsed') as Used
From dbo.sysfiles
Run Code Online (Sandbox Code Playgroud)
这将返回页面中的总空间和已用空间,然后乘以 8 得到 KB(或除以 128.0 得到 MB)。
我找到了另一个脚本,而不是使用DBCC showfilestats并dbcc sqlperf(logspace)返回 TotalExtents 和 UsedExtents,然后可以乘以 64 得到 KB(或除以 16.0 得到 MB)。
忽略额外的列,这两个是否总是为空闲/总空间提供相同的值?怎么样sp_spaceused?
它们的准确性是否都取决于最近的 DBCC UPDATEUSAGE?
是否有另一种更好的方法来确定已用/可用空间?(我需要这个脚本在 SQL 2000、2005 和 2008 服务器上工作)
部分相关:你能有一个部分分配的范围吗?(例如,仅分配了一个范围内的 8 个页面中的 3 个)
有没有一种方法可以让我在 sql server 2012 中获取报告或创建自定义报告,它可以每天两次或一次更新我列出的驱动器的可用磁盘空间和实际磁盘空间。
我需要这个是因为我的客户需要查看一个月内的磁盘空间使用情况才能看到所需的模式。
谢谢!
当您使用诸如sys.database_files之类的东西时,它以 8 KB 页面为单位给出文件的大小,而与它进行比较的许多其他内容以 MB 为单位。
有多种方法可以将 8 KB 页面转换为 MB,查询的答案中提供了几种方法来报告磁盘空间分配和已用空间
最常见的两种是
第二种更简单,只需要一个操作。但两者似乎都给出了相同的答案。
选择一种方法而不是另一种方法有充分的理由吗?
首先,是的,收缩是不好的。永远不要使用它。我明白。不幸的是,这是一种 SOP,我无法争论,因为它通常是权宜之计,直到我们可以获得一个维护窗口来分配更多空间并重建/重组索引。
我们最近遇到了一个问题,我们从传统备份切换到第三方工具。由于数据库的大小和我们最近删除的一些大对象,在转换之前使用新工具进行干净备份之前缩小它是有意义的。我有一些保留意见,但我们继续这样做,因为它很少引起问题。显然,清除日志并不是真正的问题,但我们正在缩小 mdf。这导致了对少数大型、高度事务性对象的大量阻塞,并且正确地提出了一些关于我们如何使用它的非常严重的问题。
我已经做了很多研究,但还没有找到足够让我满意的细节。
是否有任何地方可以实际描述 SHRINK 操作的内部结构?
有没有办法确定哪些物体比其他物体更碎片化以及它如何释放空间?或者,与表中的其他表相比,表的碎片化程度是否无关紧要,并且更多的是关于对象的整体大小?
保罗兰德尔在这里谈了一点,但还不够详细。
我知道您可以基于 dm 索引统计数据进行排序,但是由于大小和过度索引,在我们的一些较大的数据库上运行非常困难。我也不确定这是否就是我需要关心的全部。主表存储为堆,只有索引真正碎片化,但我不确定不同的分区如何影响事物,或者底层数据库的其他部分是否也可以被释放。
我确实也看到了这个问题,但我不确定我是否能够将它配置为我们正在寻找的那种粒度。
我们有一个数据库需要 40% 的日志文件随时可用,否则我们会收到警报。当达到限制时,我找不到设置增长的方法。
当然,我们可以将自动增长设置为某个限制,但随后我们必须每周进行一次以根据上次增长增加 40%。
有任何想法吗?SQL 2012