1. 检查SQL Server服务状态
使用systemctl status mssql-server命令确认SQL Server服务是否正在运行。若服务未启动,可通过sudo systemctl start mssql-server启动服务;若需重启服务(如解决临时性问题),可使用sudo systemctl restart mssql-server。
2. 查看SQL Server错误日志
SQL Server的错误日志是诊断问题的核心线索,其默认路径为/var/opt/mssql/log/errorlog(部分版本可能在/var/log/mssql/errorlog)。使用tail -f /var/opt/mssql/log/errorlog命令实时查看最新日志,或通过cat、less命令查看历史记录,从中定位具体的错误信息(如启动失败、连接拒绝、权限问题等)。
3. 检查系统资源使用情况
df -h命令检查磁盘分区使用情况,确保SQL Server数据目录所在分区有足够空间(建议保留至少10%空闲空间)。top或htop命令实时监控系统资源占用,若SQL Server进程占用过高(如CPU持续超过80%、内存耗尽),可能需要优化查询、调整max server memory配置(通过mssql-conf工具设置)或增加硬件资源。4. 验证网络连接与端口配置
ping <客户端IP>命令测试SQL Server与客户端的连通性,确保网络无中断。netstat -tuln | grep 1433或ss -tuln | grep 1433命令检查端口是否处于监听状态。若端口未监听,可能是配置错误(如mssql.conf中network.tcp.port设置错误)或服务未启动。sudo ufw allow 1433/tcp(UFW防火墙)或firewall-cmd --zone=public --add-port=1433/tcp --permanent && firewall-cmd --reload(Firewalld防火墙)命令配置。5. 检查SQL Server配置参数
使用sudo /opt/mssql/bin/mssql-conf list命令查看当前SQL Server配置(如内存分配、最大并发连接数、排序规则等)。重点检查以下参数:
memory.memorylimitmb:确保分配给SQL Server的内存不超过系统总内存的70%(避免内存耗尽导致系统崩溃);network.tcp.port:确认端口设置与客户端连接请求一致;filelocation.defaultdatadir/filelocation.defaultlogdir:确保数据目录和日志目录存在且有正确的读写权限(通常属于mssql用户)。6. 检查依赖库与系统要求
SQL Server在Debian上运行需要满足特定的系统要求和依赖库:
curl、gnupg、apt-transport-https、libssl1.1等),若缺少依赖,可使用sudo apt install <包名>安装。依赖问题可能导致安装失败或服务无法启动。7. 测试本地连接
在Debian服务器上使用sqlcmd工具进行本地连接测试,验证SQL Server是否正常响应。命令示例:sqlcmd -S localhost -U SA -P <YourPassword>(替换为实际的SA密码)。若连接成功,会进入sqlcmd交互界面;若失败,需检查SA账户密码是否正确、SQL Server是否允许Windows/混合身份验证(通过mssql-conf set authentication.mode设置)。
8. 排查连接问题(远程/客户端)
若客户端无法连接,需逐步排查:
localhost、IP地址)、端口(如1433)、数据库名称正确;msodbcsql18),且环境变量LD_LIBRARY_PATH包含驱动路径(如/opt/mssql/lib);GRANT CONNECT TO <用户名>命令授予)。9. 检查磁盘I/O与文件系统
iostat -x 1命令监控磁盘I/O使用率(%util列),若接近100%,可能需要优化查询(如减少全表扫描)、升级磁盘(如使用SSD)或调整文件系统挂载选项(如noatime);fsck命令检查和修复文件系统(需从Live CD启动或卸载目标分区)。10. 使用动态管理视图(DMVs)监控性能
通过SQL Server的DMVs获取实时性能信息,帮助定位性能瓶颈:
SELECT * FROM sys.dm_exec_requests(查看正在执行的查询、等待类型);SELECT TOP 10 * FROM sys.dm_exec_query_stats ORDER BY cpu_time DESC(查看CPU消耗最高的查询);SELECT * FROM sys.dm_tran_locks(查看当前锁等待情况,避免死锁)。