当内存512遇上Access数据库600M,IO磁盘受伤了

服务器内存就512M,Access数据库(文章库)600多M,结果竟然就是IO受伤了。 早些年写 秋色园技术原理解析 系列,园里不少看过的帅歌,应该有点印象,从开始到现在,还是铁打的Access数据库。 虽然本人目前对Access恨入之骨,皆因 囊中羞涩,暂时不得不与之 同

服务器内存就512M,Access数据库(文章库)600多M,结果竟然就是IO受伤了。

早些年写秋色园技术原理解析系列,园里不少看过的帅歌,应该有点印象,从开始到现在,还是铁打的Access数据库。

虽然本人目前对Access恨入之骨,皆因囊中羞涩,暂时不得不与之同流合污。

忙碌微博粉丝精灵几个月来,秋色园一直运行正常,除了远程界面都变的很卡之外,基本上也没发现什么异常。

然而这个隐藏多年的内伤,如果不是那一天,客服把我服务器给关机了,估计到现在也没察觉,让IO受伤了好几个月了。

以下是故事的过程,有兴趣扫一眼,没兴趣直接拉到后面看结果:

就在那天,服务器让客服给直接关机了,理由是:CPU持续三小时100%,IO磁盘每秒读写50M,为不影响其它用户,直接给关了,让处理完再开机。

前面的CPU百分百是忽悠我的,因为你对客户说,因磁盘读写问题而关机,比较悬,如果说CPU满了而关机,都直观容易理解。

不过,因为刚才我还在看着服务器,CPU正常,根本不可能持续三小时百分”(当然了,偶尔应用程序池刚重启时,瞬时十来秒上到100%这个我知道,由于是短暂的,我一直没查明真相)我让客服给我截图,并恢复开机,我说CPU我会处理。

神奇的客服,给我截了另一张图,说我磁盘读写超标,让我处理完再开机。

从这图看的出来,这台服务器上至少挤了好几十个VPS用户了。

磁盘读写超标,是件很悬的事件,首先这超标的标准是什么?硬盘每秒读写速率达到多少才算超标?这超标又怎么影响到其它用户了?

当然了,谁家的网站不经常读写IO呢,这VPS就这么丁点内存,肯定重点就会转发到硬盘去了,习惯性思维以为是自己的程序问题,因为实在平时对磁盘读写没怎么在意,好像开发这么久,还没怎么和磁盘的负载扯上关系,这一块是一片空白。

于是,当开机后,用户一张一张的截图,说让我处理,着实把我弄急了:

没办法,我只好暂时把秋色园网站停止,说我要去吃饭了(八九点还不让人吃饭),然后问客服,降下来没有,客服说:我看到依然还是有问题 。 我先断开你的网络把,你吃完饭后回来 联系我处理。

我急了,肯定不能断开网络了,毕竟微博粉丝精灵服务还在运行,没办法,我下了下手,把粉丝精灵服务也给关了,问,现在正常了没有,客服又来一张图说:现在正常一些了 0.59是1分钟内的负载,1.68是五分钟内的平均负载

我特纠结,服务器一共就两网站,这全都关了,你只是正常了点,靠,直接把远程密码发给对方,你去折腾,我去吃饭。

快速吃完回来问客服情况怎样,对方三弄几弄,说正常了,我问弄什么了,对方说:“App_Data 这个目录 我随便改了名字。 除此之外 我都没有动 ”。

这目录下就放着数据库,我说难道和数据库有关?里面有一个数据库600多M(文章表)。

客服说可能,但不确定。

于是我把秋色园解析解到其它地方,然后再开启网站,自己访问一下,才刚开,客服马上问我干啥了,负载又上去了,弄的我只好网站又停了,停了还没用,客服一样叫高,接着又来一张图:

说实在,我都不明白这些代表啥意,于是问了,这些怎么看,对方回答“高于 1 即资源超载,三个数字1分钟,5分钟,10分钟内的系统平均负载”。

我纠结了:不占cpu,不占内存,不占带宽,如果磁盘也不占,这网站怎么折腾?

还有这磁盘,是读高,还是写高?

对方答复“只能看一个系统分析值 ,就是VPS虚拟化自带的分析图”。

接下来,我又把数据库的文件夹给改名了,看似得到的回复是正常了,瞬时好似问题的根源,就在于600多M的Access数据库上。

结果:

后续的问题,就是把它分成了10个库,用的CYQ.DBImport在远程直接操作分库,改了下算法,终于,客服不再叫了,远程操作变流畅了。

多年隐藏的内伤表现:

当Access的数据库大小超过内存的大小时,相关问题主要表现在磁盘读写超标(这个正常没法知道)。

内伤一:界面影响特卡(可能会以为是CPU或内存问题)。

内伤二:还会影响到其它VPS用户(这个更不可能得知了)。

三:同时应用程序池重启变慢(会误以为是程序写的不好)。

内伤四:内存占用明显上去了(误以为缓存了Html导致的)。

为此,Access虽然上限是2G,具体还得看你内存有多少,通常硬件不佳内存小才用Access,因此在使用时,量力而大!!!