Mnesia Overloading Problem (contd.)

luvish satija <>
Mon Jun 27 07:44:18 CEST 2005


 Hello all,
   I told about the Mnesia Overloading problem in my
previous mail. I would like to clarify the problem a
bit more. 

   My server process is creating four mnesia tables on
the same node on which it is running. For every new
client, server spawns a new process which then
independently communicates with the mnesia tables. 

   Now the problem is that when the number of clients
crosses a certain limit ( approx. 10000), the
following errors are thrown by the erlang shell:


 =ERROR REPORT==== 24-Jun-2005::10:48:31 ===
Error in process <0.3550.0> on node ''
with exit value:
{{badmatch,{aborted,{system_limit,"Cannot create an
ets table for the local transaction
store",{system_limit,[{ets,new,[mnesia_trans_store,[bag,public]]},{mnesia_tm,doit_loop,1},{mnesia_sp,init_proc,4},{proc_lib,...


=ERROR REPORT==== 24-Jun-2005::10:48:35 ===
** Too many db tables **



=ERROR REPORT==== 24-Jun-2005::10:48:50 ===
Mnesia(): ** WARNING ** Mnesia is
overloaded: {mnesia_tm, message_queue_len,
[3156,3105]}


Now I have certain doubts:
1. When I am creating only 4 tables, then how come
"too many db tables" error is thrown?

2. To solve the problem at my level, I made some
changes in the program. Now instead of all the
processes simultaneously jumping on mnesia, there is
only one process responsible for the transaction with
mnesia. All the client processes contact that process.
To my surprise this solution worked, and I could
safely reach a limit of 10000. To check mnesia's
status, the following was the output of ets:i().
 

id              name              type  size   mem    
 owner

----------------------------------------------------------------------------
 8               cookies           set   0      276   
  auth
 10              code              set   288    13790 
  code_server
 11              code_names        set   35     3440  
  code_server
 15              dets              duplicate_bag 0    
 276      dets
 22              mnesia_subscr     duplicate_bag 1    
 286      mnesia_subscr
 23              mnesia_transient_decision set   0    
 276      mnesia_recover
 29              mnesia_transient_decision set   0    
 276      mnesia_recover
 30              mnesia_transient_decision set   20150
 305597   mnesia_recover
 ac_tab          ac_tab            set   9      1029  
  application_controller
 client_buddylist client_buddylist  set   0      276  
   mnesia_monitor
 client_offlinemessages client_offlinemessages set   0
     276      mnesia_monitor
 client_online   client_online     set   10000  209599
  mnesia_monitor
 client_profile  client_profile    set   10000  287387
  mnesia_monitor
 dets_owners     dets_owners       set   0      276   
  dets
 dets_registry   dets_registry     set   0      276   
  dets
 disk_log_names  disk_log_names    set   1      286   
  disk_log_server
 disk_log_pids   disk_log_pids     set   1      286   
  disk_log_server
 global_locks    global_locks      set   0      276   
  global_name_server
 global_names    global_names      set   1      290   
  global_name_server
 global_names_ext global_names_ext  set   0      276  
   global_name_server
 inet_cache      inet_cache        bag   0      276   
  inet_db
 inet_db         inet_db           set   20     556   
  inet_db
 inet_hosts      inet_hosts        set   8      700   
  inet_db
 mnesia_decision mnesia_decision   set   1      287   
  mnesia_recover
 mnesia_gvar     mnesia_gvar       set   199    4008  
  mnesia_monitor
 mnesia_held_locks mnesia_held_locks bag   0      276 
    mnesia_monitor
 mnesia_lock_counter mnesia_lock_counter set   0     
276      mnesia_monitor
 mnesia_lock_queue mnesia_lock_queue bag   0      276 
    mnesia_monitor
 mnesia_sticky_locks mnesia_sticky_locks set   0     
276      mnesia_monitor
 mnesia_tid_locks mnesia_tid_locks  bag   0      276  
   mnesia_monitor
 pg2_table       pg2_table         set   0      276   
  pg2
 schema          schema            set   5      834   
  mnesia_monitor
 sys_dist        sys_dist          set   1      316   
  net_kernel


3. So, the result which I have drawn is that Mnesia
was getting overloaded because of so many processes
contending for transaction. AM I THINKING IN RIGHT
DIRECTION or is there anything which is beyond this?


4. Why the entry mnesia_transient_decision having id
30 is having such a large size and taking large memory
(nearly double of my tables's size. Tables created by
my process are client_buddylist,
client_offlinemessages, client_online,
client_profile)?  

   I tried googling before posing my questions but it
didn't 
help me much. So, Please forgive me for if my doubts
are very basic
or any person out there is getting bored after reading
this large mail, but the answers to these doubts will
help me to go a long way in my project.

Thanks in anticipation,
/luvish


		
_______________________________________________________
Too much spam in your inbox? Yahoo! Mail gives you the best spam protection for FREE! http://in.mail.yahoo.com



More information about the erlang-questions mailing list