Hi. Kevin.<div>I am not sure your exact question is. But based on my experience with mnesia with table type disc_copies. mnesia will keep a complete copy of table in ram too. The first time you access that table,(Ususally I am using tv:start()). It reside in RAM. Comsume your RAM until it crash your erlang VM.</div>
<div><br></div><div>It is a potential dangerous to use ram_copies and disc_copies, because unconscious it will crash itself. </div><div><br></div><div><br></div><div>Regards.</div><div>Scott</div><div><br></div><div><br></div>
<div><br><div class="gmail_quote">On Thu, Feb 19, 2009 at 12:38 PM, Kevin A. Smith <span dir="ltr"><<a href="mailto:kevin@hypotheticalabs.com">kevin@hypotheticalabs.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">
I know this has been discussed on the list before but I haven't found<br>
a satisfactory answer either in the list archives or Google.<br>
<br>
I've got some test code which queries 9 disc_copies tables in a tight<br>
loop. The tables have been preloaded and no new data is created during<br>
the test. Querying is done via dirty_match_object/1.<br>
<br>
I've noticed that the memory footprint of the Erlang VM grows as long<br>
as I leave my test running. The VM will start with a low memory<br>
footprint, say around 3-4 MB, and then grow to over 360 MB in the<br>
space of a minute. I know I could use ets or dets directly and<br>
probably workaround this issue but I'm intrigued and I'd like to<br>
understand exactly what's happening.<br>
<br>
erlang:memory/0 reports this after a typical test run:<br>
<br>
[{total,385341784},<br>
  {processes,694596},<br>
  {processes_used,686596},<br>
  {system,384647188},<br>
  {atom,402833},<br>
  {atom_used,372656},<br>
  {binary,13728},<br>
  {code,2993679},<br>
  {ets,380521792}]<br>
<br>
It looks like ets is responsible for the lion's share of memory usage.<br>
<br>
I've tried all of the standard tricks:<br>
<br>
* setting fullsweep_after via erlang:system_flag/2 (before any test<br>
code is run)<br>
* calling erlang:garbage_collect/0 at the top of each loop iteration<br>
* calling mnesia_recover:allow_garb/0 and mnesia_recover:start_garb/0<br>
frequently<br>
<br>
None of these changes have resulted in any measurable improvement. I<br>
did find this post from last year:<br>
<br>
<a href="http://tinyurl.com/mnesia" target="_blank">http://tinyurl.com/mnesia</a><br>
<br>
I've verified that Dan Gudmundsson's changes (see the end of the above<br>
thread) are present in mnesia_dumper and mnesia_recover. I'm running<br>
R12B-5 so it looks like Dan's changes were incorporated at some point.<br>
<br>
The odd thing is if I change the table type to disc_only_copies the<br>
problem goes away. Memory usage peaks at around 20 MB and averages out<br>
around 11 MB.<br>
<br>
Can anyone shed some light on the behavior I'm seeing?<br>
<br>
Thanks,<br>
Kevin<br>
_______________________________________________<br>
erlang-questions mailing list<br>
<a href="mailto:erlang-questions@erlang.org">erlang-questions@erlang.org</a><br>
<a href="http://www.erlang.org/mailman/listinfo/erlang-questions" target="_blank">http://www.erlang.org/mailman/listinfo/erlang-questions</a><br>
</blockquote></div><br></div>