CentOS 上 SQL Server 故障排查技巧
一 快速定位流程
- 服务状态与自启
- 检查运行状态:systemctl status mssql-server
- 启动/重启:systemctl start|restart mssql-server
- 设置开机自启:systemctl enable mssql-server
- 日志优先
- SQL Server 错误日志:/var/log/mssql/errorlog
- systemd 日志:journalctl -u mssql-server -xe
- 资源与空间
- 磁盘与 Inode:df -h、df -i
- 内存与负载:free -m、top
- 网络连通
- 端口可达:nc -vz <IP或主机名> 1433 或 telnet <IP或主机名> 1433
- 本机监听:ss -lntp | grep 1433
- 权限与目录
- 数据目录归属:chown -R mssql:mssql /var/opt/mssql
- SELinux(如启用):getenforce(必要时临时 setenforce 0 验证,再改为永久策略)
二 常见故障与修复要点
- 服务反复崩溃或启动失败
- 现象:Active: failed (Result: signal),或短时间内反复重启
- 处置:查看 journalctl -u mssql-server 定位信号与模块;必要时用控制台前台启动观察:/opt/mssql/bin/sqlservr;若提示 Access was denied setting up the persistent registry: \SystemRoot\licensing.hiv,多为残留进程或文件锁导致,先彻底清理残留进程再修复权限:
- 停止服务:systemctl stop mssql-server
- 清理残留:ps -ef | grep -E “sqlservr|paldumper”;必要时 pkill -9 -f “sqlservr”
- 修复权限:chown -R mssql:mssql /var/opt/mssql;检查 /var/opt/mssql/.system/system/registry/ 权限与占用
- 实例 ID 文件丢失导致无法启动
- 现象:日志含 Unable to read instance id from /var/opt/mssql/.system/instance_id
- 处置:先备份该文件(若存在),再删除后重启,SQL Server 会自动生成新的 instance_id(注意:这可能导致依赖 NEWSEQUENTIALID() 的表出现 GUID 顺序性变化的风险,需评估业务影响)
- 端口与防火墙阻断连接
- 处置:开放端口并重载防火墙
- firewall-cmd --zone=public --add-port=1433/tcp --permanent
- firewall-cmd --reload
- 验证:nc -vz 1433 或 telnet 1433
- 监听地址配置不当
- 处置:编辑配置文件(示例)/etc/mssql/mssql.conf.d/90-sqlservr.conf,设置 listen_addresses=0.0.0.0 以监听所有接口,重启服务生效
- 客户端连接被拒绝或超时
- 排查顺序:服务是否运行 → 端口是否开放 → 连接字符串是否正确(服务器、端口、数据库、用户名、密码)→ 登录账号权限是否足够
三 性能与阻塞排查
- 活跃会话与请求
- 在 SSMS 或 sqlcmd 中查询:sys.dm_exec_requests、sys.dm_exec_sessions,定位阻塞链与长时运行语句
- 执行计划与统计
- 结合 sys.dm_exec_query_stats、sys.dm_exec_plan_attributes 分析热点查询与计划回归
- 实时与历史诊断
- 使用 SSMS 的活动监视器观察当前会话、请求与等待信息
- 建立扩展事件会话,捕获长时 SQL、锁竞争与错误事件,便于离线分析
四 高频命令清单
- 服务与日志
- systemctl status|start|restart|enable mssql-server
- journalctl -u mssql-server -xe
- tail -n 200 /var/log/mssql/errorlog
- 网络与监听
- nc -vz <IP或主机名> 1433
- ss -lntp | grep 1433
- firewall-cmd --zone=public --add-port=1433/tcp --permanent && firewall-cmd --reload
- 权限与目录
- chown -R mssql:mssql /var/opt/mssql
- ls -ld /var/opt/mssql /var/opt/mssql/.system
- 前台启动与控制台观察
- 残留进程清理
- ps -ef | grep -E “sqlservr|paldumper”
- pkill -9 -f “sqlservr”