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条查询,帮助定位性能瓶颈。