欢迎使用CSDN-markdown编辑器
来源:互联网 发布:淘宝网厨房用品 编辑:程序博客网 时间:2024/06/06 10:07
mnesia的脏写和事物写的测试
原文链接 http://www.cnblogs.com/unqiang/p/4543670.html
mnesia_text.erl:
-module(mnesia_text).
-compile(export_all).
-record(r_test, {id, name}).
start(N) ->
timer:tc(mnesia_text,dirty,[N]).
start2(X) ->
timer:tc(mnesia_text,t_w1,[X]).
init() ->
case mnesia:create_schema([node()]) of
ok ->
ok;
_ ->
mnesia:delete_schema([node()]),
mnesia:create_schema([node()])
end,
mnesia:start(),
case mnesia:create_table(r_test, [{attributes, record_info(fields, r_test)}, {record_name, r_test},{disc_copies, [node()]}]) of {atomic, ok} -> ok; _Any1 -> mnesia:delete_table(r_test), mnesia:create_table(r_test, [{attributes, record_info(fields, r_test)}, {record_name, r_test},{disc_copies, [node()]}])end.
t_w1(X) ->
mnesia:transaction(fun() -> t_write(X) end).
t_write(0) ->
ok;
t_write(N) ->
Name = lists:append([“name_”, N]),
R = #r_test{id=N, name=Name},
mnesia:write(R),
t_write(N-1).
dirty(0) ->
ok;
dirty(Num) ->
Name = lists:append([“name_”, Num]),
R = #r_test{id=Num, name=Name},
mnesia:dirty_write(R),
dirty(Num-1).
测试十万次,测试结果如下:
不难发现,脏写比事物写效率高出至少一个数量级,而且越频繁大量的写入,性能差距越明显。
而在测试dirty_wirte的过程中,发现出现大量的waring,截图如下:
原因查找:查看日志文件,发现有出现了几个这样的警告:* WARNING * Mnesia is overloaded: {dump_log, write_threshold}
查阅了资料,出现这个问题的原因——频繁的异步写入。
有两种解决方案,一种是避免频繁的异步写入,另一个是把mnesia对应的配置文件权限放宽
1、推荐用sync_transaction 或者 sync_dirty来进行写入操作,认为异步写入是导致出现这个错误的原因。
2、对配置文件进行修改是在启动erlang时进行的:这哥推荐修改dc_dump_limit的设置由4改为40
修改dump_log_time_threshold 的设置由100改为50000,要想实现在启动erl时执行
erl -mnesia dump_log_write_threshold 50000 -mnesia dc_dump_limit 40
ok,下面说下这俩参数代表的意思:
dc_dump_limit:磁盘备份表从内存中被抛弃的时间间隔
dump_log_time_threshold:在新垃圾回收之前的最大的写入数。
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- JS版获取最长公共子串的方法
- Machine Learning week 7 quiz: Support Vector Machines
- 打patch的方法
- PHP5历史以及各个版本的新功能和新特性收集总结
- 大型分布式网站架构技术总结
- 欢迎使用CSDN-markdown编辑器
- iPhone像素点和常用控件尺寸
- T-SQL动态查询(3)——静态SQL
- Android .so 共享库(动态链接库)
- shareSdk错误码对照表
- Sed单行命令快速参考
- maven项目里添加非maven管理的jar包
- Android中View绘制不同状态背景图片原理以及StateListDrawable使用详解
- PredicateBuilder 对 ADO.Net Entity Framework 支持的改进