SQL serverSQL-ServerSQL Server

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

上一篇下一篇

猜你喜欢

热点阅读