若日志出现 “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;
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;