发新话题
打印

讨论,数据库真的只靠日志就能绝对保证一致性么?

本主题由 doit 于 2007-9-10 19:13 设置高亮

讨论,数据库真的只靠日志就能绝对保证一致性么?

如果遇到ntfs这种非日志型fs,而且数据库利用了fs的cache,那么即使数据库这一层能保证一致性,那么fs这一层,不能保证一致性,会造成数据丢失。那么这样就会扰乱数据库的一致性,如果是我存了100w,稍后恰好系统死机了,强行重启,那么就会丢失数据,数据库可能认为数据已经flush到硬盘,事务提交成功并且flush成功,但实际是在fs的cache中,那么这100w的记录根本就不存在。 请大家展开讨论。

问过IBM lab的一哥们,他的回答是:银行这种关键业务,都用大机,大机不会死机。

这个问题是不是确实存在,也确实会丢失数据?
http://space.doit.com.cn/35700
网络存储界的个性大作《大话存储-网络存储系统原理精解与最佳实践》,将于8月20日由清华大学出版社隆重出版!敬请关注!作者:冬瓜头

TOP

认真学习ing
跟你说,俺口碑贼好。

TOP

再加上个论题,还是以前没有讨论清楚的,就是磁盘的cache是不是都是开启的,有什么工具可以让他关闭或者开启?开启了是wb还是wt模式,实际生产中到底是什么情况。
http://space.doit.com.cn/35700
网络存储界的个性大作《大话存储-网络存储系统原理精解与最佳实践》,将于8月20日由清华大学出版社隆重出版!敬请关注!作者:冬瓜头

TOP

引用:
原帖由 冬瓜头 于 2007-9-7 11:23 发表
再加上个论题,还是以前没有讨论清楚的,就是磁盘的cache是不是都是开启的,有什么工具可以让他关闭或者开启?开启了是wb还是wt模式,实际生产中到底是什么情况。
磁盘cache是开启的,为了加快速度嘛。你说的wb和wt是控制器。这个是可以设置的。提高性能貌似用wb,双机的时候为了避免宕机时候数据没写道硬盘中,设置成wt。只知道这么多了。高手露头吧。
跟你说,俺口碑贼好。

TOP

我说的wb和wt指的是磁盘的cache。
如果要开启磁盘cache,则只有用wt才不会丢失数据。

其实这个论题,就是要讨论,只有端到端的一致性,才算真正的一致性,路径上cache太多,只在dbms的cache保证了一致性,如果fs没有保证,设备驱动queue没有保证,存储控制器cache没有保证,磁盘cache没有保证,那么这能算一致么?

[ 本帖最后由 冬瓜头 于 2007-9-7 15:09 编辑 ]
http://space.doit.com.cn/35700
网络存储界的个性大作《大话存储-网络存储系统原理精解与最佳实践》,将于8月20日由清华大学出版社隆重出版!敬请关注!作者:冬瓜头

TOP

听18mo人说ibm出厂的磁盘cache缺省是关闭的,说是阵列控制器中有cache。

TOP

引用:
原帖由 冬瓜头 于 2007-9-7 11:14 发表
如果遇到ntfs这种非日志型fs,而且数据库利用了fs的cache,那么即使数据库这一层能保证一致性,那么fs这一层,不能保证一致性,会造成数据丢失。那么这样就会扰乱数据库的一致性,如果是我存了100w,稍后恰好系统死机 ...
你说的是极端的极端,况且你这个个交易有多少i/o,最多几K吧,会直接写入数据库或硬盘吧

TOP

不管是否是极端,只要存在,就必须考虑。
正式因为就几K的io,所以cache不会改变多少,所以不会引发flush,更应该注意,更容易造成不一致,如果io size很大,反而不怕了。

软件测试工程师所想到的很多都是极端情况下的情况,这样才能测出bug,如果只考虑一般情况,不是合格的测试工程师。

[ 本帖最后由 冬瓜头 于 2007-9-7 15:39 编辑 ]
http://space.doit.com.cn/35700
网络存储界的个性大作《大话存储-网络存储系统原理精解与最佳实践》,将于8月20日由清华大学出版社隆重出版!敬请关注!作者:冬瓜头

TOP

1. 文件系统buffer对一致性的影响不存在,因为:

On UNIX, Oracle Database uses the O_SYNC flag to bypass the file system buffer cache. The flag name depends on the UNIX port.
On Windows, Oracle Database bypasses the file system buffer cache completely.

2. Oracle的LGWR, DBWn, CKPT进程会进行协调,保证数据在写入磁盘之前,日志已经写入。Oracle有完善的机制保证数据的一致性。你可以到Oracle网站上下一些文档看看。

3. 数据一致性和不丢数据是两个概念。

4. 大机不是不会死机,只是一般情况下很难死机。如果你在IBM Lab的兄弟不能写个恶意程序把大机搞死,恐怕他学艺未佳。

TOP

引用:
原帖由 thresh_freeman 于 2007-9-8 01:16 发表
1. 文件系统buffer对一致性的影响不存在,因为:
On UNIX, Oracle Database uses the O_SYNC flag to bypass the file system buffer cache. The flag name depends on the UNIX port.
On Windows, Oracle Database bypasses the file system buffer cache completely.
2. Oracle的LGWR, DBWn, CKPT进程会进行协调,保证数据在写入磁盘之前,日志已经写入。Oracle有完善的机制保证数据的一致性。你可以到Oracle网站上下一些文档看看。
3. 数据一致性和不丢数据是两个概念。
4. 大机不是不会死机,只是一般情况下很难死机。如果你在IBM Lab的兄弟不能写个恶意程序把大机搞死,恐怕他学艺未佳。
1、oracle我不了解其细节,但是db2我知道默认是use filesystem caching的,当然也可以关闭这个参数。那么就是说默许了使用fs的cache。
2、是的,这些都是数据层面的一致性解决方法,但是下层他很难知道os到底做了什么,怎么做的。
3、我说的数据丢失,是说db已经认为数据安全的写入了磁盘,一致了,但是实际上并没有写入,这难道不就是不一致么?

4、呵呵,这就是另外的事了。
http://space.doit.com.cn/35700
网络存储界的个性大作《大话存储-网络存储系统原理精解与最佳实践》,将于8月20日由清华大学出版社隆重出版!敬请关注!作者:冬瓜头

TOP

发新话题