那样会太招人厌恶。中国的传统观念是不允许性感的女人成为女一号的

mnesia在频繁操作数据的过程可能会报错:** WARNING ** Mnesia is overloaded: {dump_log, write_threshold},可以看出,mnesia应该是过载了。这个警告在mnesia dump操作会发生这个问题,表类型为disc_only_copies 、disc_copies都可能会发生。

如何重现这个问题,例子的场景是多个进程同时在不断地mnesia:dirty_write/2

mnesia过载分析

1、抛出警告是在mnesia 增加dump worker的时候

mnesia_controller.erl

抛出警告是当Worker的#dump_log.opt_reply_to 未定义,仔细看这里的代码,这一步先检查了dumper_queue里的worker

所以,mnesia抛出过载警告有2个条件:

1)当worker的#dump_log.opt_reply_to 未定义

2)dumper_queue有相同操作(InitBy)的worker

2、那什么样的worker的#dump_log.opt_reply_to 未定义?

代码也在mnesia_controller.erl,这里add的worker的dump_log.opt_reply_to 未定义,而{async_dump_log, InitBy} 就是 mnesia:dirty_write/2的过程中调用mnesia_controller:async_dump_log(write_threshold) 产生的。

就是说,mnesia:dirty_write/2会触发异步dump操作,而只有异步的dump会导致mnesia抛出过载警告

3、看一下,mnesia什么时候会修正worker?

代码也在mnesia_controller.erl,在dump完成时,mnesia会修改worker的dump_log.opt_reply_to,然后移出dumper_queue

从上面可以得到结论,mnesia:dirty_write/2的操作是会触发异步dump操作,每次dump操作mnesia都会加到dumper_queue队列,mnesia通过检查dumper_queue是否存有相同操作的worker来检查是否过载

mnesia dump分析

mnesia数据存储实际上使用的是ets和dets,对于ram_copies类型的表使用ets;disc_copies表也使用ets,通过dump将数据保存到*.DCD(disc copy data)文件来持久化,中间可能会用*.DCL(disc copy log)转储;而disc_only_copies表使用的是dets,保存的文件为*.DAT。

表类型不同,mnesia记录数据的过程也不同,这里先讨论mnesia 记录disc_copies数据的过程。

1、mnesia 记录disc_copies数据有2个过程:

1)操作先记录到日志文件LATEST.LOG,然后再dump到*.DCD文件,同时清除LATEST.LOG

2)把修改同步到ets表中

2、mnesia disc_copies表数据dump过程

1)将日志文件LATEST.LOG重命名为PREVIOUS.LOG,然后再新建一个空的日志文件LATEST.LOG

2)分析PREVIOUS.LOG文件中的内容,将disc_copies的表实际修改写到*.DCL文件

3)比较*.DCL和*.DCD的大小,当filesize(*.DCL) > filesize(*.DCD) / dc_dump_limit,把*.DCL的记录存储到*.DCD文件中。dc_dump_limit默认为4,可以通过-mnesia dc_dump_limit Number设置

3、mnesia什么时候会dump

1)定时触发

mnesia启动后,mnesia_controller进程设置定时器,触发dump

mnesia_controller.erl:

默认值为180000,可以通过 -mnesia dump_log_time_threshold 300000 设置。

2)一定次数的操作后触发

每次数据操作,mnesia都会调用mnesia_log:log/1或者mnesia_log:slog/1进行日志记录,记录一次日志就将trans_log_writes_left的值减1,当这个值为0时,触发dump

mnesia_log.erl:

mnesia_dumper.erl :

默认值为1000,可以通过 -mnesia dump_log_write_threshold 50000 设置。

3)手动dump

手动调用 mnesia:dump_log/0  可以强制mnesia 完成dump,而这个dump是同步的

mnesia.erl:

mnesia_controller.erl:

解决mnesia过载

结合上面的分析再谈谈mnesia过载问题,dict_copies表写数据的时候,mnesia会写记录到ets表和日志文件LATEST.LOG,然后定时或定量dump做持久化。通过dump_log_write_threshold /dump_log_time_threshold 可以控制持久化的频率。mnesia在dump数据的时候,如果上一个worker进程dump没完成,就抛出过载警告。对此,dump_log_write_threshold的值表示mnesia经历过多少数据操作做一次持久化,dump_log_time_threshold的值表示mnesia多长时间做一次持久化。

