CentOS環境下SQL Server日志管理方法
/var/log/mssql/errorlog
,可使用cat
(一次性顯示全部)、less
(分頁查看,支持上下鍵導航)或tail
(實時跟蹤最新內容,如tail -f /var/log/mssql/errorlog
監控新增日志)命令查看。journalctl
命令查看SQL Server服務的系統日志,例如journalctl -u mssql-server
顯示全部服務日志,journalctl -u mssql-server -f
實時監控新增日志,journalctl -u mssql-server --since "2025-06-01" --until "2025-06-02"
按時間范圍過濾日志。sqlcmd
或SSMS連接實例,執行DBCC SQLPERF(LOGSPACE)
查詢,返回各數據庫日志文件的總大小、已使用空間、剩余空間及使用百分比。ALTER DATABASE [數據庫名] SET RECOVERY SIMPLE;
(完整模式需切換為簡單模式才能收縮);USE [數據庫名]; DBCC SHRINKFILE ([日志文件邏輯名], 目標大小(MB));
(如DBCC SHRINKFILE (MyDB_Log, 100);
將日志文件收縮至100MB);ALTER DATABASE [數據庫名] SET RECOVERY FULL;
。sp_configure
設置日志文件自動收縮(需謹慎使用,高負載環境下可能影響性能),例如EXEC sp_configure 'auto shrink', 1; RECONFIGURE;
(1表示開啟,0表示關閉)。BACKUP LOG
命令,例如BACKUP LOG [數據庫名] TO DISK = '/path/YourDB_LogBackup.bak' WITH FORMAT;
(WITH FORMAT
表示覆蓋現有備份文件)。DBCC SHRINKFILE
(僅在需要立即釋放空間時使用)。若恢復模式為簡單模式,日志會自動截斷(無需備份)。BACKUP LOG
命令)→設置計劃(如每天凌晨2點執行);/etc/rsyslog.conf
,可實現集中式日志存儲。/var/log/mssql/errorlog
);USE [數據庫名];
ALTER DATABASE [數據庫名] SET STATISTICS PROFILE ON; -- 開啟執行計劃統計
-- 記錄執行時間超過1秒的查詢
EXEC sp_configure 'show advanced options', 1;
RECONFIGURE;
EXEC sp_configure 'slow query log', 1;
RECONFIGURE;
EXEC sp_configure 'long query time', 1; -- 設置慢查詢閾值為1秒
RECONFIGURE;
sys.dm_exec_query_stats
動態管理視圖查詢慢查詢信息,例如:SELECT TOP 10
qs.execution_count,
qs.total_elapsed_time/1000 AS total_elapsed_ms,
qs.last_elapsed_time/1000 AS last_elapsed_ms,
SUBSTRING(qt.text, (qs.statement_start_offset/2)+1,
((CASE qs.statement_end_offset
WHEN -1 THEN DATALENGTH(qt.text)
ELSE qs.statement_end_offset END
- qs.statement_start_offset)/2)+1) AS query_text
FROM sys.dm_exec_query_stats qs
CROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) qt
ORDER BY qs.total_elapsed_time DESC;
該查詢返回執行次數最多、耗時最長的10條查詢,幫助定位性能瓶頸。