1. 查看SQL Server日志內容
在Debian系統中,SQL Server的日志文件默認存儲在/var/opt/mssql/log/
目錄下,主要包括sqlserver.log
(主錯誤日志)、error.log
(錯誤日志)等??墒褂靡韵旅畈榭慈罩緝热荩?/p>
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. 調整恢復模式控制日志增長
恢復模式決定了事務日志的保留策略,直接影響日志文件大?。?/p>
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
),但需提前備份數據。