这里再谈谈,为何同一时间只能有一个dumper?

dump的过程是先将日志文件重命名为PREVIOUS.LOG,然后分析PREVIOUS.LOG的数据做持久化,如果同时有第二个dump,将会替换掉第一个dump的PREVIOUS.LOG,影响第一个dump的持久化。那么,聪明的你就会这么想,为何不重命名为XXX.LOG,每次重命名都不同?事实上,如果同时有两个dumper,mnesia仅保证第二个dump能正常进行,放弃掉第一个dump的数据。所以,mnesia出现过载警告的时候,数据有可能会丢失。

这里,我做过了一项测试,修改mnesia的代码,将所有异步dump去掉,改用定时手动dump。还是原来的例子,发现第一个dump还没完成日志文件的分析和持久化,而新的日志文件已经增长到快2G。

dump的过程在文件io层面上其实是,一边在没有控制的追加数据,一边又在分析文件和有序写入,这个过程是在挑战磁盘io的读写极限啊。所以,就算现在有多个dumper,结果只会让cpu和硬盘更加抓狂。

另外,别太过依赖dump_log_write_threshold/dump_log_time_threshold这两个参数,改大了就有用吗?

这两个参数改大了,就是说,dump的频率就会降低,那么等待dump的数据就会更多,dump花的时间将会越长,到头来还是不能解决到问题。这两个参数的意义在于平缓写入速度,避免一时间大量数据写入造成数据丢失。但是,如果每时每刻都是高密度写入,硬盘也承受不了,一般到了这个局面,问题应该从数据缓冲和持久化的设计上去解决,而不是想着换一个数据库去解决。

这里有一点经验可以分享一下:

1、在mnesia没报过载错误的时候,不建议去改动,调节这些参数会影响持久化

2、可以多个进程读mnesia的数据,但写数据的过程只交给少数几个进程去完成

参考:

http://blog.csdn.net/mycwq/article/details/28660813

http://my.oschina.net/hncscwc/blog/161763

那样会太招人厌恶。中国的传统观念是不允许性感的女人成为女一号的,布布扣,bubuko.com

时间: 2024-10-16 19:48:25

那样会太招人厌恶。中国的传统观念是不允许性感的女人成为女一号的的相关文章

感悟、资产和幸福感

随着阅历的加深,我关注的事物和接受的知识也在不断地发生着变化.大学毕业已经四年了,过去的半年中,我接触了一些看似不连贯的信息,因为觉得它们有用,就把这些信息全部记在了脑子中.直到最近,才发现一个片段正在解释和说明着另一个片段,而当我把这些片段信息串起来思考的时候,忽然有了一种开朗的感觉.我有一个习惯,就是当我感悟到一些东西的时候就把它写下来,因为在记录的过程中,我也会有一个更加系统和清晰的思路,于是也就有了这篇文章. 片段一: 这是有一次开会时,我的老总跟我们说了这样一个事例:通常来说,医生是很

现代新文化运动

中国人都知道1919年5月4日,虽然那时候我们还没有出生. 1919年5月4日哪天,大学生们上街游行以抗议当时的中国政府 签订不平等条约.它标志着中国一个非常重要的时期-新文化运动. 胡适.陈独秀.鲁迅.钱玄同等一些受过西方教育(当时称为新式教育)的人发起的一次"反传统.反儒教.反文言"的文学革命运动. 那时候,文言文还是主流, 转到现代白话是从那时候由胡适.陈独秀.鲁迅 等推动的文学革命运动引发的.中国知识份子都在争论和探索前进的方式.中国的传统观念仍然是主流.我们应该向西方学习什么

中国传统文化不能丢失

过去三十几年的经济腾飞,使中国摆脱了一个多世纪以来西方强加在我们身上的耻辱.然而在奔跑着追赶西方的路上,我们也时常察觉和叹息:一些原本属于我们的珍贵的东西,不知什么时候被丢掉了,甚至已不能清楚描绘它的本来面貌.这种东西就叫做中国传统文化. 中国传统文化是居住在中国地域内的中华民族及其祖先所创造的.为中华民族世世代代所继承发展的.具有鲜明民族特色的.历史悠久.内涵博大精深.传统优良的文化.它是中华民族几千年文明的结晶!传统的精华不能丢,优秀的文化不能丢,优良的传统更应继承! 可悲!中国人拿着自己老

互联网传承中国传统文化,既是使命也是机遇

