DOIT多易网 | 技术宽频 | 存储在线 | 服务器在线 | 软件在线 | 安全在线
【活动】欢迎莅临HDS虚拟大会 赢取精美礼品学习并下载IBM Web 2.0开发及协作工具【博客推荐】如何全面有效的验证理论解决方案(王纪奎)
返回列表 回复 发帖

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

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

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

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

这个问题是不是确实存在,也确实会丢失数据?
点击进入敝人博客
初学者的捷径,国人原创,通俗易懂-《大话存储》点此:够买/勘误
认真学习ing
跟你说,俺口碑贼好。
再加上个论题,还是以前没有讨论清楚的,就是磁盘的cache是不是都是开启的,有什么工具可以让他关闭或者开启?开启了是wb还是wt模式,实际生产中到底是什么情况。
点击进入敝人博客
初学者的捷径,国人原创,通俗易懂-《大话存储》点此:够买/勘误
原帖由 冬瓜头 于 2007-9-7 11:23 发表
再加上个论题,还是以前没有讨论清楚的,就是磁盘的cache是不是都是开启的,有什么工具可以让他关闭或者开启?开启了是wb还是wt模式,实际生产中到底是什么情况。
磁盘cache是开启的,为了加快速度嘛。你说的wb和wt是控制器。这个是可以设置的。提高性能貌似用wb,双机的时候为了避免宕机时候数据没写道硬盘中,设置成wt。只知道这么多了。高手露头吧。
跟你说,俺口碑贼好。
我说的wb和wt指的是磁盘的cache。
如果要开启磁盘cache,则只有用wt才不会丢失数据。

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

[ 本帖最后由 冬瓜头 于 2007-9-7 15:09 编辑 ]
点击进入敝人博客
初学者的捷径,国人原创,通俗易懂-《大话存储》点此:够买/勘误
听18mo人说ibm出厂的磁盘cache缺省是关闭的,说是阵列控制器中有cache。
原帖由 冬瓜头 于 2007-9-7 11:14 发表
如果遇到ntfs这种非日志型fs,而且数据库利用了fs的cache,那么即使数据库这一层能保证一致性,那么fs这一层,不能保证一致性,会造成数据丢失。那么这样就会扰乱数据库的一致性,如果是我存了100w,稍后恰好系统死机 ...
你说的是极端的极端,况且你这个个交易有多少i/o,最多几K吧,会直接写入数据库或硬盘吧
不管是否是极端,只要存在,就必须考虑。
正式因为就几K的io,所以cache不会改变多少,所以不会引发flush,更应该注意,更容易造成不一致,如果io size很大,反而不怕了。

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

[ 本帖最后由 冬瓜头 于 2007-9-7 15:39 编辑 ]
点击进入敝人博客
初学者的捷径,国人原创,通俗易懂-《大话存储》点此:够买/勘误
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的兄弟不能写个恶意程序把大机搞死,恐怕他学艺未佳。
原帖由 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、呵呵,这就是另外的事了。
点击进入敝人博客
初学者的捷径,国人原创,通俗易懂-《大话存储》点此:够买/勘误
返回列表