Wincer
Mnesia transaction memory is increasing
Hello everyone, I am using Mnesia to build a cacheing system, Encountered a problem:
Every time I use :mnesia.transaction, it will bring little memory consumption. Almost 10,000 :mnesia.transaction calls will consume 1MB of memory.
After some work, I found that the memory occupied by ets’s table: mnesia_transient_decision will continue to increasing. Every call to :mnesia.transaction will insert a record into table mnesia_transient_decision, and even if I use :mnesia_recover.allow_garb and :erlang.garbage_collect, the memory will not decrease. And I can’t delete this table.
Can someone help me? very appreciate
test code:
defmodule TestTransaction do
alias :mnesia, as: Mnesia
def init_mnesia do
Mnesia.start()
Mnesia.create_table(Person, attributes: [:age, :username], disc_copies: [node()])
end
def case_trans_read do
f = fn ->
Mnesia.read(Person, 2)
end
Mnesia.transaction(f)
end
def print_memory_info do
IO.puts("total: #{:erlang.memory[:total]}, ets: #{:erlang.memory[:ets]}")
end
def benchmarking(_, 0), do: nil
def benchmarking(f, n) do
apply(TestTransaction, f, [])
benchmarking(f, n-1)
end
end
TestTransaction.init_mnesia
TestTransaction.benchmarking :case_trans_read, 10000
:observer_cli memory usage of ets:
|Table Name |Size | Memory |Type |Protection |KeyPos |Write/Read |Owner Pid |
|mnesia_transient_decision | 10002 | 1022.1172 KB | set | public | 2 | false/false | <0.214.0> |
First Post!
krp
Saw your post yesterday and thought this was a chance to dig into a bit of mnesia. I’ve been able to reproduce this although I needed to remove the disc_copies options to get it to run. I see the same issue. Nothing added to the table but memory tied up with ets increases with each transaction call. Have you been able to figur eout the cause of this and any solution ?
Thanks
Last Post!
Wincer
Thanks reply, this discussion is helpful, but may not solve my problem. My needs are more sensitive to memory usage…
Popular in Questions
Other popular topics
Categories:
Sub Categories:
Forums
Popular Tags
- #ecto
- #liveview
- #troubleshooting
- #learning-elixir
- #deployment
- #library
- #erlang
- #testing
- #genserver
- #mix
- #absinthe
- #remote-other
- #otp
- #plug
- #how-to-question
- #macros
- #postgres
- #channels
- #elixirconf
- #exunit
- #discussion
- #code-sync
- #javascript
- #podcasts
- #onsite
- #dialyzer
- #docker
- #authentication
- #umbrella
- #full-time-contract
- #podcasts-by-brainlid
- #ecto-query
- #elixir-ls
- #phoenix_html
- #iex
- #blog-post
- #graphql
- #genstage
- #ai
- #websockets
- #supervisor
- #elixirconf-us
- #advent-of-code
- #distillery
- #processes
- #api
- #forms
- #metaprogramming
- #security
- #hex










