1. 检查SQL Server服务状态
使用systemctl命令确认SQL Server服务是否正在运行。若未运行,启动服务并再次检查状态:
sudo systemctl status mssql-server # Debian默认服务名通常为mssql-server
sudo systemctl start mssql-server # 若未运行,启动服务
2. 查看系统与SQL Server日志
tail、journalctl或dmesg命令获取系统级错误信息,重点关注与SQL Server相关的条目:tail -f /var/log/syslog # 实时查看系统日志
journalctl -u mssql-server -f # 查看SQL Server服务的详细日志
dmesg | grep -i sql # 检查内核日志中的SQL Server相关错误
/var/opt/mssql/log/errorlog,包含数据库引擎的详细错误信息(如启动失败、连接问题):cat /var/opt/mssql/log/errorlog # 查看完整错误日志
tail -n 50 /var/opt/mssql/log/errorlog # 查看最近50条错误记录
3. 验证进程与资源使用情况
ps命令确认SQL Server主进程(sqlservr)是否在运行:ps aux | grep sqlservr
top或htop命令监控CPU、内存使用率,判断是否存在资源瓶颈(如高CPU占用可能导致查询缓慢,内存不足可能触发OOM Killer终止进程)。4. 测试网络连接与端口可用性
ping命令测试客户端与SQL Server服务器之间的网络连接:ping <SQL_Server_IP>
netstat或ss命令确认SQL Server是否在默认端口(1433)上监听:sudo netstat -tulnp | grep 1433 # 查看1433端口的监听状态
sudo ss -tulnp | grep 1433 # 更现代的替代命令
5. 检查磁盘空间与文件系统
df命令检查SQL Server数据目录所在磁盘的剩余空间(默认路径为/var/opt/mssql),确保有足够空间存储数据库文件和日志:df -h /var/opt/mssql # 查看指定目录的磁盘使用情况
fsck命令修复文件系统错误(需从Live CD或救援模式运行):sudo fsck /dev/sdXN # 替换为实际的分区设备名
6. 验证SQL Server配置正确性
mssql-conf工具查看或修改SQL Server配置(如内存分配、最大并发连接数):sudo /opt/mssql/bin/mssql-conf list # 列出所有可配置选项
sudo /opt/mssql/bin/mssql-conf set memory.memorylimitmb 4096 # 示例:设置最大内存为4GB
mssql.conf中的[network]部分配置了正确的端口(默认1433):sudo nano /etc/mssql/mssql.conf # 编辑配置文件
[network]
tcp.port = 1433 # 确认端口设置
7. 分析性能瓶颈(动态管理视图与Profiler)
-- 查看当前正在执行的查询(按CPU时间排序)
SELECT session_id, request_id, cpu_time, logical_reads, text
FROM sys.dm_exec_requests r
CROSS APPLY sys.dm_exec_sql_text(r.sql_handle)
ORDER BY cpu_time DESC;
-- 查看锁等待情况
SELECT request_status, wait_type, wait_time, blocking_session_id
FROM sys.dm_exec_requests
WHERE blocking_session_id <> 0;
8. 解决常见配置问题
sudo ufw allow 1433/tcp # 允许TCP 1433端口
sudo ufw reload # 重新加载防火墙规则
sqlcmd工具测试连接:sqlcmd -S localhost -U SA -P 'YourPassword' # 测试SA用户连接
9. 日志轮转与管理(防止日志膨胀)
使用logrotate工具自动管理SQL Server日志文件,避免日志占满磁盘空间。创建/etc/logrotate.d/sqlserver配置文件,添加以下内容:
/var/opt/mssql/log/*.log {
daily # 每天轮转
rotate 7 # 保留7个旧日志
compress # 压缩旧日志
missingok # 若日志不存在也不报错
notifempty # 若日志为空则不轮转
create 0644 mssql mssql # 新日志的权限和所有者
sharedscripts # 所有日志轮转完成后执行脚本
postrotate
/bin/kill -HUP `cat /var/run/mssql/mssql.pid 2>/dev/null` 2>/dev/null || true
endscript
}
10. 更新与重启服务
sudo apt update && sudo apt upgrade -y
sudo systemctl restart mssql-server