如何查看RDS SQL Server常用视图

更新时间:
复制 MD 格式

本文介绍如何查看RDS SQL Server中常用的系统视图及其查询方法,以便于日常管理和维护工作。

说明

阿里云提醒您:

  • 如果您对实例或数据有修改、变更等风险操作,务必注意实例的容灾、容错能力,确保数据安全。

  • 如果您对实例(包括但不限于ECS、RDS)等进行配置与数据修改,建议提前创建快照或开启RDS日志备份等功能。

  • 如果您在阿里云平台授权或者提交过登录账号、密码等安全信息,建议您及时修改。

操作步骤

  1. 使用客户端连接实例。具体操作,请参见连接SQL Server实例

  2. 依次执行如下SQL语句,查看系统参数配置。

    USE [$DB_Name];
    SELECT * FROM sys.configurations;
    说明

    [$DB_Name]为数据库名称。参数详细解释,请参见sys.configurations

    查询结果以表格形式展示系统配置项列表,包含 configuration_idnamevalueminimummaximumvalue_in_usedescriptionis_dynamicis_advanced 等列,展示各配置项(如 recovery interval (min)user connectionsmax worker threads 等)的当前值及取值范围。

  3. 依次执行如下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
  4. 执行如下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)两条记录,包含 nameSize_MBfileidgroupidsizemaxsizegrowthstatusfilename 等字段。

  5. 执行如下SQL语句,查看数据库文件的I/O统计信息。

    SELECT * FROM sys.dm_io_virtual_file_stats(DB_ID('[$DB_Name]'), [$File_ID]);
    说明

    [$File_ID]为步骤4获取的fileid

    查询结果包含 database_idfile_idsample_msnum_of_readsnum_of_bytes_readio_stall_read_msio_stall_queued_read_msnum_of_writesnum_of_bytes_writtenio_stall_write_msio_stall_queued_write_msio_stallsize_on_disk_bytesfile_handle 等列,展示数据库文件的读写次数、字节数及 I/O 延迟等指标。

  6. 执行如下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

    查询结果包含 DBNAMESQLSTATEMENT 两列,示例输出中 SQLSTATEMENT 列的值为 begin tran select * from sys.sysfilegroupsbegin tran select * from sys.sysfiles,表明对应数据库中存在未提交的事务。

  7. 执行如下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
  8. 执行如下SQL语句,查看数据库中的索引碎片。

    SELECT * FROM sys.dm_db_index_physical_stats(DB_ID(N'[$DB_Name]'),NULL,NULL,NULL,DEFAULT);

    查询结果返回各索引的碎片信息,关键列包括 database_idobject_idindex_idindex_type_desc(索引类型,如 CLUSTERED INDEXNONCLUSTERED INDEX)、avg_fragmentation_in_percent(平均碎片率)、fragment_count(碎片数)、page_count(页数)等。重点关注 avg_fragmentation_in_percent 列,该值较高(例如达到25%)的索引表示碎片率较高,需要进行索引重建或重组。

  9. 执行如下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

    查询结果显示当前活动会话列表,每行对应一个非空闲状态的会话,展示其进程号、运行状态(如 suspendedrunnable)、主机名、登录名、CPU 占用时间、启动时间、执行命令类型、来源程序名称及正在执行的 SQL 文本。