1. 日志文件定位
在Debian系统中,SQL Server的日志文件默认存储在/var/opt/mssql/log/目录下,常见类型包括主日志文件sqlserver.log(记录实例级错误与事件)、错误日志(error.log,记录启动与运行错误)。可通过ls /var/opt/mssql/log/命令确认日志文件位置,使用tail -f /var/opt/mssql/log/sqlserver.log实时查看最新日志内容。
2. 日志查看方法
cat(查看完整日志)、less(分页查看)、tail -f(实时跟踪新增日志)等命令直接读取日志文件;也可通过journalctl -u mssql-server查看SQL Server服务的系统日志(包含启动失败、权限问题等系统级事件)。dbForge Studio等第三方工具,提供更直观的日志分析与搜索功能。3. 日志轮转配置(避免日志过大)
使用logrotate工具自动化管理日志轮转,步骤如下:
sudo apt-get install logrotate;sudo nano /etc/logrotate.d/sqlserver,添加以下内容(示例):/var/opt/mssql/log/*.log {
daily # 每日轮转
rotate 7 # 保留最近7个归档文件
compress # 压缩旧日志(节省空间)
missingok # 忽略缺失日志文件
notifempty # 空日志不轮转
create 0644 mssql mssql # 新日志文件权限与所有者
sharedscripts # 所有日志处理完成后执行脚本
}
sudo logrotate -vf /etc/logrotate.d/sqlserver(验证配置是否正确)。4. 日志清理与收缩
BACKUP LOG [数据库名] TO DISK='备份路径.bak' WITH FORMAT命令备份事务日志(截断日志),再使用DBCC SHRINKFILE (日志逻辑名, 目标大小)收缩日志文件(如DBCC SHRINKFILE (TestDB_log, 1)将日志收缩至1MB)。5. 调整恢复模式(控制日志增长)
ALTER DATABASE [数据库名] SET RECOVERY SIMPLE命令设置。此模式下,事务日志会在检查点后自动截断,减少日志文件增长,但无法支持时间点恢复。BACKUP LOG)以避免磁盘空间耗尽。6. 监控与警报设置
Prometheus+Grafana监控日志文件大小、数量及增长速率,或通过Zabbix配置自定义警报规则,实现实时监控与预警。7. 权限与安全管控
chmod(修改文件权限)、chown(修改文件所有者)命令设置日志目录权限(如sudo chown -R mssql:mssql /var/opt/mssql/log/,sudo chmod -R 750 /var/opt/mssql/log/)。/tmp)。8. 高级技巧:使用扩展事件捕获详细日志
对于需要深入分析性能问题或复杂查询的场景,可使用SQL Server的**扩展事件(Extended Events)**捕获详细日志。通过T-SQL命令创建扩展事件会话,例如:
CREATE EVENT SESSION [SlowQueries] ON SERVER
ADD EVENT sqlserver.rpc_completed(
ACTION(sqlserver.sql_text, sqlserver.database_id)
WHERE ([duration] > 1000000)) -- 捕获执行时间超过1秒的查询
ADD TARGET package0.event_file(SET filename=N'/var/opt/mssql/log/slow_queries.xel')
WITH (STARTUP_STATE=ON); -- 实例启动时自动启动
GO
ALTER EVENT SESSION [SlowQueries] ON SERVER STATE = START; -- 启动会话
通过SSMS或sys.fn_xe_file_target_read_file函数查看捕获的日志,分析慢查询原因。