关于设置多个事务日志文件的问题

游北亮
博客专家认证
2011-10-12 07:59:33
参考:http://msdn.microsoft.com/zh-cn/library/ms191433(v=SQL.90).aspx
里面说:事务日志增长时,使用填充到满的策略而不是按比例填充策略,先填充第一个日志文件,然后填充第二个,依此类推。

但是我实际测试情况好像不是这样,下面是测试语句:
CREATE DATABASE [aaa] ON  PRIMARY 
( NAME = N'aaa', FILENAME = N'E:\DataBase\aaa.mdf' , SIZE = 3072KB , MAXSIZE = UNLIMITED, FILEGROWTH = 1024KB )
LOG ON
( NAME = N'aaa_log', FILENAME = N'E:\DataBase\aaa_log.ldf' , SIZE = 2304KB , MAXSIZE = 5120KB , FILEGROWTH = 10%), -- 限制最大5M
( NAME = N'aaa_log2', FILENAME = N'E:\DataBase\aaa_log2.ldf' , SIZE = 2304KB , MAXSIZE = 2048GB , FILEGROWTH = 10%)
GO
USE aaa
GO
CREATE TABLE aaa(a VARCHAR(800))
GO

DECLARE @ix INT
SET @ix=0
WHILE @ix<6000
BEGIN
INSERT INTO aaa VALUES(CAST(@ix AS VARCHAR) + 'asdfasdfas11111fdasdfasdf')
SET @ix = @ix+1
END
go
DELETE FROM aaa
GO
-- 查看数据库日志情况
select groupid, SIZE, [MAXSIZE], growth, [STATUS], [name], [filename] from sysfiles



在执行几次插入循环和Delete语句后,发现aaa_log.ldf和aaa_log2.ldf都有增长,难道微软的描述和实际相矛盾吗?求解
...全文
136 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
billpu 2011-10-13
  • 打赏
  • 举报
回复
说的日志文件确实是虚拟日志文件vlf,先填充第一个log文件的vlf 然后填到满,然后填充第二个log填到满,然后又回到第一个log文件,开始扩充(假设已经没有空闲的vlf),继续填满,然后填充到第二个log开始扩充填满...
游北亮 2011-10-13
  • 打赏
  • 举报
回复
了解,那是我理解错了,感谢您的答复

[Quote=引用 13 楼 ap0405140 的回复:]
"因为这是台主库,需要发送订阅,所以不能改成简单模式"

--> 做复制(replication)跟数据库恢复模式没影响的.
[/Quote]
游北亮 2011-10-13
  • 打赏
  • 举报
回复
这个联机文档,Sql2000,2005,2008
都是一样的表述,我的测试是在Sql2005上测试的

[Quote=引用 12 楼 perfectaction 的回复:]
Mark
联机文档未标明是VLF,不过日志文件同步增长是合理的。
怀疑联机文档表述有误,谁有sql 2k 可以测试下
[/Quote]
唐诗三百首 2011-10-13
  • 打赏
  • 举报
回复
"因为这是台主库,需要发送订阅,所以不能改成简单模式"

--> 做复制(replication)跟数据库恢复模式没影响的.
nzperfect 2011-10-13
  • 打赏
  • 举报
回复
Mark
联机文档未标明是VLF,不过日志文件同步增长是合理的。
怀疑联机文档表述有误,谁有sql 2k 可以测试下
游北亮 2011-10-13
  • 打赏
  • 举报
回复
我也测试了,3个log文件,一样是同步增长的,并不是循环写入

[Quote=引用 2 楼 qianjin036a 的回复:]
楼主也太狠了吧,MAXSIZE = 2048GB ?
楼主说的循环处理的方式,是要等日志文件都到达 MAXSIZE 以后的事情,在达到最大限制之前,应该不是按循环写入的方式,另外,我测试过,要按循环写入,得至少有三个日志文件才行.
[/Quote]
游北亮 2011-10-13
  • 打赏
  • 举报
回复
谢谢,因为这是台主库,需要发送订阅,所以不能改成简单模式
看来还是定时备份吧,再次感谢

[Quote=引用 9 楼 ap0405140 的回复:]
"是这样的,新加了一块ssd硬盘,担心上面的日志文件太大,造成爆满,所以希望ssd硬盘上的日志文件限制大小,达到限制后,再把日志写入到普通硬盘上"

