SQL Server Always On 磁盘满处理方式
2019-11-11 本文已影响0人
ZhiXiong
现象描述:我在用 HammerDB 做压力测试的时,因为事务日志太大,导致数据盘 100%
以下是处理方式:
1. 查看数据库文件大小和状态, 确定是那个数据库文件过大导致的。
select * from sys.master_files
2. 备份事务日志到空设备,为释放空间创造条件
BACKUP LOG tpcc TO DISK='NUL:'
3. 收缩日志文件大小
这一步有可能没有生效,是因为有副本节点数据没有完全同步。需要在其他盘添加一个临时文件,使数据库状态处于正常状态,然后再处理。
USE tpcc;
GO
DBCC SHRINKFILE ('tpcc_log', 500)
GO
4. 添加日志文件
例如:在所有 AVAILABILITY GROUP 节点上执行一下命令:
mkdir -p /opt/data/
chown -R mssql:mssql /opt/data/
然后在主节点上执行:
ALTER DATABASE tpcc ADD LOG FILE
(
NAME = tpcc_log2,
FILENAME = '/opt/data/tpcc_log2.ldf',
SIZE = 5MB,
MAXSIZE = 1024MB,
FILEGROWTH = 5MB
)
5. 确认 AVAILABILITY GROUP 同步状态是正常的,然后重新执行步骤 3
6. 磁盘空间释放完成后, 移除添加的临时日志文件
在主节点上执行:
ALTER DATABASE tpcc REMOVE FILE tpcc_log2;
参考资料:
https://www.thecloudtechnologist.com/shrinking-sql-log-files-in-an-availability-group-cluster-or-database-mirror/
解决事务日志已满的问题:https://docs.microsoft.com/zh-cn/sql/relational-databases/logs/troubleshoot-a-full-transaction-log-sql-server-error-9002?view=sql-server-ver15
DBCC SHRINKFILE: https://docs.microsoft.com/zh-cn/sql/t-sql/database-console-commands/dbcc-shrinkfile-transact-sql?view=sql-server-ver15