mnesia的脏写和事物写的测试
在之前的文章中,测试了脏读和事物读之间性能差别,下面测试下脏写和事物写之间的性能差别:
代码如下:
-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:在新垃圾回收之前的最大的写入数。
参考地址:How to Eliminate Mnesia Overload Events
mnesia的脏写和事物写的测试的更多相关文章
- SSD 为什么顺序写比随机写性能更好?
SSD以Page为单位做读写,以Block为单位做垃圾回收,Page一般有16KB大小,Block一般有几十MB大小,SSD写数据的逻辑是: 1)将该块数据所在的Page读出 2)修改该Page中该块 ...
- 象写程序一样写博客:搭建基于github的博客
象写程序一样写博客:搭建基于github的博客 前言 github 真是无所不能.其 Pages 功能 支持上传 html,并且在页面中显示.于是有好事者做了一个基于 github 的博客管理工具 ...
- 《自己动手写CPU》写书评获赠书活动结果
<自己动手写CPU>写书评获赠图书的读者有: 京东:8***2.16号哨兵.magicyu.kk6803.jddickyd.杰出的胡兵 亚马逊:徐贺.马先童.jaychen.farmfar ...
- C#做一个写txt文件流的测试,为什么配置低的机器写入的还快
测试机:笔记本i7 8G 固态硬盘 由于采取读码写入txt方式, 读码频率挺高,文件名为日期格式,当前采用每次读码打开文件写入的方式, 为什么没用sb,因为怕断电情况的数据丢失.所以采取每条存入的方式 ...
- 通过hive向写elasticsearch的写如数据
通过hive向写elasticsearch的写如数据 hive 和 elasticsearch 的整合可以参考官方的文档: ES-hadoop的hive整合 : https://www.elastic ...
- 如果使用引用方式引用了js后 则不能再本地写js 因为写了后不会有效果
如果使用引用方式引用了js后 则不能再本地写js 因为写了后不会有效果
- TensorFlow------单层(全连接层)实现手写数字识别训练及测试实例
TensorFlow之单层(全连接层)实现手写数字识别训练及测试实例: import tensorflow as tf from tensorflow.examples.tutorials.mnist ...
- OS: 读者写者问题(写者优先+LINUX+多线程+互斥量+代码)(转)
一. 引子 最近想自己写个简单的 WEB SERVER ,为了先练练手,熟悉下在LINUX系统使用基本的进程.线程.互斥等,就拿以前学过的 OS 问题开开刀啦.记得当年学读者写者问题,尤其是写者优先的 ...
- Qt侠:像写诗一样写代码,玩游戏一样的开心心情,还能领工资!
[软]上海-Qt侠 2017/7/12 16:11:20我完全是兴趣主导,老板不给我钱,我也要写好代码!白天干,晚上干,周一周五干,周末继续干!编程已经深入我的基因,深入我的骨髓,深入我的灵魂!当我解 ...
随机推荐
- 《Linux命令行与shell脚本编程大全 第3版》Linux命令行---41
以下为阅读<Linux命令行与shell脚本编程大全 第3版>的读书笔记,为了方便记录,特地与书的内容保持同步,特意做成一节一次随笔,特记录如下:
- 《Linux命令行与shell脚本编程大全 第3版》Linux命令行---3
以下为阅读<Linux命令行与shell脚本编程大全 第3版>的读书笔记,为了方便记录,特地与书的内容保持同步,特意做成一节一次随笔,特记录如下: <Linux命令行与shell脚本 ...
- github的多环境应用介绍
ssh认证中公钥如同家里大门,私钥就是钥匙,一个大门可以有多把钥匙,大门可以随便展示,钥匙却不能,必须给那些需要的人.其中,公钥的默认名字是id_rsa.pub,私钥的默认名字是id_rsa,它的权限 ...
- C#图解教程学习笔记——数据类型与数据存储
一.数据类型1. 预定义类型C#提供16种预定义类型,包括13种简单类型和3种非简单类型:(1)简单类型<1>11种数值类型: 不同长度的有符号和无符号整数类型 浮点数的float和dou ...
- hdu 3074(线段树)
Multiply game Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Tot ...
- LeetCode OJ-- Edit Distance **
https://oj.leetcode.com/problems/edit-distance/ 动态规划,它的小规模问题是:当 word1 word2都比较小的时候,word1变成 word2需要的 ...
- 使用Nginx+FFMPEG搭建HLS直播转码服务器
目的:使Nginx支持Rtmp协议推流,并支持hls分发功能及FFMPEG转码多码率功能. 一.准备工作 模块:nginx-rtmp-module-master(支持rtmp协议) 下载地址: htt ...
- 打开与关闭eclipse的自动补全功能
打开: eclipse→Windows→Preferences→Java→Editor→Content Assist:修改Auto Activation triggers for java的值为:.a ...
- 多字节与UTF-8、Unicode之间的转换
from http://blog.csdn.net/frankiewang008/article/details/12832239 // 多字节编码转为UTF8编码 bool MBToUTF8(vec ...
- hdu3591The trouble of Xiaoqian 多重背包+全然背包
//给出Xiaoqian的钱币的价值和其身上有的每种钱的个数 //商家的每种钱的个数是无穷,xiaoqian一次最多付20000 //问如何付钱交易中钱币的个数最少 //Xiaoqian是多重背包 / ...