User 0d64032b61
11-04-2014 02:55:14
Hi ChemAxon,
I was using JChem Base + PostgreSQL 9.2 to handle the large database hosting more than 20 million structures. My system is CentOS 6.5 at Intel i-7 CPU with 8-Core and 12G Memory. I have referenced the JChem document on substructure searching performance tuning at pgsql, for example in postgresql.conf:
shared_buffers = 8192MB
temp_buffers = 1024MB
work_mem = 512MB
maintenance_work_mem = 1024MB
max_stack_depth = 8MB
Meanwhile, I tried to set HEAP_LIMIT to 8192 and SERVER_MODE to true in the script file jcsearch, and run the command to do substructure searching and export the result:
jcsearch -q "Fc1ccc(Cl)cc1CNCC(=O)N" -t:s -f smiles DB:my_structure_table -o myhits.smiles
There are around 80 hits. However the whole process spent more than 5 minutes! It is too long to unacceptable for my application. Have I missed something in the performance tuning? Would you please give me some suggestion? Thanks.
I wonder the second problem below is caused by similar reason:
I want to execute the command jcman s my_structure_table to view the statistics about the table, but it threw an exception in 1 minute:
Collecting statistics for table: my_structure_table ...
java.lang.OutOfMemoryError: Java heap space
at java.lang.Class.privateGetDeclaredFields(Class.java:2305)
at java.lang.Class.getDeclaredField(Class.java:1882)
at java.util.concurrent.atomic.AtomicReferenceFieldUpdater$AtomicReferenceFieldUpdaterImpl.<init>(AtomicReferenceFieldUpdater.java:181)
at java.util.concurrent.atomic.AtomicReferenceFieldUpdater.newUpdater(AtomicReferenceFieldUpdater.java:65)
at java.sql.SQLException.<clinit>(SQLException.java:353)
at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:1817)
at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:257)
at org.postgresql.jdbc2.AbstractJdbc2Statement.execute(AbstractJdbc2Statement.java:500)
at org.postgresql.jdbc2.AbstractJdbc2Statement.executeWithFlags(AbstractJdbc2Statement.java:374)
at org.postgresql.jdbc2.AbstractJdbc2Statement.executeQuery(AbstractJdbc2Statement.java:254)
at chemaxon.jchem.db.TableStatistics.collect(TableStatistics.java:205)
at chemaxon.jchem.db.TableStatistics.getPrintableStats(TableStatistics.java:126)
at chemaxon.jchem.db.TableStatistics.collectStatisitcs(TableStatistics.java:72)
at chemaxon.jchem.Command.printTableStatistics(Command.java:1491)
at chemaxon.jchem.Command.run(Command.java:816)
at chemaxon.jchem.Command.main(Command.java:272)
Thanks for your help in advance.
CT