[erlang-questions] Why is Mnesia read-locking an entire table?

Jim <>
Sat Nov 3 14:32:43 CET 2012


Dear List

I am having trouble understanding why Mnesia is grabbing a read-lock on an entire table. Can someone give me any insight?

Here are some facts (beliefs ;)

* The table is of type ordered_set
* My key is a two-tuple,  {unix-style-milliseconds-since-1970, Key} as in, {1351872742126278,"BI13626"}},
* There are two additional indexed columns
*  I am frequently, in the same transaction, deleting and inserting two records which differ *only* in the time-stamp portion of the key – I am replacing an older version of the record with a newer version
* All access is done within a function that is passed to mnesia:transaction/1
* All access to the table in question is via:
    o   mnesia:index_read/3 where all three variables being passed in are *always* bound,  or
    o   mnesia:select/2 as shown below


lookup_since(Since) ->
    M = [{#key_to_value{update_map={'$1', '_'}, _='_'},
    [{'>', '$1', Since}], ['$_']}]
   {ok, mnesia:select(key_to_value, M)}.

or

lookup_keylist(Keys, Since) ->
   M = [{#key_to_value{update_map={'$1', K}, _='_'},
          [{'>', '$1', Since}],  ['$_']} || K <- Keys],
    {ok, mnesia:select(key_to_value, M)}.

Mnesia:info reports the following
>>  
>> 
>> Lock: {{key_to_value,'______WHOLETABLE_____'},read,{tid,247,<0.1717.0>}}
>> 
>> Lock: {{key_to_value,{1351872742126278,"BI13626"}},write,{tid,247,<0.1717.0>}}
>> 
>> Lock: {{key_to_value,{1351872742130724,"BI13623"}},write,{tid,247,<0.1717.0>}}
>> 
>> Lock: {{key_to_value,{1351872742136170,"BI13621"}},write,{tid,247,<0.1717.0>}}
>> 
>> Lock: {{key_to_value,{1351872742140957,"BI13616"}},write,{tid,247,<0.1717.0>}}
>> 
>> Lock: {{key_to_value,{1351872746638841,"BI13628"}},write,{tid,247,<0.1717.0>}}
>> 
>> Lock: {{key_to_value,{1351872746640989,"BI13626"}},write,{tid,247,<0.1717.0>}}
>> 
>> Lock: {{key_to_value,{1351872746642481,"BI13623"}},write,{tid,247,<0.1717.0>}}
>> 
>> Lock: {{key_to_value,{1351872746643406,"BI13621"}},write,{tid,247,<0.1717.0>}}
>> 
>> Lock: {{key_to_value,{1351872746644468,"BI13616"}},write,{tid,247,<0.1717.0>}}
>> 
>> Lock: {{scope_to_keys,"6B-PED"},write,{tid,247,<0.1717.0>}}
>> 
>> Lock: {{scope_to_keys,"InPatient"},write,{tid,247,<0.1717.0>}}
>> 
>> Lock: {{type_to_keys,"b_index"},write,{tid,247,<0.1717.0>}}
>> 
>> ---> Processes waiting for locks <---
>> 
>> ---> Participant transactions <---
>> 
>> ---> Coordinator transactions <---
>> 
>> Tid: 247 (owned by <0.1717.0>)
>> 
>> ---> Uncertain transactions <---
>> 
>>  
>> 
>>  
>> 
>> Here is a second example of the mnesia:info() output
>> 
>>  
>> 
>> ---> Processes holding locks <---
>> 
>> Lock: {{key_to_value,'______WHOLETABLE_____'},read,{tid,707,<0.1876.0>}}
>> 
>> Lock: {{key_to_value,{1351872861465784,"VI14543"}},write,{tid,707,<0.1876.0>}}
>> 
>> Lock: {{key_to_value,{1351872868375564,"VI14543"}},write,{tid,707,<0.1876.0>}}
>> 
>> ---> Processes waiting for locks <---
>> 
>> ---> Participant transactions <---
>> 
>> ---> Coordinator transactions <---
>> 
>> Tid: 707 (owned by <0.1876.0>)
>> 
>> ---> Uncertain transactions <---
>> 
Any help would be greatly appreciated,
Jr0
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://erlang.org/pipermail/erlang-questions/attachments/20121103/e7555ab2/attachment.html>


More information about the erlang-questions mailing list