mysql 日志增长_数据库完整恢复模式下的日志增长问题

最近在弄alwaysOn的时候有遇到磁盘满了的情况,这个是因为参与alwaysOn的数据库必须是完整恢复模式, 而完整恢复模式,数据库收缩还无效果,所以只能采用事务日志备份的方式来进行事务日志截断。 这个还要感谢@i6first大神和@桦仔大神的文章才了解到必须使用事务日志备份才可行(原谅我是小白一枚,竟然不知道完整恢复模式需要用事务日志备份才能解决日志大小问题。目前还在成长中..)。开此文章,用于记录完整模式下日志增长问题。

论证如下 ↓↓↓↓

--------------------------创建测试环境-----------------------------

--创建数据库

CREATE DATABASEdb_test;GO

--创建表

USEdb_testCREATE TABLE T(ID INT IDENTITY(1,1),name NVARCHAR(50));

创建环境后数据库日志文件大小:

b56a0ee5dc72bf3a79c933deffc58395.png

由于事务日志备份的话,首先需要进行一次完整备份,否则会提示

“System.Data.SqlClient.SqlError: 无法执行 BACKUP LOG,因为当前没有数据库备份。 (Microsoft.SqlServer.Smo)”

数据库创建好以后,默认是完整恢复模式,所以为了方便测试,我们首先创建一个完整数据库备份。如下:

BACKUP DATABASE [db_test] TO DISK = N'D:\Program Files\Microsoft SQL Server\MSSQL12.MSSQLSERVER\MSSQL\Backup\db_test.bak' WITH NOFORMAT, NOINIT, NAME = N'db_test-完整 数据库 备份', SKIP, NOREWIND, NOUNLOAD, STATS = 10

GO

--------------------------开始测试-----------------------------

编写测试数据,并查看编写后的数据库日志文件大小

DECLARE @I INT=0;WHILE @I<10000

BEGIN

INSERT INTO t(name) VALUES(NEWID()),(NEWID()),(NEWID()),(NEWID()),(NEWID())IF(@I%20=0)BEGIN

UPDATE T SET name=GETDATE()END

IF(@I%100=0)BEGIN

DELETE t WHERE ID IN (SELECT TOP 10 ID FROM t WHERE ID%3=0);END

SET @I=@I+1;END

27d388a8ffe6f9ba48aed883ba602407.png

先进行一次收缩,看看收缩后的分配空间以及可用空间是否都会变小。如下

USE [db_test]

GO

DBCC SHRINKFILE (N'db_test_log' , 0)GO

8568b5934e4a533ec72c0740738b9c66.png

根据上图得知,收缩数据库并没有缩小日志分配空间,这次尝试用事务日志备份的方式来截断日志。如下

BACKUP LOG [db_test] TO DISK = N'D:\Program Files\Microsoft SQL Server\MSSQL12.MSSQLSERVER\MSSQL\Backup\db_test.bak' WITH NOFORMAT, NOINIT, NAME = N'db_test-完整 数据库 备份', SKIP, NOREWIND, NOUNLOAD, STATS = 10

GO

4729beb00b6f991b6b5dfb9e884ac7b8.png

根据上图可得知,我们的数据库日志分配可用空间由原来的45%提高到89%。 虽然没有减少物理内存,但是逻辑空间的确是变大了。

--------------------------结论-----------------------------

所以,采用完整恢复模式下的数据库的时候,要定时做事务日志备份。

???

待研究的问题,为毛做数据库收缩的时候,空间反而增大了,是因为往日志文件里面插入了日志导致的吗。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
项目:– JavaScript 中的患者数据管理系统 患者数据管理系统是为医院开发的 node JS 项目。通过使用此系统,您可以轻松访问患者数据,它具有成本效益,可改善患者护理和数据安全性。不仅如此,它还减少了错误范围。在运行项目之前,您需要下载 node.js。 这个患者数据管理项目包含 javascript、node.js 和 CSS。我们必须让服务器监听端口 3000,并使用 JSON 在客户端和服务器之间交换数据。这个项目会不断询问您有关插件更新的信息,因此请保持互联网畅通。此系统允许您执行 crud 操作。在这里,您是系统的管理员。您还可以添加所需的员工人数。此外,您还可以更新患者记录。该系统功能齐全且功能齐全。 要运行此项目,您需要在计算机上安装NodeJS并使用现代浏览器,例如 Google Chrome、  Mozilla Firefox。ReactJS项目中的此项目可免费下载源代码。有关项目演示,请查看下面的图像滑块。 对于手动安装 1.将主项目文件夹解压到任意目录 2.从 cmd 设置项目目录的路径 3. 输入命令“npm install” 4.完成后输入命令“npm start” 5.现在,您将获得一个 localhost:portnumber,并转到该 URL 演示: 该项目为国外大神项目,可以作为毕业设计的项目,也可以作为大作业项目,不用担心代码重复,设计重复等,如果需要对项目进行修改,需要具备一定基础知识。 注意:如果装有360等杀毒软件,可能会出现误报的情况,源码本身并无病毒,使用源码时可以关闭360,或者添加信任。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值