PostgreSQL nx_vacuum_read_acls takes too long on large database
---------------------------------------------------------------
Key: NXP-8176
URL: https://jira.nuxeo.com/browse/NXP-8176
Project: Nuxeo Enterprise Platform
Issue Type: Improvement
Components: Core SQL Storage
Affects Versions: 5.5
Environment: PostgreSQL 8.3 may be 8.4
Reporter: Benoit Delbosc
The nx_vacuum_read_acls function is called at startup to remove unused acl read
on the aclr table.
The left join on huge table generate a poor query plan at least on PostgreSQL
8.3.
{code}
DELETE FROM aclr WHERE acl_id IN (SELECT r.acl_id FROM aclr AS r
LEFT JOIN hierarchy_read_acl AS h ON r.acl_id=h.acl_id
WHERE h.acl_id IS NULL);
---------------------------
Nested Loop IN Join (cost=0.00..3509.08 rows=166 width=6)
Join Filter: ((r.acl_id)::text = (aclr.acl_id)::text)
-> Seq Scan on aclr (cost=0.00..5.66 rows=166 width=39)
-> Merge Left Join (cost=0.00..106473.28 rows=928778 width=33)
Merge Cond: ((r.acl_id)::text = (h.acl_id)::text)
Filter: (h.acl_id IS NULL)
-> Index Scan using aclr_acl_id_idx on aclr r (cost=0.00..18.74
rows=166 width=33)
-> Index Scan using hierarchy_read_acl_acl_id_idx on
hierarchy_read_acl h (cost=0.00..83234.66 rows=1857557 width=33)
{code}
This should be rewriten to something like this:
{code}
EXPLAIN ANALYZE SELECT acl_id FROM aclr WHERE NOT EXISTS (SELECT 1 FROM
hierarchy_read_acl h WHERE h.acl_id = aclr.acl_id LIMIT 1);
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Seq Scan on aclr (cost=0.00..23.84 rows=83 width=33) (actual
time=3.535..3.535 rows=0 loops=1)
Filter: (NOT (subplan))
SubPlan
-> Limit (cost=0.00..0.11 rows=1 width=0) (actual time=0.020..0.020
rows=1 loops=167)
-> Index Scan using hierarchy_read_acl_acl_id_idx on
hierarchy_read_acl h (cost=0.00..2787.52 rows=25446 width=0) (actual
time=0.019..0.019 rows=1 loops=167)
Index Cond: ((acl_id)::text = ($0)::text)
Total runtime: 3.561 ms
{code}
--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira
_______________________________________________
ECM-tickets mailing list
[email protected]
http://lists.nuxeo.com/mailman/listinfo/ecm-tickets