1. 查看SQL Server日志内容
在Debian系统中,SQL Server的日志文件默认存储在/var/opt/mssql/log/目录下,主要包括sqlserver.log(主错误日志)、error.log(错误日志)等。可使用以下命令查看日志内容:
tail -f /var/opt/mssql/log/sqlserver.log:实时查看最新日志条目;less /var/opt/mssql/log/sqlserver.log:分页查看日志内容;cat /var/opt/mssql/log/sqlserver.log:直接输出日志全文。fn_dblog(NULL, NULL)查看当前事务日志的详细记录(如事务ID、操作类型、对象ID等)。2. 调整恢复模式控制日志增长
恢复模式决定了事务日志的保留策略,直接影响日志文件大小:
ALTER DATABASE [YourDBName] SET RECOVERY SIMPLE;ALTER DATABASE [YourDBName] SET RECOVERY FULL;ALTER DATABASE [YourDBName] SET RECOVERY BULK_LOGGED;。3. 定期备份与收缩事务日志
BACKUP LOG命令备份日志,防止日志无限增长。示例:BACKUP LOG [YourDBName] TO DISK = '/var/opt/mssql/backup/YourDBName_Log.bak' WITH INIT;(INIT参数覆盖现有备份文件)。DBCC SHRINKFILE命令收缩。首先查看日志文件逻辑名称:SELECT name FROM sys.database_files WHERE type_desc = 'LOG';,然后执行收缩:DBCC SHRINKFILE (YourDBName_Log, 100);(100表示目标大小,单位MB)。4. 使用Logrotate自动化日志轮转
Logrotate是Linux系统自带的日志管理工具,可自动轮转、压缩和删除旧日志,避免日志文件占用过多磁盘空间。配置步骤:
sudo nano /etc/logrotate.d/sqlserver;/var/opt/mssql/log/*.log {
daily
rotate 7
compress
delaycompress
missingok
notifempty
create 640 mssql mssql
sharedscripts
postrotate
systemctl restart mssql-server > /dev/null 2>&1 || true
endscript
}
说明:daily(每日轮转)、rotate 7(保留7天)、compress(压缩旧日志)、postrotate(重启SQL Server服务以释放文件句柄)。sudo logrotate -vf /etc/logrotate.d/sqlserver(强制立即执行并显示详细信息)。5. 监控日志文件状态与增长
top、htop或iotop监控SQL Server进程的磁盘I/O和内存使用情况,及时发现日志文件增长导致的资源瓶颈;SELECT name, size, max_size, growth FROM sys.database_files WHERE type_desc = 'LOG';(查看日志文件大小及增长设置);DBCC SQLPERF(LOGSPACE);(查看所有数据库的日志空间使用率);errorlog中出现特定错误(如日志满)时发送通知(如邮件、短信)。6. 优化日志文件的存储与配置
/var/opt/mssql/data/用于数据文件,/var/opt/mssql/log/用于日志文件),减少I/O竞争,提高性能;ALTER DATABASE [YourDBName] MODIFY FILE (
NAME = YourDBName_Log,
SIZE = 1GB, -- 初始大小
FILEGROWTH = 100MB -- 自动增长步长
);
WITH (TABLOCK)提示减少日志量(如BULK INSERT或SELECT INTO),但需提前备份数据。