近年来,随着整个时代越来越现代化,西方文化已经迅速渗透到了中国的各个领域.一个最为明显的现象:现在的学生从小就开始疯狂学习英语,可是对于中国的传统文化诸如孔孟老庄之学却成为了收藏在图书馆的典籍了,已经鲜有学生开始学习中国的传统文化.当然刘旷本人并不是反对学习英语,但是从古到今传承了五千年的伟大中国传统文化却逐渐开始出现了断层. 对于西方先进的科学技术,中华民族需要学习.但是如果从文化的角度来看,以美国为代表的西方文化仅仅只有数百年,而中国的传统文化却已经传承了五千年,既然老祖宗把传统文化传承了五

中国风水说

南京在历史上是一座很悲催的城市  南京市中国所有肚的城市里面用名字用的最多的,   因为每换一次名字,就以为着一次大的时局的动荡  战乱  证券的更迭  老百姓的琉璃石锁   比如南京大屠杀 在历史上 类似的事件发生的太多了   用的名字比如  金陵 建业 建康 等   造成这一切根本原因是什么,是南京的风水问题,  风水太号,反而让他这么悲催 中国三条龙,最南边的一条龙了,走的很麻烦,从昆仑山发源地 ,经过青藏高原的外延,经过云南四川,经过广东广西的鼓岭,形成了大量的山脉,延伸出很多的支脉,一

透过达沃斯,看中国在互联网+时代如何超越美国

前几日,夏季达沃斯刚刚在大连落下帷幕,腾讯网作为中国首家与夏季达沃斯官方合作的网络媒体,其所主办的达沃斯数字颠覆者论坛引来了学者.企业家等众多人士的热议.在这次论坛中,腾讯副总裁.腾讯网络媒体总编辑陈菊红与滴滴CEO程维.大众点评CEO张涛等就中国的互联网+进行了激烈的探讨. 这里有两个概念我们需要先来弄清楚.第一个是数字颠覆论,有的人认为互联网不是颠覆了传统行业,而是升级了传统行业,不过刘旷个人觉得腾讯网总编陈菊红的解说更为全面,她表示:“对‘数字颠覆者’这一概念,应当从两个角度理解.一方面,

弘扬中国文化创作发展文学建设事业,间谈小说 “文味”和“接笔 ”的看法

前言 为宏扬中国文化创作发展文学建设事业的进步,大力推广和提高对文学创作的能力潜能,执笔地展现出更多的文学爱好者的优秀人才:中国青年作家学会研讨会勇于开拓文学的创作视野,做出一份努力和贡献.       习近平指出,推动文艺繁荣发展,最根本的是要创作生产出无愧于我们这个伟大民族.伟大时代的优秀作品.文艺工作者应该牢记,创作是自己的中心任务,作品是自己的立身之本,要静下心来.精益求精搞创作,把最好的精神食粮奉献给人民.必须把创作生产优秀作品作为文艺工作的中心环节,努力创作生产更多传播当代中国价值观

让传统行业研发团队插上用户思维的翅膀

共计 5469 字|建议阅读时间 15 分钟 本文是top100 summit 2016主题演讲的整理文稿,演讲主体分三部分内容: 2015年罗辑思维跨年演讲说的“互联网恐慌”,其根本原因是什么? 什么是传统行业的最大痛点? 通过三个实际案例来讲述传统的研发团队如何理解并获得用户思维. 01“互联网恐慌”的根本原因   互联网企业如今吸引了大量的资源和目光,让传统行业的企业显得无所适从,感觉现在已经完全是互联网企业的天下,传统行业已经日薄西山,正在“混吃等死”了. 但其实我们来看一组2015年的

李开复给中国学生的第五封信:你有选择的权利(上)

有一位中国留学生看完了我<写给中国学生的第三封信>后,感触很深,他写了一封信给我说:“很小的时候,我的目标就是长大,长大了做什么,我当时没有想:读小学的时候,父母给我的目标就是考初中,考上初中做什么,我没有想过:读初中的时候,父母给我的目标就是考高中,考上高中做什么,我没有想过:读高中的时候,父母给我的目标就是考大学,考上大学做什么,我没有想过:上大学的时候,父母给我的目标就是要出国,出国做什么,我也没有想过:现在留学拿到了学位,要找工作了,下一步我该做些什么呢?这次,我要好好地想一想.谢谢你