如何查询MSSQL Server中各数据库的内存及存储空间占用情况?
嘿,我来帮你搞定这个MSSQL的查询需求!你提到的“任务”应该是指SQL Server Management Studio(SSMS)里的内置报表任务,我把可视化操作和更灵活的T-SQL脚本方法都整理好了,按需选就行~
方法一:SSMS内置可视化任务(就是你朋友说的方式)
如果你喜欢点鼠标的可视化操作,SSMS自带的标准报表就能快速搞定:
- 查看所有数据库存储空间占用
- 打开SSMS并连接到目标MSSQL实例
- 在左侧对象资源管理器中,右键点击你的服务器名称,选择「报表」→「标准报表」→「磁盘使用情况」
- 这个报表会直观展示每个数据库的数据文件、日志文件的已用/可用空间,还有总占用量,甚至能看到文件所在磁盘分区的整体使用情况
- 查看服务器内存使用情况
- 同样右键服务器名称,选择「报表」→「标准报表」→「服务器内存使用情况」
- 这里能看到SQL Server当前的总内存分配、缓冲池使用、内存 clerks 等详细内存占用数据,帮你快速判断内存资源的使用状态
方法二:用T-SQL脚本精确查询
如果需要更定制化的结果,或者要把数据导出/自动化查询,直接跑T-SQL脚本是更高效的选择:
1. 查询所有数据库的存储空间占用(数据+日志文件)
这个脚本会返回每个数据库的日志、数据文件的总容量、已用空间、剩余可用空间,已经转成了GB单位,更直观:
SELECT DB_NAME(database_id) AS 数据库名称, type_desc AS 文件类型, CONVERT(DECIMAL(18,2), SUM(size)*8/1024.0) AS 总容量_GB, CONVERT(DECIMAL(18,2), SUM(FILEPROPERTY(name, 'SpaceUsed'))*8/1024.0) AS 已使用容量_GB, CONVERT(DECIMAL(18,2), (SUM(size) - SUM(FILEPROPERTY(name, 'SpaceUsed')))*8/1024.0) AS 剩余可用容量_GB FROM sys.master_files GROUP BY database_id, type_desc ORDER BY 数据库名称, 文件类型;
2. 查询SQL Server整体内存使用情况(服务器级)
这个脚本能帮你了解SQL Server进程本身的内存占用细节:
SELECT physical_memory_in_use_kb/1024 AS 当前使用物理内存_GB, large_page_allocations_kb/1024 AS 大页分配内存_GB, locked_page_allocations_kb/1024 AS 锁定页内存_GB, virtual_address_space_reserved_kb/1024 AS 保留虚拟地址空间_GB, virtual_address_space_committed_kb/1024 AS 提交虚拟地址空间_GB, page_fault_count AS 页面错误次数 FROM sys.dm_os_process_memory;
3. 查询每个数据库在缓冲池中的内存占用(缓存数据大小)
如果你想知道哪个数据库占用了最多的内存缓存,这个脚本很有用:
SELECT DB_NAME(database_id) AS 数据库名称, COUNT(page_id) * 8 / 1024.0 AS 缓冲池占用内存_GB FROM sys.dm_os_buffer_descriptors WHERE database_id <> 32767 -- 排除系统资源数据库 GROUP BY database_id ORDER BY 缓冲池占用内存_GB DESC;
小提示:以上脚本适用于SQL Server 2012及以上版本,老版本可能需要调整部分语法哦~
内容的提问来源于stack exchange,提问作者ProgrammJüngling02




