Prev Next

Database / Mnesia basics Interview questions

Explain the lifecycle of a Mnesia transaction from start to commit?

Calling mnesia:transaction(Fun) kicks off a well-defined sequence: Mnesia runs your function, tracking every read and write it performs, acquiring the appropriate locks as it goes, before deciding whether the whole thing can be committed.

flowchart TD
    A[mnesia:transaction Fun called] --> B[Fun executes: reads take read locks, writes take write locks]
    B --> C{Fun completes without exception?}
    C -->|Yes| D[Two-phase commit across all replicas of touched tables]
    D --> E{All replicas prepared successfully?}
    E -->|Yes| F["{atomic, Result} returned; locks released"]
    E -->|No| G["{aborted, Reason} returned; no changes applied"]
    C -->|No, exception raised| G

If the function runs to completion without an exception, Mnesia attempts to commit — for a replicated table, this means the two-phase prepare/commit exchange across every node holding a copy. Only if every involved replica confirms it can commit does the transaction actually take effect everywhere, returning {atomic, Result}; any failure along the way aborts the whole thing, applying no changes and returning {aborted, Reason} instead.

What happens during a Mnesia transaction's function execution, before commit?
What does a Mnesia transaction return if it can't be committed on every replica?

More Related questions...

What is Mnesia? What is a Mnesia table? What are the storage types available for a Mnesia table? What is a Mnesia schema? How do you create a Mnesia schema? How do you create a Mnesia table? What is a Mnesia transaction? How do you write a record to a Mnesia table? How do you read a record from a Mnesia table? What are dirty operations in Mnesia? What is mnesia:dirty_read/1? What is a Mnesia record? How do you delete a record from a Mnesia table? What is the purpose of mnesia:start/0? How do you stop Mnesia? What are the Mnesia table types (set, ordered_set, bag)? What is a Mnesia index? How do you add a secondary index to a Mnesia table? What is mnesia:info/0 used for? How do you check if Mnesia is running? What is the Mnesia directory (Mnesia.dir)? What is the primary key in a Mnesia table? What is mnesia:select/2 used for? What is record_info used for when creating a Mnesia table? What are the attributes of a Mnesia table? What is a Mnesia node? How do you replicate a table across multiple Mnesia nodes? What is mnesia:table_info/2 used for? Describe the difference between a Mnesia table and an ETS table? Why should Mnesia operations generally run inside a transaction? When should you use dirty operations instead of a transaction? What is the difference between ram_copies and disc_copies? What is disc_only_copies and when would you use it? What happens to a disc_copies table when its node restarts? How do you change a table's storage type at runtime? What is a Mnesia table lock and how does it work? How does Mnesia keep replicated tables consistent across nodes? How do you migrate a Mnesia record definition when its fields change? What is mnesia:transform_table/3 used for? When should you choose bag over set for a Mnesia table? How do you back up a Mnesia database? How do you restore a Mnesia database from a backup? Explain the lifecycle of a Mnesia transaction from start to commit? How do you troubleshoot a Mnesia table stuck in the "loading" state? What is mnesia:force_load_table/1 and when should you use it? What is the difference between mnesia:read/1 and mnesia:wread/1? What is a Mnesia checkpoint used for? How does Mnesia resolve conflicts after a network partition heals?
Show more question and Answers...


Comments & Discussions