KASQLDBA Asked: 2015-01-16 06:17:05 +0800 CST2015-01-16 06:17:05 +0800 CST 2015-01-16 06:17:05 +0800 CST 磁盘空间使用情况 772 有没有一种方法可以让我在 sql server 2012 中获取报告或创建自定义报告,它可以每天两次或一次向我更新可用磁盘空间和列出的驱动器的实际磁盘空间。 我需要这个,因为我的客户需要查看一个月的磁盘空间使用情况才能看到所需的模式。 谢谢! sql-server sql-server-2012 3 个回答 Voted Best Answer user507 2015-01-16T07:48:11+08:002015-01-16T07:48:11+08:00 我已经编写了报告,并实际发出警报,供客户在其测试和生产环境中监控多个服务器。我基本上使用带有 PowerShell 步骤的 SQL 代理作业将磁盘信息 ( win32_volume) 提取到一些表中。 然后我决定创建另一个 PowerShell 步骤,返回并检查可用空间是否在配置的阈值内(存储在表中)。我们采用这种方法是因为它更容易设置和编写得相当快。与尝试在 T-SQL 中编写代码相比,编写通过电子邮件发送的 HTML 报告代码也更简洁。 您在 SQL Server 中有 DMV 来获取磁盘空间使用情况(例如sys.dm_os_volume_stats),但上面的 PowerShell 选项允许我们监视在给定服务器上找到的所有驱动器。现在需要注意的是,您必须为 PowerShell 执行创建一个代理帐户,并且该帐户应该具有适当的权限。 仅获取有关可用磁盘空间的 HTML 报告的示例。 编辑 刚刚从迈克的评论中意识到我的个人资料中有一个功能,它的写法与他的有点不同,但这正是对我有用的: function Get-DiskSpace($server,[switch]$all) { $servers = gc C:\Users\smelton\Documents\WindowsPowerShell\OSList.txt if ($all) { foreach ($s in $servers) { Get-WmiObject -Class Win32_Volume -ComputerName $s | Select-Object @{Label='ServerName';Expression={$s}}, DriveLetter, Label, @{Label='GB Capacity';Expression={"{0:N2}" -f($_.Capacity/1GB)}}, @{Label='GB FreeSpace';Expression={"{0:N2}" -f($_.freespace/1GB)}}, @{Label='% Free';Expression={"{0:N2}" -f($_.freespace/$_.Capacity)}} | Sort-Object -Property DriveLetter } #end foreach } else { Get-WmiObject -Class Win32_Volume -ComputerName $server | Where {$_.DriveType -eq 3} | Select-Object DriveLetter, Label, @{Label='GB Capacity';Expression={"{0:N2}" -f($_.Capacity/1GB)}}, @{Label='GB FreeSpace';Expression={"{0:N2}" -f($_.freespace/1GB)}}, @{Label='% Free';Expression={"{0:N2}" -f($_.freespace/$_.Capacity)}} | Sort-Object -Property DriveLetter } #end if/else } #end Get-DiskSpace Kenneth Fisher 2015-01-16T06:33:48+08:002015-01-16T06:33:48+08:00 查看数据收集器选项。特别是磁盘使用情况收集集。数据收集器允许您安排收集各种类型的信息(在您的磁盘使用情况下)并将它们存储在称为管理数据仓库的东西中。一旦到达那里,就可以很容易地查询和/或编写数据报告。这是 SQL Server 2008 及更高版本的一部分。 如果内置的磁盘使用情况收集集没有您需要的信息,您也可以构建自己的收集集。在这种情况下,您可以使用 sys.dm_io_virtual_file_stats(假设您想要的驱动器上有数据库文件)或其他一些自定义代码来提取信息。 这里有一些 BOL 链接可以帮助您入门。 介绍数据收集器 数据采集 使用 Data Collector 监控 SQL Server 性能 Jeff Sacksteder 2015-01-16T13:55:34+08:002015-01-16T13:55:34+08:00 这不是您问题的直接答案,因为您想要的是趋势分析,但您应该熟悉 SSMS 中不同节点级别的报告。它们比以前的版本有了很大改进。在数据库级别有一个显示单个表的大小。 还要查看管理数据仓库。
我已经编写了报告,并实际发出警报,供客户在其测试和生产环境中监控多个服务器。我基本上使用带有 PowerShell 步骤的 SQL 代理作业将磁盘信息 (
win32_volume
) 提取到一些表中。然后我决定创建另一个 PowerShell 步骤,返回并检查可用空间是否在配置的阈值内(存储在表中)。我们采用这种方法是因为它更容易设置和编写得相当快。与尝试在 T-SQL 中编写代码相比,编写通过电子邮件发送的 HTML 报告代码也更简洁。
您在 SQL Server 中有 DMV 来获取磁盘空间使用情况(例如
sys.dm_os_volume_stats
),但上面的 PowerShell 选项允许我们监视在给定服务器上找到的所有驱动器。现在需要注意的是,您必须为 PowerShell 执行创建一个代理帐户,并且该帐户应该具有适当的权限。仅获取有关可用磁盘空间的 HTML 报告的示例。
编辑
刚刚从迈克的评论中意识到我的个人资料中有一个功能,它的写法与他的有点不同,但这正是对我有用的:
查看数据收集器选项。特别是磁盘使用情况收集集。数据收集器允许您安排收集各种类型的信息(在您的磁盘使用情况下)并将它们存储在称为管理数据仓库的东西中。一旦到达那里,就可以很容易地查询和/或编写数据报告。这是 SQL Server 2008 及更高版本的一部分。
如果内置的磁盘使用情况收集集没有您需要的信息,您也可以构建自己的收集集。在这种情况下,您可以使用 sys.dm_io_virtual_file_stats(假设您想要的驱动器上有数据库文件)或其他一些自定义代码来提取信息。
这里有一些 BOL 链接可以帮助您入门。
介绍数据收集器
数据采集
使用 Data Collector 监控 SQL Server 性能
这不是您问题的直接答案,因为您想要的是趋势分析,但您应该熟悉 SSMS 中不同节点级别的报告。它们比以前的版本有了很大改进。在数据库级别有一个显示单个表的大小。
还要查看管理数据仓库。