+ -
当前位置:首页 → 问答吧 → 数据丢失

数据丢失

时间:2008-07-24

来源:互联网

我一客户,机器是IBM公司装的,sybase数据库是sybase公司安装的。前天突然说数据库无法启动。去检查后发现,10天前由于系统pagespace不够把syncd进程给杀了,一直没有人注意到这件事情,前天他在做sybase维护工作时,HA认定生产无响应,强行重启了生产,并切换到了备机。这时就惨了,N多的数据没写回文件,数据库就over了。检查后发现以下几个问题。
1、pagespace设的太小,60G的内存只设了16G的pagespace。造成了pagespace用完。由于HA在那个时间点切换,应当是发生pagespace满时发生的时间很短,属于系统正常的pageout。
2、没有设置nokillroot ,使的root用户的进程被kill , 那时候你就算杀sybase的服务进程也好点。
3、sybase使用文件系统,并且未打开dsync参数,什么东西都写在操作系统的内存里,都没有真的写在硬盘上。
4、客户使用时也没注意,本来打几个sync就可以解决这个问题。不过这件事情是不能怪客户的。一般客户连小型机都很少登录的。
不过发生这种问题可能性很小,引以为戒吧。

作者: tyrone.dev   发布时间: 2008-07-24

LS的详细说说第3条。

作者: 小菜鸟_2008   发布时间: 2008-07-24

AIX文件系统利用文件页面来缓存文件内容。如果你在打开文件时未使用O_DSYNC标志,调用write函数时,数据并不真正写在硬盘里,而是将文件页面修改,并置页面修改标记,只有当你调用sync系统命令,或者sync()系统函数,或者文件页面被调页时才会真正写到文件中去。所以有人做测试时会做出文件系统比raw deivce要快的结论。sybase里sp_deviceattr 可以打开这个选项,这样每次调用write函数才会真正的写入文件,要不小型机,UPS突然断电就会引起数据丢失。很有可能会造成数据库打不开的情况。

作者: tyrone.dev   发布时间: 2008-07-24

这个与应用程序有关还是sybase的配置有关?
另外sp_deviceattr 后面要跟什么参数?

[ 本帖最后由 小菜鸟_2008 于 2008-7-24 08:57 编辑 ]

作者: 小菜鸟_2008   发布时间: 2008-07-24

与sybase配置有关系,default是on的,但把他关了之后可以提高数据写性能(只写内存当然快了) 。

作者: tyrone.dev   发布时间: 2008-07-24

是哪个选项?

作者: 小菜鸟_2008   发布时间: 2008-07-24

