You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何查询MSSQL Server中各数据库的内存及存储空间占用情况?

嘿,我来帮你搞定这个MSSQL的查询需求!你提到的“任务”应该是指SQL Server Management Studio(SSMS)里的内置报表任务,我把可视化操作和更灵活的T-SQL脚本方法都整理好了,按需选就行~

方法一:SSMS内置可视化任务(就是你朋友说的方式)

如果你喜欢点鼠标的可视化操作,SSMS自带的标准报表就能快速搞定:

  • 查看所有数据库存储空间占用
    1. 打开SSMS并连接到目标MSSQL实例
    2. 在左侧对象资源管理器中,右键点击你的服务器名称,选择「报表」→「标准报表」→「磁盘使用情况」
    3. 这个报表会直观展示每个数据库的数据文件、日志文件的已用/可用空间,还有总占用量,甚至能看到文件所在磁盘分区的整体使用情况
  • 查看服务器内存使用情况
    1. 同样右键服务器名称,选择「报表」→「标准报表」→「服务器内存使用情况」
    2. 这里能看到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

火山引擎 最新活动