微软SQL Server数据库引擎DAC模式启动

1. 什么是DAC模式

DAC全称为“Database Administrator Connection”,即数据库管理员连接。DAC是在SQL Server 2005中引入的一个特殊的连接模式,用于在系统出现问题时提供一个“紧急通道”,允许DBA连接到实例并诊断和解决问题。DAC模式允许管理员绕过SQL Server上运行的其他进程,以最小的系统资源占用量连接到SQL Server实例。DAC连接不会使用已分配的连接池。

当SQL Server出现问题时,例如由于死锁或其他严重的相关问题导致所有可用连接都已用尽,此时仍可以使用DAC连接到实例,以执行以下任务:

处理已连接到SQL Server实例的会话

启动、停止或暂停SQL Server服务

在内存不足时关闭连接,以释放内存

数据库备份、维护、还原等操作

需要注意的是,在SQL Server 2012中,应该在启用DAC之前,为带有SQL Server的计算机启用远程链接和远程管理。

2. 如何启用DAC模式

要启用DAC连接,需要有管理员权限,在SQL Server配置管理器中进行以下配置:

2.1 配置启用DAC

首先,需要启用DAC连接。为此,在SQL Server配置管理器中的SQL Server网络配置下,选择SQL Server Services。在右侧窗口中,单击SQL Server服务的属性。在常规选项卡中,向下滚动到“区域配置”属性,并将“启用通过管理连接访问此SQL Server”设置为“是”。

EXEC sp_configure 'remote admin connections', 1

RECONFIGURE

另外,如果使用了SQL Server Express,需要使用以下命令进行配置:

EXEC sp_configure 'remote admin connections', 1

GO

RECONFIGURE WITH OVERRIDE

2.2 连接到DAC模式

在启用DAC之后,可以使用SQL Server Management Studio连接到她。在服务器地址前加上“admin:”,即“admin:server_name”,使用管理员帐户连接即可。

为了安全起见,不建议在网络上公开暴露DAC连接,因为它提供了极高的系统权限。取而代之的是,需要使用隧道协议(如VPN)将连接保护起来。

3. 使用DAC模式进行故障排除

3.1 如何查看SQL Server日志

在故障排除过程中,首先应该检查SQL Server错误日志,以查找有关与SQL Server相关的错误、不足和其他提示的信息。这些错误信息包括 SQL Server 本身的早期错误警告、错误消息、死锁异常、索引扫描和其他事件,可以通过SQL Server错误日志文件查看。

SQL Server错误日志文件位于SQL Server安装文件夹(通常是C:\Program Files\Microsoft SQL Server\MSSQL15.MSSQLSERVER\MSSQL\Log)的ERRORLOG文件中。可以使用以下脚本将SQL Server错误日志文件输出到SSMS客户端:

EXEC sys.xp_readerrorlog

该脚本将输出包括错误、警告、有关还原和文件自动增长、有关服务启动和停止的记录,在故障排除中非常有用。

3.2 如何检查内存和CPU使用情况

在故障排除中,通常需要检查SQL Server的内存和CPU使用情况,也可以在运行速度较慢时进行此操作。在SSMS客户端中,可以通过以下脚本了解SQL服务器的内存使用情况:

SELECT

(SELECT CONVERT(INT, value) FROM sys.dm_os_sys_info WHERE name = 'physical_memory_in_bytes') / 1024 / 1024 AS [Physical Memory (MB)],

(SELECT CONVERT(INT, value) FROM sys.dm_os_sys_info WHERE name = 'committed_kb') / 1024 AS [Committed Memory (MB)],

(SELECT CONVERT(INT, value) FROM sys.dm_os_sys_info WHERE name = 'committed_target_kb') / 1024 AS [Committed Target Memory (MB)],

(SELECT CONVERT(INT, value) FROM sys.dm_os_sys_info WHERE name = 'system_cache_kb') / 1024 AS [System Cache (MB)],

(SELECT CONVERT(INT, value) FROM sys.dm_os_sys_info WHERE name = 'kernel_paged_pool_kb') / 1024 AS [Kernel Paged Pool (MB)],

(SELECT CONVERT(INT, value) FROM sys.dm_os_sys_info WHERE name = 'kernel_nonpaged_pool_kb') / 1024 AS [Kernel Nonpaged Pool (MB)],

(SELECT CONVERT(INT, value) FROM sys.dm_os_sys_info WHERE name = 'max_workers_count') AS [Max Workers Count],

(SELECT CONVERT(INT, value) FROM sys.dm_os_sys_info WHERE name = 'virtual_address_space_reserved_kb') / 1024 AS [Virtual Address Space Reserved (MB)],

(SELECT CONVERT(INT, value) FROM sys.dm_os_sys_info WHERE name = 'virtual_address_space_committed_kb') / 1024 AS [Virtual Address Space Committed (MB)]

可以使用下面的脚本查看SQL Server实例的CPU利用率:

SELECT TOP(1) record_id, dateadd(ms, -1 * (datepart(ms, [timestamp]) % 1000), [timestamp]) AS TimeStamp, 

(SELECT CONVERT(INT, (SELECT cntr_value FROM sys.dm_os_performance_counters WHERE counter_name = 'Processor Time %' AND instance_name LIKE '%_Total'))) AS [Processor Time],

(SELECT CONVERT(INT, (SELECT cntr_value FROM sys.dm_os_performance_counters WHERE counter_name = 'SQLServer:SQL Statistics' AND instance_name = '_Total'))) AS [Total SQL Server CPU %],

(SELECT CONVERT(INT, (SELECT cntr_value FROM sys.dm_os_performance_counters WHERE counter_name = 'User Connections' AND instance_name = '_Total'))) AS [User Connections]

FROM sys.dm_os_ring_buffers

WHERE ring_buffer_type = 'RING_BUFFER_SCHEDULER_MONITOR'

AND record_id > 0

ORDER BY record_id DESC

根据这些信息,可以判断SQL Server是否出现了内存或CPU瓶颈。

数据库标签