SQL Server在CentOS故障排查技巧
导读:SQL Server在CentOS的故障排查技巧 一 快速定位流程 服务状态与自启:使用命令查看与拉起服务,确认是否开机自启 命令:sudo systemctl status mssql-server、sudo systemctl sta...
SQL Server在CentOS的故障排查技巧
一 快速定位流程
- 服务状态与自启:使用命令查看与拉起服务,确认是否开机自启
命令:sudo systemctl status mssql-server、sudo systemctl start mssql-server、sudo systemctl enable mssql-server。若反复重启失败,先停止后再排查。 - 错误日志:先看 SQL Server 错误日志,再看 systemd 日志
路径:/var/log/mssql/errorlog;命令:journalctl -u mssql-server -xe。从最近的错误与时间线定位根因。 - 文件权限与所有权:确保数据目录归属正确
命令:sudo chown -R mssql:mssql /var/opt/mssql。权限异常会导致启动或访问失败。 - 端口与防火墙:确认监听端口并放通
默认端口:1433;放通命令:sudo firewall-cmd --zone=public --add-port=1433/tcp --permanent & & sudo firewall-cmd --reload。 - 网络连通与监听:从客户端测试连通性
命令:ping 服务器IP;端口检测:telnet 服务器IP 1433 或 nc -zv 服务器IP 1433。无法连通时优先排查网络与防火墙策略。 - 配置核对:检查监听地址配置
文件路径:/etc/mssql/mssql.conf.d/90-sqlservr.conf,确保包含 listen_addresses=0.0.0.0(或所需网段)以监听所有接口。 - 客户端侧检查:确认客户端工具与连接串
安装工具:sudo yum install -y mssql-tools unixODBC-devel;连接测试:sqlcmd -S localhost -U SA -P ‘YourStrong!Passw0rd’ -Q “SELECT 1”。连接串需包含正确的服务器地址、端口、数据库、用户名、密码。
二 常见故障与修复
- 服务启动即崩溃或反复重启
典型现象:systemctl 显示 Active: failed (Result: signal)。处理步骤:- 用 journalctl -u mssql-server -xe 查具体信号与报错;
- 若日志出现 “Unable to read instance id from /var/opt/mssql/.system/instance_id”,先备份该文件(若存在),再删除后重启,实例会自动生成新的 instance_id。注意:这可能导致依赖 NEWSEQUENTIALID() 的表在重启后出现顺序性异常风险,务必评估业务影响并做好备份。
- 断电或异常关机后无法启动
处理步骤:- 以单用户模式观察启动输出:sudo /opt/mssql/bin/sqlservr -m;
- 若怀疑数据文件异常,先做好文件级备份,再用 sqlcmd 执行检查与修复:
- 检查:sqlcmd -S localhost -U SA -Q “DBCC CHECKDB (‘YourDB’)”
- 修复(谨慎):sqlcmd -S localhost -U SA -Q “DBCC CHECKDB (‘YourDB’) WITH REPAIR_ALLOW_DATA_LOSS”(仅在无法用常规手段恢复时、且有完整备份的前提下执行)。
- 客户端连接超时或拒绝
排查顺序:- 服务端确认服务运行与监听:systemctl status mssql-server、ss -lntp | grep 1433;
- 防火墙放通 1433/tcp;
- 客户端测试:telnet 服务器IP 1433 或 nc -zv 服务器IP 1433;
- 核对连接字符串参数(服务器、端口、数据库、凭据)与账号权限。
- 主机名解析异常
现象:应用或客户端报无法解析主机。处理:- 检查 /etc/hosts 中主机名与IP映射;
- 检查 /etc/resolv.conf 的 nameserver 是否可用,必要时更换为可用 DNS。
三 性能与阻塞排查
- 即时会话与请求:
查询阻塞与长时运行会话:- 查看活跃请求与等待信息:
- SELECT session_id, request_id, task_state, wait_type, wait_time_ms, start_time, command, text FROM sys.dm_exec_requests r CROSS APPLY sys.dm_exec_sql_text(r.sql_handle) st ORDER BY wait_time_ms DESC;
- 查看会话与登录信息:
- SELECT session_id, login_name, host_name, program_name, login_time, last_request_end_time FROM sys.dm_exec_sessions;
- 结合执行统计定位问题 SQL:
- SELECT TOP 20 qs.execution_count, qs.total_worker_time/qs.execution_count AS avg_cpu_ms, qs.total_elapsed_time/qs.execution_count AS avg_elapsed_ms, SUBSTRING(qt.text, (qs.statement_start_offset/2)+1, ((CASE qs.statement_end_offset WHEN -1 THEN DATALENGTH(qt.text) ELSE qs.statement_end_offset END - qs.statement_start_offset)/2)+1) AS stmt_text FROM sys.dm_exec_query_stats qs CROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) qt ORDER BY avg_elapsed_ms DESC;
- 查看活跃请求与等待信息:
- 资源瓶颈定位:
- 系统层:top/htop、vmstat、iostat、nmon、sar、dstat、glances 观察 CPU、内存、I/O、网络;
- 存储层:用 iostat -x 1 检查 await、svctm、util% 判断磁盘压力;
- 网络层:netstat -s、tcpdump 排查丢包与重传。
- 日志与空间:
- 查看日志空间使用:DBCC SQLPERF(LOGSPACE); ;
- 事务日志维护:按业务 RPO 定期执行 BACKUP LOG [DB] TO DISK=‘…’ WITH FORMAT; ,避免日志无限增长。
- 深入诊断:
- 使用 扩展事件(Extended Events) 捕获长时 SQL、锁等待、错误等;
- 借助 SSMS 活动监视器 或性能仪表盘快速定位热点查询与阻塞链。
四 监控与日志管理
- 基础监控:
- 命令行健康检查:sqlcmd -S localhost -U SA -P ‘YourStrong!Passw0rd’ -Q “SELECT @@SERVERNAME, @@VERSION; ”;
- 系统资源:top/htop、vmstat、iostat、nmon、sar、dstat、glances;
- 第三方监控:Prometheus + Grafana(建议配合 prometheus-mssql-exporter)、Zabbix、Nagios 等,覆盖实例存活、连接数、查询性能、磁盘/内存/CPU 等关键指标。
- 日志集中与审计:
- 系统日志集中:rsyslog 收集与转发;
- 日志分析与可视化:ELK Stack(Elasticsearch, Logstash, Kibana)、Splunk;
- 审计与合规:启用 SQL Server 审计 或触发器记录关键数据变更,便于追踪与取证。
五 排错命令清单
- 服务与日志:systemctl status|start|enable mssql-server;journalctl -u mssql-server -xe;tail -n 200 /var/log/mssql/errorlog
- 端口与连通:ss -lntp | grep 1433;firewall-cmd --list-ports;telnet 服务器IP 1433;nc -zv 服务器IP 1433
- 权限与目录:ls -ld /var/opt/mssql /var/opt/mssql/.system;chown -R mssql:mssql /var/opt/mssql
- 客户端与连通:sqlcmd -S localhost -U SA -P ‘Pwd’ -Q “SELECT 1”
- 资源与 I/O:top/htop、vmstat 1、iostat -x 1、nmon、sar、dstat、glances
- 数据库诊断:DBCC SQLPERF(LOGSPACE); ;DBCC CHECKDB(‘DB’);长时 SQL 与阻塞查询(见第三部分 SQL)
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: SQL Server在CentOS故障排查技巧
本文地址: https://pptw.com/jishu/754279.html
