一、安装与配置问题
1. 安装失败:.NET Framework 相关问题
问题现象:安装过程中提示".NET Framework安装失败"或"需要特定版本的.NET Framework"
解决方案:
-
手动下载并安装所需版本的.NET Framework
-
使用SQL Server安装中心的"安装程序支持规则"功能检查系统兼容性
-
以管理员身份运行安装程序
-
确保Windows Update服务已开启
2. 服务无法启动
问题现象:SQL Server服务启动失败,错误日志显示"服务无法启动"
排查步骤:
-
检查错误日志(位于
MSSQL\Log
目录) -
验证服务账户权限
-
检查端口是否被占用(默认1433)
-
查看磁盘空间是否充足
-
检查依赖服务是否正常运行
二、连接问题
3. 无法连接到服务器
常见错误:
-
错误18456:登录失败
-
错误10060/10061:连接超时或拒绝连接
解决方案:
sql
复制
-- 检查SQL Server是否允许远程连接 EXEC sp_configure 'remote access', 1; RECONFIGURE; -- 检查TCP/IP协议是否启用 -- (通过SQL Server配置管理器)
4. 连接池问题
问题现象:应用程序报告"连接池达到最大大小"或"超时已到"
解决方法:
-
在连接字符串中添加
Pooling=false
临时禁用连接池进行测试 -
优化代码确保连接及时关闭
-
增加连接池大小:
csharp
复制
"Server=myServer;Database=myDB;Integrated Security=True;Max Pool Size=200;"
三、性能问题
5. 查询速度慢
诊断方法:
sql
复制
-- 查看当前运行中的查询 SELECT session_id, status, cpu_time, logical_reads, reads, writes, SUBSTRING(qt.text, (er.statement_start_offset/2)+1, ((CASE er.statement_end_offset WHEN -1 THEN DATALENGTH(qt.text) ELSE er.statement_end_offset END - er.statement_start_offset)/2)+1) AS executing_statement FROM sys.dm_exec_requests er CROSS APPLY sys.dm_exec_sql_text(er.sql_handle) AS qt WHERE session_id > 50;
优化建议:
-
检查缺失索引
-
更新统计信息:
UPDATE STATISTICS 表名
-
重建碎片化严重的索引
-
使用查询存储(Query Store)分析性能回归
6. 内存压力
监控命令:
sql
复制
-- 查看内存使用情况 SELECT physical_memory_kb/1024 AS [物理内存(MB)], committed_kb/1024 AS [SQL提交内存(MB)], committed_target_kb/1024 AS [目标提交内存(MB)] FROM sys.dm_os_sys_memory; -- 查看内存分配 SELECT TOP 10 type, name, pages_kb/1024 AS [MB] FROM sys.dm_os_memory_clerks ORDER BY pages_kb DESC;
解决方法:
-
调整最大服务器内存配置:
sql
复制
EXEC sp_configure 'show advanced options', 1; RECONFIGURE; EXEC sp_configure 'max server memory (MB)', 8192; -- 设置为物理内存的70-80% RECONFIGURE;
四、备份与恢复问题
7. 备份失败
常见错误:
-
错误3041:写入介质失败
-
错误18204:无法打开备份设备
解决方案:
-
验证备份路径是否存在且有写入权限
-
检查磁盘空间是否充足
-
尝试使用不同备份设备
8. 恢复数据库时"正在使用"错误
解决方法:
sql
复制
-- 设置数据库为单用户模式 ALTER DATABASE [数据库名] SET SINGLE_USER WITH ROLLBACK IMMEDIATE; -- 执行恢复操作 RESTORE DATABASE [数据库名] FROM DISK = 'C:\备份.bak' WITH REPLACE; -- 恢复多用户模式 ALTER DATABASE [数据库名] SET MULTI_USER;
五、高可用性问题
9. Always On可用性组同步问题
诊断命令:
sql
复制
-- 查看同步状态 SELECT ag.name AS [AG名称], ar.replica_server_name, db_name(ds.database_id) AS [数据库], ds.synchronization_state_desc, ds.synchronization_health_desc, ds.log_send_queue_size, ds.redo_queue_size FROM sys.dm_hadr_database_replica_states ds JOIN sys.availability_replicas ar ON ds.replica_id = ar.replica_id JOIN sys.availability_groups ag ON ar.group_id = ag.group_id;
常见解决方法:
-
检查网络连接
-
验证端点配置
-
监控日志传送延迟
-
调整同步提交模式
六、安全相关问题
10. 登录账户锁定
解决方法:
sql
复制
-- 解锁SA账户 ALTER LOGIN sa WITH PASSWORD = '新密码' UNLOCK; GO ALTER LOGIN sa ENABLE; GO -- 检查登录策略 SELECT name, is_policy_checked, is_expiration_checked FROM sys.sql_logins;
11. 权限问题
诊断方法:
sql
复制
-- 查看用户权限 EXEC sp_helprotect NULL, '用户名'; -- 查看有效权限 SELECT * FROM fn_my_permissions(NULL, 'DATABASE');
七、日常维护建议
-
定期维护计划:
-
每周重建或重组索引
-
每日更新统计信息
-
定期检查数据库一致性(DBCC CHECKDB)
-
-
监控关键指标:
sql
复制
-- 查看等待统计 SELECT TOP 10 wait_type, waiting_tasks_count, wait_time_ms FROM sys.dm_os_wait_stats ORDER BY wait_time_ms DESC; -- 查看磁盘IO SELECT DB_NAME(database_id) AS [Database], file_id, io_stall_read_ms, io_stall_write_ms FROM sys.dm_io_virtual_file_stats(NULL, NULL);
-
自动化警报设置:
-
配置数据库邮件
-
设置关键性能指标警报(CPU、磁盘空间、死锁等)
-
八、常见错误快速参考表
错误号 | 问题描述 | 快速解决方法 |
---|---|---|
18456 | 登录失败 | 检查用户名/密码,确认SQL认证模式 |
1205 | 死锁 | 分析死锁图,优化事务设计 |
2627 | 主键冲突 | 检查重复数据或调整标识列 |
547 | 外键冲突 | 检查引用完整性约束 |
1105 | 日志空间不足 | 备份日志或增加日志文件大小 |
4060 | 无法打开数据库 | 检查数据库状态,可能需要恢复 |