--> 定时备份日志,即可自动截断及日志空间复用,不建议建多一个日志文件.
或者,最简单的办法,把数据库改为简单恢复模式,你自己看着办吧.
[/Quote]
唐诗三百首 2011-10-12
  • 打赏
  • 举报
回复
"是这样的,新加了一块ssd硬盘,担心上面的日志文件太大,造成爆满,所以希望ssd硬盘上的日志文件限制大小,达到限制后,再把日志写入到普通硬盘上"

--> 定时备份日志,即可自动截断及日志空间复用,不建议建多一个日志文件.
或者,最简单的办法,把数据库改为简单恢复模式,你自己看着办吧.
misterliwei 2011-10-12
  • 打赏
  • 举报
回复
日志文件增长我是这么理解的:当到达日志文件尾部时,SQL SERVER检查是否有另外的日志文件的VLF为非活动的,若有就使用这个日志文件的VLF。若没有则增加当前日志文件的VLF。

楼主的要求,我觉得最好是在SSD上创建日志文件,然后定期备份日志至普通磁盘。
thinkibm 2011-10-12
  • 打赏
  • 举报
回复
根据你的答复,搜索了一下,未找到可以达到我的目的的方法
麻烦问下,你那边有没有类似的解决方案呢?


[Quote=引用楼主 youbl 的回复:]
参考:http://msdn.microsoft.com/zh-cn/library/ms191433(v=SQL.90).aspx
里面说:事务日志增长时,使用填充到满的策略而不是按比例填充策略,先填充第一个日志文件,然后填充第二个,依此类推。

但是我实际测试情况好像不是这样,下面是测试语句:

SQL code
CREATE DATABASE [aaa] ON PRIMARY ……
[/Quote]
游北亮 2011-10-12
  • 打赏
  • 举报
回复
呵呵,我是用SSMS创建的数据库,然后获取sql,测试用,无所谓了

你说的创建3个物理日志文件,就可以自动循环写入吗?还有没有特殊配置呢?

[Quote=引用 2 楼 qianjin036a 的回复:]
楼主也太狠了吧,MAXSIZE = 2048GB ?
楼主说的循环处理的方式,是要等日志文件都到达 MAXSIZE 以后的事情,在达到最大限制之前,应该不是按循环写入的方式,另外,我测试过,要按循环写入,得至少有三个日志文件才行.
[/Quote]
游北亮 2011-10-12
  • 打赏
  • 举报
回复
哦,应该是如何创建第二个虚拟日志文件呢?
游北亮 2011-10-12
  • 打赏
  • 举报
回复
哦,那能否创建第二个逻辑日志文件呢?

是这样的,新加了一块ssd硬盘,担心上面的日志文件太大,造成爆满,所以希望ssd硬盘上的日志文件限制大小,达到限制后,再把日志写入到普通硬盘上


[Quote=引用 1 楼 ap0405140 的回复:]
多個日志文件的存儲策略,采用循環寫的方式,不論有多少個物理日志文件,SQL Server會統一管理并使用這些日志文件的空間,形成一個邏輯日志文件.

楼主所说的"先填充第一个日志文件,然后填充第二个,..."是日志文件里的虚拟日志文件(VLF)的使用方式.
可以用DBCC LOGINFO('[数据库名]')查看.
[/Quote]
--小F-- 2011-10-12
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 ap0405140 的回复:]
多個日志文件的存儲策略,采用循環寫的方式,不論有多少個物理日志文件,SQL Server會統一管理并使用這些日志文件的空間,形成一個邏輯日志文件.

楼主所说的"先填充第一个日志文件,然后填充第二个,..."是日志文件里的虚拟日志文件(VLF)的使用方式.
可以用DBCC LOGINFO('[数据库名]')查看.
[/Quote]
学习
-晴天 2011-10-12
  • 打赏
  • 举报
回复
楼主也太狠了吧,MAXSIZE = 2048GB ?
楼主说的循环处理的方式,是要等日志文件都到达 MAXSIZE 以后的事情,在达到最大限制之前,应该不是按循环写入的方式,另外,我测试过,要按循环写入,得至少有三个日志文件才行.
唐诗三百首 2011-10-12
  • 打赏
  • 举报
回复
多個日志文件的存儲策略,采用循環寫的方式,不論有多少個物理日志文件,SQL Server會統一管理并使用這些日志文件的空間,形成一個邏輯日志文件.

楼主所说的"先填充第一个日志文件,然后填充第二个,..."是日志文件里的虚拟日志文件(VLF)的使用方式.
可以用DBCC LOGINFO('[数据库名]')查看.

22,207

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