本文介绍如何查看RDS SQL Server中常用的系统视图及其查询方法,以便于日常管理和维护工作。
阿里云提醒您:
-
如果您对实例或数据有修改、变更等风险操作,务必注意实例的容灾、容错能力,确保数据安全。
-
如果您对实例(包括但不限于ECS、RDS)等进行配置与数据修改,建议提前创建快照或开启RDS日志备份等功能。
-
如果您在阿里云平台授权或者提交过登录账号、密码等安全信息,建议您及时修改。
操作步骤
-
使用客户端连接实例。具体操作,请参见连接SQL Server实例。
-
依次执行如下SQL语句,查看系统参数配置。
USE [$DB_Name]; SELECT * FROM sys.configurations;说明[$DB_Name]为数据库名称。参数详细解释,请参见sys.configurations。查询结果以表格形式展示系统配置项列表,包含
configuration_id、name、value、minimum、maximum、value_in_use、description、is_dynamic、is_advanced等列,展示各配置项(如recovery interval (min)、user connections、max worker threads等)的当前值及取值范围。 -
依次执行如下SQL语句,查看数据库的文件相关信息。
USE [$DB_Name]; SELECT * FROM sys.sysfiles;系统显示类似如下:
fileid groupid size maxsize growth status perf name filename 1 1 1024 -1 8192 2 0 zht01 E:\SQLDATA\DATA\zht01.mdf 2 0 1024 268435456 8192 66 0 zht01_log E:\SQLDATA\DATA\zht01_log.ldf -
执行如下SQL语句,查看数据库文件大小。
SELECT name, CONVERT(float,size) * (8192.0/1024.0)/1024 AS Size_MB,* from [$DB_Name].dbo.sysfiles;查询结果显示数据库
zht01的数据文件(zht01.mdf,Size_MB 为 8)和日志文件(zht01_log.ldf,Size_MB 为 8)两条记录,包含 name、Size_MB、fileid、groupid、size、maxsize、growth、status、filename 等字段。 -
执行如下SQL语句,查看数据库文件的I/O统计信息。
SELECT * FROM sys.dm_io_virtual_file_stats(DB_ID('[$DB_Name]'), [$File_ID]);说明[$File_ID]为步骤4获取的fileid。查询结果包含
database_id、file_id、sample_ms、num_of_reads、num_of_bytes_read、io_stall_read_ms、io_stall_queued_read_ms、num_of_writes、num_of_bytes_written、io_stall_write_ms、io_stall_queued_write_ms、io_stall、size_on_disk_bytes、file_handle等列,展示数据库文件的读写次数、字节数及 I/O 延迟等指标。 -
执行如下SQL语句,查看实例中所有未提交的事务及其执行的语句。
SELECT DB_NAME(dbid) AS DBNAME, (SELECT text FROM sys.dm_exec_sql_text(sql_handle)) AS SQLSTATEMENT FROM master..sysprocesses WHERE open_tran > 0查询结果包含 DBNAME 和 SQLSTATEMENT 两列,示例输出中 SQLSTATEMENT 列的值为
begin tran select * from sys.sysfilegroups和begin tran select * from sys.sysfiles,表明对应数据库中存在未提交的事务。 -
执行如下SQL语句,查看数据和索引的碎片。
DBCC SHOWCONTIG;系统显示类似如下,显示指定表或者视图的数据以及索引的碎片情况。参数详细解释,请参见DBCC SHOWCONTIG。
DBCC SHOWCONTIG scanning 'ExampleTable' table... Table: 'ExampleTable' (581577110); index ID: 1, database ID: 5 TABLE level scan performed. - Pages Scanned................................: 4 - Extents Scanned..............................: 1 - Extent Switches..............................: 0 - Avg. Pages per Extent........................: 4.0 - Scan Density [Best Count:Actual Count].......: 100.00% [1:1] - Logical Scan Fragmentation ..................: 25.00% - Extent Scan Fragmentation ...................: 0.00% - Avg. Bytes Free per Page.....................: 872.8 - Avg. Page Density (full).....................: 89.22% DBCC SHOWCONTIG scanning 'QueryNotificationErrorsQueue' table... Table: 'QueryNotificationErrorsQueue' (1977058079); index ID: 1, database ID: 5 TABLE level scan performed. - Pages Scanned................................: 0 -
执行如下SQL语句,查看数据库中的索引碎片。
SELECT * FROM sys.dm_db_index_physical_stats(DB_ID(N'[$DB_Name]'),NULL,NULL,NULL,DEFAULT);查询结果返回各索引的碎片信息,关键列包括
database_id、object_id、index_id、index_type_desc(索引类型,如CLUSTERED INDEX或NONCLUSTERED INDEX)、avg_fragmentation_in_percent(平均碎片率)、fragment_count(碎片数)、page_count(页数)等。重点关注avg_fragmentation_in_percent列,该值较高(例如达到25%)的索引表示碎片率较高,需要进行索引重建或重组。 -
执行如下SQL语句,查看近期执行的语句。
SELECT p.spid, p.status, p.hostname, p.loginame, p.cpu, r.start_time, r.command, p.program_name, text FROM sys.dm_exec_requests AS r, master.dbo.sysprocesses AS p CROSS APPLY sys.dm_exec_sql_text(p.sql_handle) WHERE p.status NOT IN ('sleeping', 'background') AND r.session_id = p.spid查询结果显示当前活动会话列表,每行对应一个非空闲状态的会话,展示其进程号、运行状态(如
suspended、runnable)、主机名、登录名、CPU 占用时间、启动时间、执行命令类型、来源程序名称及正在执行的 SQL 文本。