温馨提示×

centos sqlserver故障排查技巧

小樊
32
2025-12-19 20:00:58
栏目: 云计算

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 -hdf -i
    • 内存与负载:free -mtop
  • 网络连通
    • 端口可达:nc -vz <IP或主机名> 1433telnet <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 1433telnet 1433
  • 监听地址配置不当
    • 处置:编辑配置文件(示例)/etc/mssql/mssql.conf.d/90-sqlservr.conf,设置 listen_addresses=0.0.0.0 以监听所有接口,重启服务生效
  • 客户端连接被拒绝或超时
    • 排查顺序:服务是否运行 → 端口是否开放 → 连接字符串是否正确(服务器、端口、数据库、用户名、密码)→ 登录账号权限是否足够

三 性能与阻塞排查

  • 活跃会话与请求
    • 在 SSMS 或 sqlcmd 中查询:sys.dm_exec_requestssys.dm_exec_sessions,定位阻塞链与长时运行语句
  • 执行计划与统计
    • 结合 sys.dm_exec_query_statssys.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
  • 前台启动与控制台观察
    • /opt/mssql/bin/sqlservr
  • 残留进程清理
    • ps -ef | grep -E “sqlservr|paldumper”
    • pkill -9 -f “sqlservr”

0