[quote]原帖由 tyrone.dev 于 2008-7-24 08:58 发表
与sybase配置有关系,default是on的,但把他关了之后可以提高数据写性能(只写内存当然快了) 。 [/quote

sybase的人改为off了?
那也没错呀,写速度快了呀.
16G的PG也不见得就小了吧,关键得看你的应用来决定,
系统上线后就没有注意观察看看系统的性能等运行状况吗?

什么机器配这么高内存,有钱啊

作者: legend   发布时间: 2008-07-24

sybase的人改成OFF?找死啊,这个主要责任应该怪安装SYBASE的人,把这个改成OFF,即使PGSP是够的,SYNCD也没停,只要存在SYBASE意外崩溃(这个可能性不是很小)的情况,一定会完蛋。

作者: larryh   发布时间: 2008-07-24

60G 内存,配16G的PG应当差不多了,dsync被关掉太不应该了

作者: blackcat   发布时间: 2008-07-24

原帖由 tyrone.dev 于 2008-7-24 08:15 发表
HA认定生产无响应,强行重启了生产,并切换到了备机...

“强行重启了生产”是什么意思?用shutdown命令的话,会自动调用sync的。

作者: beginner-bj   发布时间: 2008-07-24

是由于node non-response然后系统就halting了,不是shutdown关的,呵呵

作者: tyrone.dev   发布时间: 2008-07-24

那就是黄老大说的啦,主要是SYBASE DBA的问题。

作者: beginner-bj   发布时间: 2008-07-24

原帖由 larryh 于 2008-7-24 10:17 发表
sybase的人改成OFF?找死啊,这个主要责任应该怪安装SYBASE的人,把这个改成OFF,即使PGSP是够的,SYNCD也没停,只要存在SYBASE意外崩溃(这个可能性不是很小)的情况,一定会完蛋。

sybase 意外崩溃的可能性并不大,我们有70个sybase数据库,运行了5年,但还没有发生过一次的意外崩溃。就算有意外崩溃,有syncd还是会将数据写入文件系统的。只要不是强行关机的,关了dsync标志也没有问题,比如sybase运行时你用kill -9一般还是能够起来的。这个问题最大的原因是PGSP设得不够,而且过了十几天又被HA给reboot机器了。应当是IBM配置的责任大一点吧。pagespace的设置是和内存最大值,有60G内存,你就应当认为在极限情况下需要全部换页。而不应当只想正常情况下够不够,因为你根本不知道客户会出什么问题。

作者: tyrone.dev   发布时间: 2008-07-24

PAGING SPACE的设置,和内存量其实没什么关系的,看样子你连它是干什么用的,什么情况下可能用到还没想清楚。
它又不是dump设备,你把他当成dump设备看了。概念错误。

作者: 老农   发布时间: 2008-07-24

当然还可以PIN住sybase使用的内存,这样pagespace就可以少用很多了,现在也没法管责任在哪里,反正客户倒霉,做了1天1夜的恢复工作。还有刚才在HA看到High Water Mark/Low water mark 是 0 , 0 这东西都会忘了改。PF!

作者: tyrone.dev   发布时间: 2008-07-24

呵呵,HA乱做的人多了。

一般看到这样的,就知道这系统可能的隐患多了去了。

作者: 老农   发布时间: 2008-07-24

原帖由 老农 于 2008-7-24 11:45 发表
PAGING SPACE的设置,和内存量其实没什么关系的,看样子你连它是干什么用的,什么情况下可能用到还没想清楚。
它又不是dump设备,你把他当成dump设备看了。概念错误。

没有关系?那我有60G内存,sybase用了55G(不是allocate max memory),再启动一个sybase服务用30G内存,配个10G的pagespace,你看看有没有问题。如果我只有30G的内存,这种情况我连sybase都不能启动起来。我当然知道pagespace实际应用程序使用的非PIN的计算内存有关,但象这种情况下。配大一点就不会出现这个问题,你能明确的知道客户的程序不会发生乱用内存的现象。

作者: tyrone.dev   发布时间: 2008-07-24

又一个,还好,pin内存没有超过。。。

这么用sybase, pSeries, aix ...早死早投胎啦

作者: orian   发布时间: 2008-07-24

数据库配置参数,要根据物理内存来;而不是根据数据库配置参数,用PAGEING SPACE来弥补物理内存的不足啊。

作者: beginner-bj   发布时间: 2008-07-24

客户并没有这么做,我只是举个例子,客户是60G内存,sybase配了51G内存,但是没有用pin内存 pagespace 16G,有一天正常运行时pagespace不够了。到现在都搞不懂当时他做了什么操作会使得pagespace不够。怎么算pagespace都是够用的。除非他当时搞了个很费内存的程序在跑。但这是生产系统,一般也不会去做这件事。

作者: tyrone.dev   发布时间: 2008-07-24

我想有可能是他maxperm%没改,而且又是用文件存储数据,sybase的内存又没有PIN住,然后每天又做dump database的,文件页面换页计数值超过了计算内存的页面计数,VMM换页时去换了sybase的共享内存里的数据。这样才有可能pagespace会不够。

作者: tyrone.dev   发布时间: 2008-07-24

问题是,你举的列子的基础就是错误的。

ORAIN说的没错,早死早投胎

作者: 老农   发布时间: 2008-07-24

错误和不合理是两回事,我提出的就是针对你说的pagespace与内存无关理由,只要你的pagespace设得不够大,总可以找到方法使你的pagespace不够,基础错误?难道我的举例无法运行,你可以试一下,保证能运行起来的。不要认为自已想的都是对的。当然你可以说正常情况下不会出现这种事情,这我当然承认,而且我也不会这么干。只要你不是使用早页面空间分配总会有pagespace用光的危险存在,何况机器不是我装的。正常的情况下,应当是管理员每过一段时间去检查一下pagespace够不够才行。或者使用早页面空间分配方式。但那时候pagespace就需要配的很大了。要么就是数据库采用PIN内存。反正总有办法解决这个问题。而且sysdump也不用和内存配的一样大的。

作者: tyrone.dev   发布时间: 2008-07-24

还真有这么迂的。。。。。“不要认为自已想的都是对的”这句话用过在自己身上吗?

理你都多余,半桶水还瞎晃荡,知道一点就以为啥都明白了。

懒得教你了,你爱怎么着怎么着吧,早死早投胎。

作者: 老农   发布时间: 2008-07-24

你除了最终骂骂人之外,还会什么,难道你说的都是对的?你以为你是谁,AIX的设计者?还是AIX里有什么东西是你写的,我并不需要你教什么,整个贴子上我都没有说要别人教我这回事。从你的贴子我怎么觉得AIX好象你一个写的一样。垃级一个

作者: tyrone.dev   发布时间: 2008-07-24

下面你就会打我IP的地址是哪里人呢,你的行为大家都知道。

作者: tyrone.dev   发布时间: 2008-07-24

哈哈,是垃圾总是要发臭的,大家可以看到垃圾是怎么发臭的了吧?

我不是AIX的设计者又怎么了?至少我敢说我比你懂得多。

你这样的垃圾我不欢迎,爱怎么死怎么死去。

给你点面子,我不说出你是哪里的,你不敢被别人知道你是谁的,呵呵,小人都这样。

我的行为大家当然都知道,我做事就这样正大光明,这就是你们做不到而害怕的,想诋毁也只能放冷箭。

作者: 老农   发布时间: 2008-07-24

好心当成驴肝肺,你以为谁想教你呢?滚蛋吧,找你自己的地方玩去,这里不欢迎垃圾。

作者: 老农   发布时间: 2008-07-24

真TMD冤,LZ的几个问题,基本上我都回答过,应该说没有一个错误的解答。

这种人,教他干啥?除了崇洋媚外还会干什么?

作者: 老农   发布时间: 2008-07-24

我有提问吗?我只是把发生的事情描述一下而已,你是不是小学没有毕业!不理解意思,还是自我感觉太好,以为发贴的都在问你。我只是提出了一点pagespace设得不够大,就有可能造成pagespace用光,而最大值与物理内存有关,这难道有错吗?如果你不承认这点我也没有办法。你懂得比我多?请问你开发过什么软件?

作者: tyrone.dev   发布时间: 2008-07-24

我也觉得是搂主的基础没打好。

作者: vlinx   发布时间: 2008-07-24

我怕挨骂 虽然我也很垃圾。。。

我说得早死早投胎是机器早点死,然后早点明白不能这么玩的意思哦

如果sybase占的内存比较多,然后再pin到物理内存,风险更大,死得更快。现代的Unix和以前的前提条件不太一样,以前unix大部分是给学术用的,设计之初希望更多人使用,而且用户大都是终端、个人用户,分时性非常强,所以用paging space提高内存的利用效率。

现在的Unix都是用在critical的环境下,特别是楼主的情况,可能是什么银行的core banking数据库,都是大家的血汗钱啊!性能、可靠性要求都非常高,我们已经容忍了去银行和几十个老大妈一起排队看着他们去交35.24元的电话费,如果再容忍你提款的时候,告诉你,系统坏了,下午甚至明天再来,估计谁都得砸柜台,更何况数据丢了!

既然有可靠性、性能要求,数据库占用内存不能超过80%那个内存claim的上限是必需的,而不是优化的需求。如果pin住,数据库内存这个大头不能交换,会更多地用其他的部分,系统的和连接程序的。由于可交换的部分比较少,交换必然更频繁,性能肯定一塌糊涂。那么多内存白用了。也就是平时就会发生很频繁的pi/po,性能不好。而一旦pgsp用尽(显然可能性更大),crash是必然。即使数据库能够roll back,不丢数据,down机也是不可接受的。

如果楼主在这里有可能担任何一点责任,还是早点知会大家,免得发生问题之后一同挨骂。当然,如果没有任何责任,也没那么热心,倒是可以看热闹。这也就是我说得早死早投胎啦,让每个人早点知道。

作者: orian   发布时间: 2008-07-24

搂主可以参靠一下这本书 http://www-03.ibm.com/servers/en ... on/wp/b78a/b78a.pdf, 第四页就指出了你的错误想法。

作者: vlinx   发布时间: 2008-07-24

原帖由 tyrone.dev 于 2008-7-24 19:51 发表
我有提问吗?我只是把发生的事情描述一下而已,你是不是小学没有毕业!不理解意思,还是自我感觉太好,以为发贴的都在问你。我只是提出了一点pagespace设得不够大,就有可能造成pagespace用光,而最大值与物理内 ...

是我不理解还是你自己不理解啊?那请问你发帖子是什么意思?你不知道论坛是干什么用的还胡说什么?

我可以肯定地告诉你,你的确错了,不信拉倒。

我就不是搞软件开发的,搞软件开发的我很佩服,这没什么说的。
但你总不能因为懂软件开发就觉得别的你也不应该听别人的了吧?
我说的是我在AIX方面,请看清楚了,这里是AIX版,主要是系统管理方面的。
搞软件开发的我见多了,不可能要求他们熟悉系统管理的。

作者: 老农   发布时间: 2008-07-24

偶每天的工作之一就是说50个谢谢.不管是在电话中.还是邮件中,还是面对面.

作者: 小猪   发布时间: 2008-07-24

原帖由 orian 于 2008-7-24 19:55 发表
我怕挨骂 虽然我也很垃圾。。。

我说得早死早投胎是机器早点死,然后早点明白不能这么玩的意思哦

如果sybase占的内存比较多,然后再pin到物理内存,风险更大,死得更快。现代的Unix和以前的前 ...

第一机器是IBM与Sybase公司联合装的,和我一点关系都没有,我写出来就怕以后有可能会遇到同样的问题。由于客户有60G物理内存,只用51G给sybase,pagespace是16G,我想本来谁都会说是一个很合理的数字。到现在关键是出了问题,pin处物理内存后,这部分内存是不会参与到内存交换上去,那我最多可能只需要配置9*2G的pagespace就够了。因为客户只有sybase的业务在跑,目前最不清楚的是为什么会使用那么多的pagespace,因为有9G内存给操作系统用,一般操作系统也不需要这么多的内存。目前来看是由于不知道什么原因造成了内存使用太多。把操作系统的pagespace用光了造成了操作系统kill了syncd进程。造成了数据丢失,但对客户而言你说是sybase的配置问题,也很难说,他最多只是dsync没有打开,但没打开并不是错,比如你写了一段程序open(filepath , "r" ) ; 然后不断调用write(),最后数据丢失了,并不能说你的程序有问题吧。从这个来看,能说的也就是IBM的pagespace设置的太小了,如果再大一点,也许pagespace不会用完,就算系统慢点,但数据还是不会丢失,我想慢和丢失之间客户会做出正确的选择。更何况pagespace配多一点,对系统来说也没什么大的影响,最多多占一点硬盘空间,但至少可以明确责任问题。数据库运行的慢是数据库的问题,但无论如何不应当会产生数据丢失这种问题。现在sybase的内存没有pin,那他可以参与到交换的高达51G内存,就算只交换4分之一,也需要20G的pagespace。但pin处之后,有一点pagespace是够用的,还有9G的物理内存可以用于文件页面与计算页面。从这点来说,我并不是说要把pagespace配的超大,pagespace是只要够用就行,但如果发生了我所说的情况后就很难处理,最终还是客户倒霉。整个问题的关键是要找出为什么会使用了如此大的内存9G的内存,一般单独做服务器都够了。但没有找到原因之前,要么pin处内存,要么把pagespace扩大,还有就是减少sybase的内存。除此之外好象没有什么别的办法。现在sybase与IBM一起给出的结论是由于网络问题造成了很多的客户端不正常关闭,而内存资源未释放,所以用了很多的内存,造成pagespace不够。这个结论有点问题,如果客户端非正常关闭都会造成内存占用过多,那应当所有的sybase都出这个问题了,无论怎么样数据丢失对操作系统而言是不应当产生的。

作者: tyrone.dev   发布时间: 2008-07-24

热门下载

更多