1. 查看SQL Server日志內容
Debian環境下,SQL Server的日志文件默認存儲在/var/opt/mssql/log/
目錄下(如錯誤日志error.log
、查詢日志query.log
等)??墒褂肔inux命令行工具快速查看:
tail -f /var/opt/mssql/log/error.log
:實時跟蹤錯誤日志的最新內容,便于及時發現異常;less /var/opt/mssql/log/sqlserver.log
:分頁查看完整日志文件,支持上下翻頁和搜索;cat /var/opt/mssql/log/slow-query.log
:查看慢查詢日志(若已啟用),分析查詢性能瓶頸。2. 調整數據庫恢復模式控制日志增長
SQL Server的恢復模式直接決定日志文件的保留策略,需根據業務需求選擇:
ALTER DATABASE YourDatabaseName SET RECOVERY SIMPLE;
3. 定期備份事務日志(完整/大容量日志模式必備)
若使用完整或大容量日志模式,必須通過備份事務日志控制其大小,避免磁盤空間耗盡。使用T-SQL命令備份:
BACKUP LOG [YourDatabaseName] TO DISK = '/var/opt/mssql/backup/YourDatabaseName_Log.bak' WITH FORMAT;
其中,WITH FORMAT
參數會覆蓋現有備份文件(首次備份需使用,后續可省略)。
4. 使用logrotate自動化日志輪轉
Debian的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 0640 mssql mssql # 創建新日志文件的權限和所有者
sharedscripts # 所有日志輪轉完成后執行腳本
postrotate
systemctl restart mssql-server # 重啟SQL Server服務以應用新日志
endscript
}
sudo logrotate -vf /etc/logrotate.d/sqlserver
(強制立即輪轉并顯示詳細信息)。5. 清理與收縮日志文件(特殊情況處理)
當日志文件異常膨脹(如未及時備份),需手動清理:
DBCC SHRINKFILE
,先確認日志文件名(通過sp_helpdb YourDatabaseName
),再執行:USE YourDatabaseName;
DBCC SHRINKFILE (YourDatabaseName_Log, 100); -- 將日志文件縮小到100MB
注意:頻繁收縮日志可能導致性能下降,建議僅在日志異常膨脹時使用。DBCC OPENTRAN
查看長時間未提交的事務,若有則提交或回滾,釋放日志空間:DBCC OPENTRAN('YourDatabaseName');
6. 監控與警報機制
建立監控體系,及時發現日志問題:
top
、iostat
監控SQL Server進程的CPU、內存和磁盤使用情況;SELECT name, size/128.0 AS SizeMB, size/128.0 - CAST(FILEPROPERTY(name, 'SpaceUsed') AS int)/128.0 AS FreeSpaceMB
FROM sys.database_files
WHERE type_desc = 'LOG';
cron
定時任務或第三方監控工具(如Zabbix、Prometheus),當FreeSpaceMB
低于閾值(如100MB)時發送郵件或短信警報。7. 第三方工具輔助管理
借助專業工具提升日志管理效率: