<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic Re: poor TMQ peformances vs SQL in Alfresco Forum</title>
    <link>https://connect.hyland.com/t5/alfresco-forum/poor-tmq-peformances-vs-sql/m-p/33511#M14163</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;&lt;IMG alt="" class="image-1 jive-image j-img-original" src="https://connect.hyland.com/legacyfs/online/alfresco/18437_PostgreSQLLongDurationQueries.PNG" style="width: 620px; height: 233px;" /&gt;&lt;/P&gt;&lt;P&gt;Example of PostgreSQL long duration queries:&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Sun, 24 Dec 2017 14:49:01 GMT</pubDate>
    <dc:creator>vincent-kali</dc:creator>
    <dc:date>2017-12-24T14:49:01Z</dc:date>
    <item>
      <title>poor TMQ peformances vs SQL</title>
      <link>https://connect.hyland.com/t5/alfresco-forum/poor-tmq-peformances-vs-sql/m-p/33506#M14158</link>
      <description>Hi all,I'm working with TMQ on a large repo (about 10 millions of docs) on a community 5.1.g.When running a batch of queries using SearchService API (with transactional queryConsistency), at a regular interval the response time is beyond 3 mn (sometimes 10mn or higher!). All other queries return alm</description>
      <pubDate>Sat, 23 Dec 2017 13:49:48 GMT</pubDate>
      <guid>https://connect.hyland.com/t5/alfresco-forum/poor-tmq-peformances-vs-sql/m-p/33506#M14158</guid>
      <dc:creator>vincent-kali</dc:creator>
      <dc:date>2017-12-23T13:49:48Z</dc:date>
    </item>
    <item>
      <title>Re: poor TMQ peformances vs SQL</title>
      <link>https://connect.hyland.com/t5/alfresco-forum/poor-tmq-peformances-vs-sql/m-p/33507#M14159</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Did you check my talk about TMQs at the last BeeCon? (&lt;A href="http://beecon.buzz/2017/assets/files/E10/Making%20proper%20use%20of%20transactional%20metadata%20queries.pdf" rel="nofollow noopener noreferrer"&gt;Slides&lt;/A&gt;, &lt;A href="https://www.youtube.com/watch?v=D_C_x8i14H8" rel="nofollow noopener noreferrer"&gt;video&lt;/A&gt;)&lt;/P&gt;&lt;P&gt;When you checked the performance of the native query, did you check the performance of executing the prepared statements or did you just execute the query with placeholders already replaced by the specific values?&lt;/P&gt;&lt;P&gt;Did those queries include any queries that are related to the post-search ACL checking that is done on the search results?&lt;/P&gt;&lt;P&gt;Did you also do a JVM sampling session to see if there may be inefficiencies on the Java-side? There could be overhead due to a custom dynamic authority or GC-overhead&amp;nbsp;at work (the latter especially considering that the issue appears every 5-6 queries only, while I assume all queries are identical / similar).&lt;/P&gt;&lt;P&gt;Are you executing (potentially paginated) searches against reasonably sized (expected) result sets? Querying very large results sets (1000+ results on the SQL layer before permission checking) is quite inefficient due to the overheads of permission checking.&lt;/P&gt;&lt;P&gt;Is the duration of searches in Alfresco including any custom processing, e.g. rendering a response template, which may require that additional data (aspects, properties...) are loaded from the DB as needed?&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I also wonder about the general configuration of Alfresco and PostgreSQL. Are cache sizes configured in a way that they can deal with the amount of search results expected? Does the DB server have sufficient memory / correct relative IO cost estimates to avoid resorting to table scans in case queries are executed on very skewed data sets?&lt;/P&gt;&lt;P&gt;10 million documents is not&amp;nbsp;a high number (I have worked with such an amount during tests on my local laptop in some past projects) and as long as the data set / queries are reasonable and the configuration is fine, there should not be TMQs running for multiple minutes.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sat, 23 Dec 2017 16:20:52 GMT</pubDate>
      <guid>https://connect.hyland.com/t5/alfresco-forum/poor-tmq-peformances-vs-sql/m-p/33507#M14159</guid>
      <dc:creator>afaust</dc:creator>
      <dc:date>2017-12-23T16:20:52Z</dc:date>
    </item>
    <item>
      <title>Re: poor TMQ peformances vs SQL</title>
      <link>https://connect.hyland.com/t5/alfresco-forum/poor-tmq-peformances-vs-sql/m-p/33508#M14160</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Axel,&lt;/P&gt;&lt;P&gt;Thanks for your response.&lt;BR /&gt;Yes I read your (valuable) information about TMQ.&lt;BR /&gt;We already had some exchange about this topic (&lt;A _jive_internal="true" href="https://community.alfresco.com/thread/231968-tmq-indexes-and-performances" rel="nofollow noopener noreferrer"&gt;https://community.alfresco.com/thread/231968-tmq-indexes-and-performances&lt;/A&gt;).&lt;/P&gt;&lt;P&gt;No, any prepared statements or post-search ACL checking have not been included in the test using native SQL queries.&lt;BR /&gt;ResultSet are small (10-100 results).&lt;BR /&gt;Yes, the response template rendering is included in the test (the same webScript runs either native SQL query or TMQ query).&lt;/P&gt;&lt;P&gt;We dismiss any JVM configuration problem as we use the same platform (JVM/Alfresco/Postgres) for all tests.&lt;BR /&gt;Am'I wrong ?&lt;/P&gt;&lt;P&gt;We clearly see the queries on PostgreSQL spending minutes when run from TMQ queries (every 5-6 queries), but not when using a direct sql cnx.&lt;BR /&gt;There must be misconfiguration of jdbc driver on alfresco side ? Don't you think so ?&lt;/P&gt;&lt;P&gt;Here's the code use for testing. The SQL queries produced by both tests have been separately tested with comparable performances&lt;/P&gt;&lt;P&gt;&amp;nbsp;This works fine:&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;Class.forName(this.dbDriver); //org.postgresql.Driver&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;Connection connection = null;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;connection = DriverManager.getConnection(this.dbUrl, this.dbUsername, this.dbPassword);//"jdbc&lt;img id="smileytongue" class="emoticon emoticon-smileytongue" src="https://connect.hyland.com/i/smilies/16x16_smiley-tongue.png" alt="Smiley Tongue" title="Smiley Tongue" /&gt;ostgresql://localhost:5432/alfresco", "alfresco", "****");&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;if (connection != null){&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;// Get alf_qname ids for QNames (SQL query)&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;Map&amp;lt;QName, Integer&amp;gt; qNameSQLIds = getQNameSQLIds(connection, new ArrayList (parameterValues.keySet()));&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;// build SQL query&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;String queryString = new StringBuilder()&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;.append("-- select id, local_name from alf_qname limit 10;\n")&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;.append("select node.uuid\n")&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;.append("from \n")&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;.append("alf_node node\n")&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.append("inner join alf_node_properties nodeProp1 on node.id = nodeProp1.node_id&amp;nbsp; -- joint node to property 1\n")&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.append("inner join alf_node_properties nodeProp2 on node.id = nodeProp2.node_id&amp;nbsp; -- joint node to property 2\n")&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.append("inner join alf_node_properties nodeProp3 on node.id = nodeProp3.node_id&amp;nbsp; -- joint node to property 3\n")&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.append("inner join alf_node_properties nodeProp4 on node.id = nodeProp4.node_id&amp;nbsp; -- joint node to property 4\n")&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;.append("where \n")&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.append("node.store_id = 6 AND -- spaceStore\n")&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.append("node.type_qname_id = 51 -- type content\n").toString();&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;Integer paramIndex = 0;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;for (Entry&amp;lt;QName,Integer&amp;gt;&amp;nbsp; qNameSQLId : qNameSQLIds.entrySet()){&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;paramIndex++;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;queryString = queryString &lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;+("AND nodeProp" + paramIndex + ".qname_id = '" + qNameSQLId.getValue() + "' -- select id from alf_qname where local_name = '" + qNameSQLId.getKey().getLocalName() + "';\n")&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;+("AND nodeProp" + paramIndex + ".string_value = '" + parameterValues.get(qNameSQLId.getKey()) + "'\n");&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;queryString = queryString&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;+ ("order by\n")&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;+ ("node.audit_modified DESC;\n").toString();&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;// Run Query&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;Statement statement = connection.createStatement();&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;ResultSet rs = statement.executeQuery(queryString);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;nodeList = new ArrayList&amp;lt;NodeRef&amp;gt;();&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;while ( rs.next() ) {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;nodeList.add(new NodeRef("workspace://SpacesStore/" + rs.getString("uuid")));&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;// -&amp;gt; send nodeList to ws template&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR /&gt;&amp;nbsp;This get stuck every 5-6 queries&lt;BR /&gt;&amp;nbsp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;RetryingTransactionCallback&amp;lt;List&amp;lt;NodeRef&amp;gt;&amp;gt; callback = new RetryingTransactionCallback&amp;lt;List&amp;lt;NodeRef&amp;gt;&amp;gt;() {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;@Override&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;public List&amp;lt;NodeRef&amp;gt; execute() throws Throwable {&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;SearchParameters sp = new SearchParameters();&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sp.setLanguage(searchLanguage);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sp.addStore(new StoreRef("workspace://SpacesStore"));&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sp.setQuery(query);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sp.setMaxItems(maxItems);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sp.setQueryConsistency(queryConsistency);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sp.setSkipCount(skipCount);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sp.excludeDataInTheCurrentTransaction(false);//should be the default&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;SortDefinition sortDefinition = new SortDefinition(&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;SearchParameters.SortDefinition.SortType.FIELD, "@"&amp;nbsp;+ sortField, sortAscending);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sp.addSort(sortDefinition);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;logger.debug(" search - query: " + sp.getQuery());&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;resultSet = this.services.getSearchService().query(sp);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;logger.debug("Results found: " + resultSet.getNumberFound());&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;results = resultSet.getNodeRefs();&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;};&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;// run transaction&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;RetryingTransactionHelper txnHelper = this.services.getRetryingTransactionHelper();&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;return txnHelper.doInTransaction(callback, true, true); // read-only trx, new transaction required&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;// -&amp;gt; send returned nodeList to ws Template&lt;BR /&gt;&amp;nbsp;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sat, 23 Dec 2017 21:23:43 GMT</pubDate>
      <guid>https://connect.hyland.com/t5/alfresco-forum/poor-tmq-peformances-vs-sql/m-p/33508#M14160</guid>
      <dc:creator>vincent-kali</dc:creator>
      <dc:date>2017-12-23T21:23:43Z</dc:date>
    </item>
    <item>
      <title>Re: poor TMQ peformances vs SQL</title>
      <link>https://connect.hyland.com/t5/alfresco-forum/poor-tmq-peformances-vs-sql/m-p/33509#M14161</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Right, thanks for reminding me about that exchange - it is hard sometimes to track the many conversations.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;One thing I am wondering: Was&amp;nbsp;the SQL query you are using really obtained from postgresql logs? Because the query looks different in some ways from what Alfresco would generate for TMQ.&lt;/P&gt;&lt;UL&gt;&lt;LI&gt;the JOIN on alf_node_properties would include the property QName ID in the ON condition&lt;/LI&gt;&lt;LI&gt;the JOIN is never an explicit INNER JOIN and may even be a LEFT OUTER one&lt;/LI&gt;&lt;LI&gt;you are missing the "not equals" check on node.type_qname_id for the "deleted" type&lt;/LI&gt;&lt;LI&gt;the TYPE condition in FTS is translated into a "node.type_qname_ID IN (list-of-IDs)"-style check including the requested type and its sub-types&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;You can check the &lt;A href="https://github.com/Alfresco/alfresco-repository/blob/master/src/main/resources/alfresco/ibatis/org.hibernate.dialect.Dialect/metadata-query-common-SqlMap.xml#L8" rel="nofollow noopener noreferrer"&gt;query template in GitHub&lt;/A&gt;, and it is used for all&amp;nbsp;DBs with no dialect-specific variants.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;If you were to perform some JDBC logging, i.e. via P6Spy, you should obtain the real, proper query as requested from Alfresco. I always use that as a reliable source, regardless of the DB used at a customers (there are some Enterprise-y DBs that are a huge pain in the butt for performance analysis tasks).&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Your comparison of direct SQL vs. TMQ FTS is ignoring the additional work that Alfresco is doing for TMQs. This is what I meant with post-search ACL checking. Your direct SQL simply assumes all nodes are accessible by the current user, while the FTS query will always perform permission checks unless disabled / short-circuited. Granted, when your webscript template processes the results from the native SQL query, those permission checks will be performed "on-access", but you are still skewing the data by avoiding the first batch-check operation.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Note:&amp;nbsp;excludeDataInTheCurrentTransaction is a very old option and only relevant AFAIK for legacy Lucene queries. It is not used for SOLR or TMQ.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sun, 24 Dec 2017 12:13:03 GMT</pubDate>
      <guid>https://connect.hyland.com/t5/alfresco-forum/poor-tmq-peformances-vs-sql/m-p/33509#M14161</guid>
      <dc:creator>afaust</dc:creator>
      <dc:date>2017-12-24T12:13:03Z</dc:date>
    </item>
    <item>
      <title>Re: poor TMQ peformances vs SQL</title>
      <link>https://connect.hyland.com/t5/alfresco-forum/poor-tmq-peformances-vs-sql/m-p/33510#M14162</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Axel,&lt;/P&gt;&lt;P&gt;Thks for your note (excludeDataInTheCurrentTransaction) I'll update my code.&lt;BR /&gt;You're absolutely right, the query has been modified in the code (but first tests have been done using the original captured query as added at the bottom of this post).&lt;BR /&gt;We excluded from the possible cause the additional work that Alfresco is doing for TMQs (ACL checking and do on) because we see clearly that the time is spend on the DB query: each time a TMQ query is running during minutes, the &lt;BR /&gt;corresponding SQL query is running during the same time on PostgresSQL.&lt;BR /&gt;The SQL query used to identify long duration queries on PostgresSQL:&lt;BR /&gt;&amp;nbsp;select (now() - xact_start), query, * from pg_stat_activity&lt;BR /&gt;&amp;nbsp;&amp;nbsp;order by 1 desc;&lt;/P&gt;&lt;P&gt;Something important I ommit to say:&lt;BR /&gt;When a query is stuck during long time, we open a new browser session and run exactly the same query (using TMQ): the response is sent back immediatly.&lt;/P&gt;&lt;P&gt;It means that is some situation (linked to the user session context ?), PostgresSQL is waiting during minutes before returning query results (waiting for resources allocation ?).&lt;BR /&gt;And this behavior is always reproductible using TMQ in our environment.&lt;BR /&gt;When running direct SQL (/!\ with openning a new connection /!\), this neven appends.&lt;/P&gt;&lt;P&gt;The DB connection number is never rising higher than the limit.&lt;/P&gt;&lt;P&gt;Original SQL query captured from TMQ query (BTW is this query produced by hibernate ?)&lt;BR /&gt;&amp;nbsp;select &lt;BR /&gt;&amp;nbsp;&amp;nbsp;node.id as id&lt;BR /&gt;&amp;nbsp;from&lt;BR /&gt;&amp;nbsp;&amp;nbsp;alf_node node&lt;BR /&gt;&amp;nbsp;where &lt;BR /&gt;&amp;nbsp;&amp;nbsp;node.type_qname_id &amp;lt;&amp;gt; $1&lt;BR /&gt;&amp;nbsp;&amp;nbsp;AND node.store_id = $2&lt;BR /&gt;&amp;nbsp;&amp;nbsp;AND&lt;BR /&gt;&amp;nbsp;&amp;nbsp;( &lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;node.id IN (select aspect.node_id from alf_node_aspects aspect&amp;nbsp; where aspect.qname_id IN&amp;nbsp; (&amp;nbsp; $3 ) )&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;AND node.id IN ( select PROP.node_id from alf_node_properties PROP where ($4 = PROP.qname_id) AND PROP.string_value = $5 )&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;AND node.id IN ( select PROP.node_id from alf_node_properties PROP where ($6 = PROP.qname_id) AND PROP.string_value = $7 )&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;AND node.id IN ( select PROP.node_id from alf_node_properties PROP where ($8 = PROP.qname_id) AND PROP.string_value = $9 )&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;AND node.id IN ( select PROP.node_id from alf_node_properties PROP where ($10 = PROP.qname_id) AND PROP.string_value = $11)&lt;BR /&gt;&amp;nbsp;&amp;nbsp;)&lt;BR /&gt;&amp;nbsp;order by&lt;BR /&gt;&amp;nbsp;node.audit_modified DESC",&lt;/P&gt;&lt;P&gt;Any suggestion are welcomes, I'll put here any interesting test results.&lt;BR /&gt;Vincent&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sun, 24 Dec 2017 14:34:11 GMT</pubDate>
      <guid>https://connect.hyland.com/t5/alfresco-forum/poor-tmq-peformances-vs-sql/m-p/33510#M14162</guid>
      <dc:creator>vincent-kali</dc:creator>
      <dc:date>2017-12-24T14:34:11Z</dc:date>
    </item>
    <item>
      <title>Re: poor TMQ peformances vs SQL</title>
      <link>https://connect.hyland.com/t5/alfresco-forum/poor-tmq-peformances-vs-sql/m-p/33511#M14163</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;&lt;IMG alt="" class="image-1 jive-image j-img-original" src="https://connect.hyland.com/legacyfs/online/alfresco/18437_PostgreSQLLongDurationQueries.PNG" style="width: 620px; height: 233px;" /&gt;&lt;/P&gt;&lt;P&gt;Example of PostgreSQL long duration queries:&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sun, 24 Dec 2017 14:49:01 GMT</pubDate>
      <guid>https://connect.hyland.com/t5/alfresco-forum/poor-tmq-peformances-vs-sql/m-p/33511#M14163</guid>
      <dc:creator>vincent-kali</dc:creator>
      <dc:date>2017-12-24T14:49:01Z</dc:date>
    </item>
    <item>
      <title>Re: poor TMQ peformances vs SQL</title>
      <link>https://connect.hyland.com/t5/alfresco-forum/poor-tmq-peformances-vs-sql/m-p/33512#M14164</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Thanks for the update. Did you run EXPLAIN on that prepared statement&amp;nbsp;to check the execution plan for it - ideally before/after each of your test runs to see if the query optimiser - for some temporary reason - chooses a different query plan? I have in some instances observed an intermittent spike (not as regular as yours, but reproducible) due to changing "data-in-memory" state and cost estimations, which would tip a query that is already close to a cost limit for a table scan over the edge every so often. Most of these issues could be solved by either increasing&amp;nbsp;statistics granularity for the alf_node_properties table (specifically node_id, qname_id and string_value columns) or using partial, composite indices for very important&amp;nbsp;properties (using qname_id as selector, spanning columns node_id, qname_id, and string_value).&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;The queries in Alfresco are not generated by Hibernate. Alfresco used to use Hibernate back in 3.x, but is now using iBATIS as the OOM framework, as it provides way more granular control to optimise for the various databases that Alfresco supports. Hibernate is still included as a library, but it is relegated only to deal with dialect detection and some transaction management. If you are still running the jBPMN workflow engine, then that part will still use Hibernate.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Mon, 25 Dec 2017 19:41:25 GMT</pubDate>
      <guid>https://connect.hyland.com/t5/alfresco-forum/poor-tmq-peformances-vs-sql/m-p/33512#M14164</guid>
      <dc:creator>afaust</dc:creator>
      <dc:date>2017-12-25T19:41:25Z</dc:date>
    </item>
    <item>
      <title>Re: poor TMQ peformances vs SQL</title>
      <link>https://connect.hyland.com/t5/alfresco-forum/poor-tmq-peformances-vs-sql/m-p/33513#M14165</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi Axel,&lt;BR /&gt;I observed strange things &lt;span class="lia-unicode-emoji" title=":slightly_smiling_face:"&gt;🙂&lt;/span&gt;&lt;BR /&gt;On server side (PostgreSQL server), log have been enabled with following options:&lt;BR /&gt;&amp;nbsp;log_checkpoints = on&lt;BR /&gt;&amp;nbsp;log_connections = on&lt;BR /&gt;&amp;nbsp;log_disconnections = on&lt;BR /&gt;&amp;nbsp;log_duration = on&lt;BR /&gt;&amp;nbsp;log_lock_waits = on&lt;BR /&gt;&amp;nbsp;log_temp_files = 0&lt;BR /&gt;&amp;nbsp;log_statement = 'all'&lt;BR /&gt;We can see that the query executes very quickly (&amp;lt; 1s), but the next one starts to execute 5mn later.&lt;BR /&gt;No clue of what appends during this period, but the first query appears to be running in pg_stat_activity (waiting = false) during 5mn, no lock on DB, and consume 100% of one CPU thread.&lt;/P&gt;&lt;P&gt;On client side (alfresco webapp), log have been captured using p6spy, and we cleary see that some queries are executing during 5mn or more.&lt;/P&gt;&lt;P&gt;Modifying the default value 'db.pool.abandoned.time=300' to 180 seems to have an effect (execution time fall to 3 mn).&lt;/P&gt;&lt;P&gt;I suspect some kind of congestion on DB server side (temp files, cache buffer..) but I still can't find the root cause of this issue.&lt;/P&gt;&lt;P&gt;I'll try to add following params to server log (as per your advise to check query plan) and see&lt;/P&gt;&lt;P&gt;&amp;nbsp;debug_print_parse = on&lt;BR /&gt;&amp;nbsp;debug_print_rewritten = on&lt;BR /&gt;&amp;nbsp;debug_print_plan = on&lt;BR /&gt;&amp;nbsp;debug_pretty_print = on&lt;/P&gt;&lt;P&gt;Any advice are welcomed (especially on how to monitor postgreSQL resources usage like temp files, memory...)&lt;/P&gt;&lt;P&gt;I'll post any interesting result.&lt;BR /&gt;Vincent&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 02 Jan 2018 14:05:52 GMT</pubDate>
      <guid>https://connect.hyland.com/t5/alfresco-forum/poor-tmq-peformances-vs-sql/m-p/33513#M14165</guid>
      <dc:creator>vincent-kali</dc:creator>
      <dc:date>2018-01-02T14:05:52Z</dc:date>
    </item>
    <item>
      <title>Re: poor TMQ peformances vs SQL</title>
      <link>https://connect.hyland.com/t5/alfresco-forum/poor-tmq-peformances-vs-sql/m-p/33514#M14166</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi,&lt;/P&gt;&lt;P&gt;Pure PostgreSQL issue, moved here: &lt;A href="https://stackoverflow.com/questions/48077136/postgresql-queries-randomly-takes-minutes-to-execute" rel="nofollow noopener noreferrer"&gt;https://stackoverflow.com/questions/48077136/postgresql-queries-randomly-takes-minutes-to-execute&lt;/A&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Axel, I think you're right about the query optimiser that&amp;nbsp;"for some temporary reason&amp;nbsp;chooses a different query plan".&lt;/P&gt;&lt;P&gt;Strange thing: it does not appear when executing direct SQL (outside alfresco transaction).&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I'll post here any interesting feedback.&lt;/P&gt;&lt;P&gt;Vincent&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 03 Jan 2018 12:16:11 GMT</pubDate>
      <guid>https://connect.hyland.com/t5/alfresco-forum/poor-tmq-peformances-vs-sql/m-p/33514#M14166</guid>
      <dc:creator>vincent-kali</dc:creator>
      <dc:date>2018-01-03T12:16:11Z</dc:date>
    </item>
    <item>
      <title>Re: poor TMQ peformances vs SQL</title>
      <link>https://connect.hyland.com/t5/alfresco-forum/poor-tmq-peformances-vs-sql/m-p/33515#M14167</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;I finally did the following test:&lt;BR /&gt;- Execute a search service sample query and capture SQL queries (from client side using P6SPY).&lt;BR /&gt;&amp;nbsp;The set of query captured are added below.&lt;/P&gt;&lt;P&gt;- In a batch file, execute this sample query 10 times (using curl to call the repo webservice)&lt;BR /&gt;&amp;nbsp;-&amp;gt; reproduce the problem described above: a query is stuck during minutes&lt;BR /&gt;- Execute 10 times the set of SQL queries using pgsql&lt;BR /&gt;&amp;nbsp;-&amp;gt; problem can never be reproduced&lt;/P&gt;&lt;P&gt;It lead me to think that the issue is not on server side.&lt;BR /&gt;BTW I followed Axel's advises about statistics granularity and noticed a real gain of performance, but issue remains.&lt;/P&gt;&lt;P&gt;Any idea of where to look at on application side ? (jdbc driver, spring transaction manager....?)&lt;/P&gt;&lt;P&gt;Thanks.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;SQL queries captured from the sample search:&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;code&amp;gt;&lt;/P&gt;&lt;P&gt;BEGIN;&lt;BR /&gt;SELECT 1;&lt;BR /&gt;select * from alf_qname where ns_id = 6 and local_name = 'modified';&lt;BR /&gt;select node.id as id from alf_node node where node.type_qname_id &amp;lt;&amp;gt; 149 AND node.store_id = 6 AND ( node.id IN (select aspect.node_id from alf_node_aspects aspect where aspect.qname_id IN ( 260 ) ) AND node.id IN ( select PROP.node_id from alf_node_properties PROP where (249 = PROP.qname_id) AND PROP.string_value = 'Mandats' ) AND node.id IN ( select PROP.node_id from alf_node_properties PROP where (245 = PROP.qname_id) AND PROP.string_value = '1' ) AND node.id IN ( select PROP.node_id from alf_node_properties PROP where (247 = PROP.qname_id) AND PROP.string_value = '939473' ) AND node.id IN ( select PROP.node_id from alf_node_properties PROP where (248 = PROP.qname_id) AND PROP.string_value = 'AG6091' ) ) order by node.audit_modified DESC;&lt;BR /&gt;select node.id as id, node.version as version, store.id as store_id, store.protocol as protocol, store.identifier as identifier, node.uuid as uuid, node.type_qname_id as type_qname_id, node.locale_id as locale_id, node.acl_id as acl_id, txn.id as txn_id, txn.change_txn_id as txn_change_id, node.audit_creator as audit_creator, node.audit_created as audit_created, node.audit_modifier as audit_modifier, node.audit_modified as audit_modified, node.audit_accessed as audit_accessed from alf_node node join alf_store store on (store.id = node.store_id) join alf_transaction txn on (txn.id = node.transaction_id) where node.id = 1956578;&lt;BR /&gt;select node.id as id, node.version as version, store.id as store_id, store.protocol as protocol, store.identifier as identifier, node.uuid as uuid, node.type_qname_id as type_qname_id, node.locale_id as locale_id, node.acl_id as acl_id, txn.id as txn_id, txn.change_txn_id as txn_change_id, node.audit_creator as audit_creator, node.audit_created as audit_created, node.audit_modifier as audit_modifier, node.audit_modified as audit_modified, node.audit_accessed as audit_accessed from alf_node node join alf_store store on (store.id = node.store_id) join alf_transaction txn on (txn.id = node.transaction_id) where node.id = 26982441;&lt;BR /&gt;select * from alf_access_control_list where id = 76;&lt;BR /&gt;select ace.allowed, ace.applies, authority.authority, ace.permission_id, aclmem.pos, aclmem.id as aclmem_id from alf_acl_member aclmem join alf_access_control_list acl on (aclmem.acl_id = acl.id) join alf_access_control_entry ace on (aclmem.ace_id = ace.id) join alf_authority authority on (ace.authority_id = authority.id) where acl.id = 76;&lt;BR /&gt;select * from alf_permission where id = 8;&lt;BR /&gt;select * from alf_permission where id = 9;&lt;BR /&gt;select * from alf_permission where id = 10;&lt;BR /&gt;select * from alf_permission where id = 11;&lt;BR /&gt;select assoc.id as id, parentNode.id as parentNodeId, parentNode.version as parentNodeVersion, parentStore.protocol as parentNodeProtocol, parentStore.identifier as parentNodeIdentifier, parentNode.uuid as parentNodeUuid, childNode.id as childNodeId, childNode.version as childNodeVersion, childStore.protocol as childNodeProtocol, childStore.identifier as childNodeIdentifier, childNode.uuid as childNodeUuid, assoc.type_qname_id as type_qname_id, assoc.child_node_name_crc as child_node_name_crc, assoc.child_node_name as child_node_name, assoc.qname_ns_id as qname_ns_id, assoc.qname_localname as qname_localname, assoc.is_primary as is_primary, assoc.assoc_index as assoc_index from alf_child_assoc assoc join alf_node parentNode on (parentNode.id = assoc.parent_node_id) join alf_store parentStore on (parentStore.id = parentNode.store_id) join alf_node childNode on (childNode.id = assoc.child_node_id) join alf_store childStore on (childStore.id = childNode.store_id) where parentNode.id = 477 and assoc.type_qname_id = 4 and assoc.qname_crc = 2226085765 and assoc.qname_ns_id = 6 and assoc.qname_localname = 'GROUP_site_mandats_SiteCollaborator' order by assoc.assoc_index ASC, assoc.id ASC;&lt;BR /&gt;select '' as child_name, parentName.string_value as parent_name from alf_child_assoc ca join alf_node childNode on ((childNode.id = ca.child_node_id) and (childNode.store_id = 6)) join alf_node parentNode on ((parentNode.id = ca.parent_node_id) and (parentNode.type_qname_id = 89) and (parentNode.store_id = 6)) join alf_node_properties parentName on (parentName.node_id = parentNode.id and parentName.qname_id = 90) where ca.type_qname_id = 93 and childNode.id = 32;&lt;BR /&gt;select assoc.id as id, parentNode.id as parentNodeId, parentNode.version as parentNodeVersion, parentStore.protocol as parentNodeProtocol, parentStore.identifier as parentNodeIdentifier, parentNode.uuid as parentNodeUuid, childNode.id as childNodeId, childNode.version as childNodeVersion, childStore.protocol as childNodeProtocol, childStore.identifier as childNodeIdentifier, childNode.uuid as childNodeUuid, assoc.type_qname_id as type_qname_id, assoc.child_node_name_crc as child_node_name_crc, assoc.child_node_name as child_node_name, assoc.qname_ns_id as qname_ns_id, assoc.qname_localname as qname_localname, assoc.is_primary as is_primary, assoc.assoc_index as assoc_index from alf_child_assoc assoc join alf_node parentNode on (parentNode.id = assoc.parent_node_id) join alf_store parentStore on (parentStore.id = parentNode.store_id) join alf_node childNode on (childNode.id = assoc.child_node_id) join alf_store childStore on (childStore.id = childNode.store_id) where parentNode.id = 477 and assoc.type_qname_id = 4 and assoc.qname_crc = 1767095639 and assoc.qname_ns_id = 6 and assoc.qname_localname = 'GROUP_site_mandats_SiteManager' order by assoc.assoc_index ASC, assoc.id ASC;&lt;BR /&gt;select node.id as id, node.version as version, store.id as store_id, store.protocol as protocol, store.identifier as identifier, node.uuid as uuid, node.type_qname_id as type_qname_id, node.locale_id as locale_id, node.acl_id as acl_id, txn.id as txn_id, txn.change_txn_id as txn_change_id, node.audit_creator as audit_creator, node.audit_created as audit_created, node.audit_modifier as audit_modifier, node.audit_modified as audit_modified, node.audit_accessed as audit_accessed from alf_node node join alf_store store on (store.id = node.store_id) join alf_transaction txn on (txn.id = node.transaction_id) where node.id = 26978488;&lt;BR /&gt;select node.id as id, node.version as version, store.id as store_id, store.protocol as protocol, store.identifier as identifier, node.uuid as uuid, node.type_qname_id as type_qname_id, node.locale_id as locale_id, node.acl_id as acl_id, txn.id as txn_id, txn.change_txn_id as txn_change_id, node.audit_creator as audit_creator, node.audit_created as audit_created, node.audit_modifier as audit_modifier, node.audit_modified as audit_modified, node.audit_accessed as audit_accessed from alf_node node join alf_store store on (store.id = node.store_id) join alf_transaction txn on (txn.id = node.transaction_id) where node.id = 26978486;&lt;BR /&gt;...&lt;BR /&gt;select node.id as id, node.version as version, store.id as store_id, store.protocol as protocol, store.identifier as identifier, node.uuid as uuid, node.type_qname_id as type_qname_id, node.locale_id as locale_id, node.acl_id as acl_id, txn.id as txn_id, txn.change_txn_id as txn_change_id, node.audit_creator as audit_creator, node.audit_created as audit_created, node.audit_modifier as audit_modifier, node.audit_modified as audit_modified, node.audit_accessed as audit_accessed from alf_node node join alf_store store on (store.id = node.store_id) join alf_transaction txn on (txn.id = node.transaction_id) where node.id = 1956574;&lt;BR /&gt;COMMIT;&lt;/P&gt;&lt;P&gt;&amp;lt;/code&amp;gt;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sun, 07 Jan 2018 21:41:28 GMT</pubDate>
      <guid>https://connect.hyland.com/t5/alfresco-forum/poor-tmq-peformances-vs-sql/m-p/33515#M14167</guid>
      <dc:creator>vincent-kali</dc:creator>
      <dc:date>2018-01-07T21:41:28Z</dc:date>
    </item>
    <item>
      <title>Re: poor TMQ peformances vs SQL</title>
      <link>https://connect.hyland.com/t5/alfresco-forum/poor-tmq-peformances-vs-sql/m-p/33516#M14168</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Be careful though with how you run the captured SQL. What you have listed in your post is the "effective SQL query", i.e. with all the parameters filled in. But Alfresco actually does execute this using a prepared statement. So in order to run the SQL query in a comparative way to the web service, you need to use the proper&amp;nbsp;PREPARE and EXECUTE directives, instead of just running the effective SQL.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Would it be possible for you to attach the raw spy.log file, so it is possible to see which queries take what amount of time?&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sun, 07 Jan 2018 23:24:56 GMT</pubDate>
      <guid>https://connect.hyland.com/t5/alfresco-forum/poor-tmq-peformances-vs-sql/m-p/33516#M14168</guid>
      <dc:creator>afaust</dc:creator>
      <dc:date>2018-01-07T23:24:56Z</dc:date>
    </item>
    <item>
      <title>Re: poor TMQ peformances vs SQL</title>
      <link>https://connect.hyland.com/t5/alfresco-forum/poor-tmq-peformances-vs-sql/m-p/33517#M14169</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;OK&amp;nbsp;I'll do that using a prepared statement as alf does (but I don't see any 'prepare' statement in spy.log, maybe is this normal ?&amp;nbsp;I'm not familiar with SQL prepared statement ...).&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;The spy.log file is available &lt;A href="https://kali-docs.ks2.fr/share/s/ooGD5pCoT8WiH_TPMOzJnw" rel="nofollow noopener noreferrer"&gt;here&lt;/A&gt; (quite big, around 20MB).&lt;/P&gt;&lt;P&gt;Long queries are found at lines 48496 and 48592.&lt;/P&gt;&lt;P&gt;Thanks for your help....&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Vincent&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Mon, 08 Jan 2018 15:39:20 GMT</pubDate>
      <guid>https://connect.hyland.com/t5/alfresco-forum/poor-tmq-peformances-vs-sql/m-p/33517#M14169</guid>
      <dc:creator>vincent-kali</dc:creator>
      <dc:date>2018-01-08T15:39:20Z</dc:date>
    </item>
    <item>
      <title>Re: poor TMQ peformances vs SQL</title>
      <link>https://connect.hyland.com/t5/alfresco-forum/poor-tmq-peformances-vs-sql/m-p/33518#M14170</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;P6Spy does logical logging&amp;nbsp;on the JDBC layer. You will not see the PREPARE / EXECUTE commands that using a prepared statement entails in raw SQL in the P6Spy log - that is where these two columns of statements comes in. The&amp;nbsp;last column is the effective statement, and the column before is the actually used prepared statement.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;So in your case you'd need to run a PREPARE + EXPLAIN ANALYZE EXECUTE + DEALLOCATE PREPARE cycle on&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;PRE class="line-numbers language-sql"&gt;&lt;CODE&gt;&lt;SPAN class="keyword token"&gt;select&lt;/SPAN&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; node&lt;SPAN class="punctuation token"&gt;.&lt;/SPAN&gt;id &lt;SPAN class="keyword token"&gt;as&lt;/SPAN&gt; id&lt;BR /&gt;&lt;SPAN class="keyword token"&gt;from&lt;/SPAN&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; alf_node node&lt;BR /&gt;&lt;SPAN class="keyword token"&gt;where&lt;/SPAN&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; node&lt;SPAN class="punctuation token"&gt;.&lt;/SPAN&gt;type_qname_id &lt;SPAN class="operator token"&gt;&amp;lt;&amp;gt;&lt;/SPAN&gt; ?&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &lt;SPAN class="operator token"&gt;AND&lt;/SPAN&gt; node&lt;SPAN class="punctuation token"&gt;.&lt;/SPAN&gt;store_id &lt;SPAN class="operator token"&gt;=&lt;/SPAN&gt; ?&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &lt;SPAN class="operator token"&gt;AND&lt;/SPAN&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; node&lt;SPAN class="punctuation token"&gt;.&lt;/SPAN&gt;id &lt;SPAN class="operator token"&gt;IN&lt;/SPAN&gt; &lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;&lt;SPAN class="keyword token"&gt;select&lt;/SPAN&gt; aspect&lt;SPAN class="punctuation token"&gt;.&lt;/SPAN&gt;node_id &lt;SPAN class="keyword token"&gt;from&lt;/SPAN&gt; alf_node_aspects aspect &lt;SPAN class="keyword token"&gt;where&lt;/SPAN&gt; aspect&lt;SPAN class="punctuation token"&gt;.&lt;/SPAN&gt;qname_id &lt;SPAN class="operator token"&gt;IN&lt;/SPAN&gt;&amp;nbsp; &lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;&amp;nbsp; ? &lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt; &lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN class="operator token"&gt;AND&lt;/SPAN&gt; node&lt;SPAN class="punctuation token"&gt;.&lt;/SPAN&gt;id &lt;SPAN class="operator token"&gt;IN&lt;/SPAN&gt; &lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;&lt;SPAN class="keyword token"&gt;select&lt;/SPAN&gt; PROP&lt;SPAN class="punctuation token"&gt;.&lt;/SPAN&gt;node_id &lt;SPAN class="keyword token"&gt;from&lt;/SPAN&gt; alf_node_properties PROP &lt;SPAN class="keyword token"&gt;where&lt;/SPAN&gt; &lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;? &lt;SPAN class="operator token"&gt;=&lt;/SPAN&gt; PROP&lt;SPAN class="punctuation token"&gt;.&lt;/SPAN&gt;qname_id&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt; &lt;SPAN class="operator token"&gt;AND&lt;/SPAN&gt; PROP&lt;SPAN class="punctuation token"&gt;.&lt;/SPAN&gt;string_value &lt;SPAN class="operator token"&gt;=&lt;/SPAN&gt; ?&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN class="operator token"&gt;AND&lt;/SPAN&gt; node&lt;SPAN class="punctuation token"&gt;.&lt;/SPAN&gt;id &lt;SPAN class="operator token"&gt;IN&lt;/SPAN&gt; &lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;&lt;SPAN class="keyword token"&gt;select&lt;/SPAN&gt; PROP&lt;SPAN class="punctuation token"&gt;.&lt;/SPAN&gt;node_id &lt;SPAN class="keyword token"&gt;from&lt;/SPAN&gt; alf_node_properties PROP &lt;SPAN class="keyword token"&gt;where&lt;/SPAN&gt; &lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;? &lt;SPAN class="operator token"&gt;=&lt;/SPAN&gt; PROP&lt;SPAN class="punctuation token"&gt;.&lt;/SPAN&gt;qname_id&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt; &lt;SPAN class="operator token"&gt;AND&lt;/SPAN&gt; PROP&lt;SPAN class="punctuation token"&gt;.&lt;/SPAN&gt;string_value &lt;SPAN class="operator token"&gt;=&lt;/SPAN&gt; ?&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN class="operator token"&gt;AND&lt;/SPAN&gt; node&lt;SPAN class="punctuation token"&gt;.&lt;/SPAN&gt;id &lt;SPAN class="operator token"&gt;IN&lt;/SPAN&gt; &lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;&lt;SPAN class="keyword token"&gt;select&lt;/SPAN&gt; PROP&lt;SPAN class="punctuation token"&gt;.&lt;/SPAN&gt;node_id &lt;SPAN class="keyword token"&gt;from&lt;/SPAN&gt; alf_node_properties PROP &lt;SPAN class="keyword token"&gt;where&lt;/SPAN&gt; &lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;? &lt;SPAN class="operator token"&gt;=&lt;/SPAN&gt; PROP&lt;SPAN class="punctuation token"&gt;.&lt;/SPAN&gt;qname_id&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt; &lt;SPAN class="operator token"&gt;AND&lt;/SPAN&gt; PROP&lt;SPAN class="punctuation token"&gt;.&lt;/SPAN&gt;string_value &lt;SPAN class="operator token"&gt;=&lt;/SPAN&gt; ?&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN class="operator token"&gt;AND&lt;/SPAN&gt; node&lt;SPAN class="punctuation token"&gt;.&lt;/SPAN&gt;id &lt;SPAN class="operator token"&gt;IN&lt;/SPAN&gt; &lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;&lt;SPAN class="keyword token"&gt;select&lt;/SPAN&gt; PROP&lt;SPAN class="punctuation token"&gt;.&lt;/SPAN&gt;node_id &lt;SPAN class="keyword token"&gt;from&lt;/SPAN&gt; alf_node_properties PROP &lt;SPAN class="keyword token"&gt;where&lt;/SPAN&gt; &lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;? &lt;SPAN class="operator token"&gt;=&lt;/SPAN&gt; PROP&lt;SPAN class="punctuation token"&gt;.&lt;/SPAN&gt;qname_id&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt; &lt;SPAN class="operator token"&gt;AND&lt;/SPAN&gt; PROP&lt;SPAN class="punctuation token"&gt;.&lt;/SPAN&gt;string_value &lt;SPAN class="operator token"&gt;=&lt;/SPAN&gt; ?&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN class="keyword token"&gt;order&lt;/SPAN&gt; &lt;SPAN class="keyword token"&gt;by&lt;/SPAN&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; node&lt;SPAN class="punctuation token"&gt;.&lt;/SPAN&gt;audit_modified &lt;SPAN class="keyword token"&gt;DESC&lt;/SPAN&gt;&lt;SPAN class="line-numbers-rows"&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/CODE&gt;&lt;/PRE&gt;&lt;P&gt;for the parameters:&amp;nbsp;149,&amp;nbsp;6,&amp;nbsp;260,&amp;nbsp;249, 'Mandats',&amp;nbsp;245, '1',&amp;nbsp;247, '989179',&amp;nbsp;248, 'AGA02004'&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Mon, 08 Jan 2018 18:35:48 GMT</pubDate>
      <guid>https://connect.hyland.com/t5/alfresco-forum/poor-tmq-peformances-vs-sql/m-p/33518#M14170</guid>
      <dc:creator>afaust</dc:creator>
      <dc:date>2018-01-08T18:35:48Z</dc:date>
    </item>
    <item>
      <title>Re: poor TMQ peformances vs SQL</title>
      <link>https://connect.hyland.com/t5/alfresco-forum/poor-tmq-peformances-vs-sql/m-p/33519#M14171</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi Axel,&lt;/P&gt;&lt;P&gt;Thanks a lot for your feedbacks.&lt;/P&gt;&lt;P&gt;According to PostgreSQL doc "Prepared statements only last for the duration of the current database session".&lt;/P&gt;&lt;P&gt;How to understand this in connection pool context ? In other words, should I execute a prepare statement only once, at the beginning of the query batch, or before each query ? (i.e does a user http connexion map to a SQL session ?).&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;(I'll anyway run a set of tests using prepare and post results).&lt;/P&gt;&lt;P&gt;Vincent&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 11 Jan 2018 15:05:40 GMT</pubDate>
      <guid>https://connect.hyland.com/t5/alfresco-forum/poor-tmq-peformances-vs-sql/m-p/33519#M14171</guid>
      <dc:creator>vincent-kali</dc:creator>
      <dc:date>2018-01-11T15:05:40Z</dc:date>
    </item>
    <item>
      <title>Re: poor TMQ peformances vs SQL</title>
      <link>https://connect.hyland.com/t5/alfresco-forum/poor-tmq-peformances-vs-sql/m-p/33520#M14172</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;You can explicitly deallocate a prepared statement with the DEALLOCATE PREPARE command I mentioned. Alfresco (iBatis) will close the prepared statement after each use, which is - as far as I know - similar to deallocating it.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 11 Jan 2018 20:40:02 GMT</pubDate>
      <guid>https://connect.hyland.com/t5/alfresco-forum/poor-tmq-peformances-vs-sql/m-p/33520#M14172</guid>
      <dc:creator>afaust</dc:creator>
      <dc:date>2018-01-11T20:40:02Z</dc:date>
    </item>
    <item>
      <title>Re: poor TMQ peformances vs SQL</title>
      <link>https://connect.hyland.com/t5/alfresco-forum/poor-tmq-peformances-vs-sql/m-p/33521#M14173</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;When looping the query below, I can't reproduce the issue.&lt;/P&gt;&lt;P&gt;Should I run the full query sequence (with acl checks) with prepare/deallocate for each single query ?&lt;/P&gt;&lt;P&gt;Should I deallocate after every execute (does it&amp;nbsp;make&amp;nbsp;sense ?).&lt;/P&gt;&lt;P&gt;(+ dummy question: I can't format&amp;nbsp;code properly&amp;nbsp;in forum, any help page anywhere ?)&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;PRE class="line-numbers language-sql"&gt;&lt;CODE&gt;PREPARE queryNodes &lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;&lt;SPAN class="keyword token"&gt;bigint&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt; &lt;SPAN class="keyword token"&gt;AS&lt;/SPAN&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &lt;SPAN class="keyword token"&gt;select&lt;/SPAN&gt;&amp;nbsp; node&lt;SPAN class="punctuation token"&gt;.&lt;/SPAN&gt;id &lt;SPAN class="keyword token"&gt;as&lt;/SPAN&gt; id&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &lt;SPAN class="keyword token"&gt;from&lt;/SPAN&gt; alf_node node&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &lt;SPAN class="keyword token"&gt;where&lt;/SPAN&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; node&lt;SPAN class="punctuation token"&gt;.&lt;/SPAN&gt;type_qname_id &lt;SPAN class="operator token"&gt;&amp;lt;&amp;gt;&lt;/SPAN&gt; $&lt;SPAN class="number token"&gt;1&lt;/SPAN&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN class="operator token"&gt;AND&lt;/SPAN&gt; node&lt;SPAN class="punctuation token"&gt;.&lt;/SPAN&gt;store_id &lt;SPAN class="operator token"&gt;=&lt;/SPAN&gt; $&lt;SPAN class="number token"&gt;2&lt;/SPAN&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN class="operator token"&gt;AND&lt;/SPAN&gt; &lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; node&lt;SPAN class="punctuation token"&gt;.&lt;/SPAN&gt;id &lt;SPAN class="operator token"&gt;IN&lt;/SPAN&gt; &lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;&lt;SPAN class="keyword token"&gt;select&lt;/SPAN&gt; aspect&lt;SPAN class="punctuation token"&gt;.&lt;/SPAN&gt;node_id &lt;SPAN class="keyword token"&gt;from&lt;/SPAN&gt; alf_node_aspects aspect &lt;SPAN class="keyword token"&gt;where&lt;/SPAN&gt; aspect&lt;SPAN class="punctuation token"&gt;.&lt;/SPAN&gt;qname_id &lt;SPAN class="operator token"&gt;IN&lt;/SPAN&gt; &lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt; $&lt;SPAN class="number token"&gt;3&lt;/SPAN&gt; &lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt; &lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN class="operator token"&gt;AND&lt;/SPAN&gt; node&lt;SPAN class="punctuation token"&gt;.&lt;/SPAN&gt;id &lt;SPAN class="operator token"&gt;IN&lt;/SPAN&gt; &lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt; &lt;SPAN class="keyword token"&gt;select&lt;/SPAN&gt; PROP&lt;SPAN class="punctuation token"&gt;.&lt;/SPAN&gt;node_id &lt;SPAN class="keyword token"&gt;from&lt;/SPAN&gt; alf_node_properties PROP &lt;SPAN class="keyword token"&gt;where&lt;/SPAN&gt; &lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;$&lt;SPAN class="number token"&gt;4&lt;/SPAN&gt; &lt;SPAN class="operator token"&gt;=&lt;/SPAN&gt; PROP&lt;SPAN class="punctuation token"&gt;.&lt;/SPAN&gt;qname_id&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt; &lt;SPAN class="operator token"&gt;AND&lt;/SPAN&gt; PROP&lt;SPAN class="punctuation token"&gt;.&lt;/SPAN&gt;string_value &lt;SPAN class="operator token"&gt;=&lt;/SPAN&gt; $&lt;SPAN class="number token"&gt;5&lt;/SPAN&gt; &lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt; &lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN class="operator token"&gt;AND&lt;/SPAN&gt; node&lt;SPAN class="punctuation token"&gt;.&lt;/SPAN&gt;id &lt;SPAN class="operator token"&gt;IN&lt;/SPAN&gt; &lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt; &lt;SPAN class="keyword token"&gt;select&lt;/SPAN&gt; PROP&lt;SPAN class="punctuation token"&gt;.&lt;/SPAN&gt;node_id &lt;SPAN class="keyword token"&gt;from&lt;/SPAN&gt; alf_node_properties PROP &lt;SPAN class="keyword token"&gt;where&lt;/SPAN&gt; &lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;$&lt;SPAN class="number token"&gt;6&lt;/SPAN&gt; &lt;SPAN class="operator token"&gt;=&lt;/SPAN&gt; PROP&lt;SPAN class="punctuation token"&gt;.&lt;/SPAN&gt;qname_id&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt; &lt;SPAN class="operator token"&gt;AND&lt;/SPAN&gt; PROP&lt;SPAN class="punctuation token"&gt;.&lt;/SPAN&gt;string_value &lt;SPAN class="operator token"&gt;=&lt;/SPAN&gt; $&lt;SPAN class="number token"&gt;7&lt;/SPAN&gt; &lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt; &lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN class="operator token"&gt;AND&lt;/SPAN&gt; node&lt;SPAN class="punctuation token"&gt;.&lt;/SPAN&gt;id &lt;SPAN class="operator token"&gt;IN&lt;/SPAN&gt; &lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt; &lt;SPAN class="keyword token"&gt;select&lt;/SPAN&gt; PROP&lt;SPAN class="punctuation token"&gt;.&lt;/SPAN&gt;node_id &lt;SPAN class="keyword token"&gt;from&lt;/SPAN&gt; alf_node_properties PROP &lt;SPAN class="keyword token"&gt;where&lt;/SPAN&gt; &lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;$&lt;SPAN class="number token"&gt;8&lt;/SPAN&gt; &lt;SPAN class="operator token"&gt;=&lt;/SPAN&gt; PROP&lt;SPAN class="punctuation token"&gt;.&lt;/SPAN&gt;qname_id&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt; &lt;SPAN class="operator token"&gt;AND&lt;/SPAN&gt; PROP&lt;SPAN class="punctuation token"&gt;.&lt;/SPAN&gt;string_value &lt;SPAN class="operator token"&gt;=&lt;/SPAN&gt; $&lt;SPAN class="number token"&gt;9&lt;/SPAN&gt; &lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt; &lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN class="operator token"&gt;AND&lt;/SPAN&gt; node&lt;SPAN class="punctuation token"&gt;.&lt;/SPAN&gt;id &lt;SPAN class="operator token"&gt;IN&lt;/SPAN&gt; &lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt; &lt;SPAN class="keyword token"&gt;select&lt;/SPAN&gt; PROP&lt;SPAN class="punctuation token"&gt;.&lt;/SPAN&gt;node_id &lt;SPAN class="keyword token"&gt;from&lt;/SPAN&gt; alf_node_properties PROP &lt;SPAN class="keyword token"&gt;where&lt;/SPAN&gt; &lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;$&lt;SPAN class="number token"&gt;10&lt;/SPAN&gt; &lt;SPAN class="operator token"&gt;=&lt;/SPAN&gt; PROP&lt;SPAN class="punctuation token"&gt;.&lt;/SPAN&gt;qname_id&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt; &lt;SPAN class="operator token"&gt;AND&lt;/SPAN&gt; PROP&lt;SPAN class="punctuation token"&gt;.&lt;/SPAN&gt;string_value &lt;SPAN class="operator token"&gt;=&lt;/SPAN&gt; $&lt;SPAN class="number token"&gt;11&lt;/SPAN&gt; &lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt; &lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt; &lt;BR /&gt;&amp;nbsp;&amp;nbsp; &lt;SPAN class="keyword token"&gt;order&lt;/SPAN&gt; &lt;SPAN class="keyword token"&gt;by&lt;/SPAN&gt; node&lt;SPAN class="punctuation token"&gt;.&lt;/SPAN&gt;audit_modified &lt;SPAN class="keyword token"&gt;DESC&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN class="punctuation token"&gt;;&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN class="keyword token"&gt;EXECUTE&lt;/SPAN&gt; queryNodes &lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;&lt;SPAN class="number token"&gt;149&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;,&lt;/SPAN&gt; &lt;SPAN class="number token"&gt;6&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;,&lt;/SPAN&gt; &lt;SPAN class="number token"&gt;260&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;,&lt;/SPAN&gt; &lt;SPAN class="number token"&gt;249&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;,&lt;/SPAN&gt; &lt;SPAN class="string token"&gt;'Mandats'&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;,&lt;/SPAN&gt; &lt;SPAN class="number token"&gt;245&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;,&lt;/SPAN&gt; &lt;SPAN class="string token"&gt;'1'&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;,&lt;/SPAN&gt; &lt;SPAN class="number token"&gt;247&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;,&lt;/SPAN&gt; &lt;SPAN class="string token"&gt;'789616'&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;,&lt;/SPAN&gt; &lt;SPAN class="number token"&gt;248&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;,&lt;/SPAN&gt; &lt;SPAN class="string token"&gt;'AG7912'&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN class="keyword token"&gt;DEALLOCATE&lt;/SPAN&gt; queryNodes&lt;SPAN class="punctuation token"&gt;;&lt;/SPAN&gt;&lt;SPAN class="line-numbers-rows"&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/CODE&gt;&lt;/PRE&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Edited by &lt;A __default_attr="73554" __jive_macro_name="user" _jive_internal="true" data-id="73554" data-objecttype="3" data-type="person" href="https://community.alfresco.com/people/afaust" rel="nofollow noopener noreferrer"&gt;&lt;/A&gt;‌ to show syntax highlighting (via expanded editor toolbar =&amp;gt; "More" menu =&amp;gt; "Syntax highlighter"&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sun, 14 Jan 2018 21:34:02 GMT</pubDate>
      <guid>https://connect.hyland.com/t5/alfresco-forum/poor-tmq-peformances-vs-sql/m-p/33521#M14173</guid>
      <dc:creator>vincent-kali</dc:creator>
      <dc:date>2018-01-14T21:34:02Z</dc:date>
    </item>
    <item>
      <title>Re: poor TMQ peformances vs SQL</title>
      <link>https://connect.hyland.com/t5/alfresco-forum/poor-tmq-peformances-vs-sql/m-p/33522#M14174</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Deallocation after every execute is what Alfresco does implicitly (via the iBatis / MyBatis framework). If&amp;nbsp;doing just this query does not&amp;nbsp;reproduce the issue then you might really have to do the full sequence of queries, if you really want to pinpoint it to a specific constellation so you can provide more data to the PostgreSQL folks. Basically have a tool ready to parse the p6spy log and turn those statements into prepare-execute-deallocate cycles...&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sun, 14 Jan 2018 22:50:08 GMT</pubDate>
      <guid>https://connect.hyland.com/t5/alfresco-forum/poor-tmq-peformances-vs-sql/m-p/33522#M14174</guid>
      <dc:creator>afaust</dc:creator>
      <dc:date>2018-01-14T22:50:08Z</dc:date>
    </item>
  </channel>
</rss>

