diff --git a/java/code/src/com/redhat/rhn/common/db/datasource/xml/ErrataCache_queries.xml b/java/code/src/com/redhat/rhn/common/db/datasource/xml/ErrataCache_queries.xml index e925f3dc393e..000ab59ccd4d 100644 --- a/java/code/src/com/redhat/rhn/common/db/datasource/xml/ErrataCache_queries.xml +++ b/java/code/src/com/redhat/rhn/common/db/datasource/xml/ErrataCache_queries.xml @@ -101,7 +101,16 @@ DELETE FROM rhnOrgErrataCacheQueue WHERE org_id = :org_id INSERT INTO rhnServerNeededCache (server_id, package_id, channel_id) - ( SELECT DISTINCT + ( WITH retracted_packages AS ( + SELECT DISTINCT ep.package_id AS pid, sc.server_id AS sid + FROM rhnserverchannel sc + JOIN rhnchannel c ON c.id = sc.channel_id + JOIN rhnchannelerrata ce ON ce.channel_id = c.id + JOIN rhnerrata e ON e.id = ce.errata_id + JOIN rhnerratapackage ep ON ep.errata_id = e.id + WHERE e.advisory_status::text = 'retracted'::text + AND ep.package_id in (%s)) + SELECT DISTINCT S.id as server_id, P.id as package_id, :channel_id as channel_id @@ -118,7 +127,7 @@ DELETE FROM rhnOrgErrataCacheQueue WHERE org_id = :org_id SC.channel_id = :channel_id AND SC.server_id = S.id AND p.id in (%s) - AND NOT EXISTS (SELECT 1 FROM suseServerChannelsRetractedPackagesView WHERE sid = S.id AND pid = P.id) + AND NOT EXISTS (SELECT 1 FROM retracted_packages WHERE sid = S.id AND pid = P.id) AND NOT EXISTS (SELECT 1 FROM suseServerAppStreamHiddenPackagesView WHERE sid = S.id AND pid = P.id) AND p.package_arch_id = spac.package_arch_id AND spac.server_arch_id = s.server_arch_id diff --git a/java/spacewalk-java.changes.oholecek.replace-errata-view-by-select b/java/spacewalk-java.changes.oholecek.replace-errata-view-by-select new file mode 100644 index 000000000000..807601376e90 --- /dev/null +++ b/java/spacewalk-java.changes.oholecek.replace-errata-view-by-select @@ -0,0 +1,2 @@ +- use custom select instead of errata view for better performance + (bsc#1225619) diff --git a/schema/spacewalk/common/views/suseServerChannelsRetractedPackagesView.sql b/schema/spacewalk/common/views/suseServerChannelsRetractedPackagesView.sql index af4610fa564d..afb3772b344e 100644 --- a/schema/spacewalk/common/views/suseServerChannelsRetractedPackagesView.sql +++ b/schema/spacewalk/common/views/suseServerChannelsRetractedPackagesView.sql @@ -4,14 +4,12 @@ -- CREATE OR REPLACE VIEW suseServerChannelsRetractedPackagesView AS - SELECT DISTINCT p.id AS pid, - s.id AS sid - FROM rhnserver s - JOIN rhnserverchannel sc ON s.id = sc.server_id + SELECT DISTINCT ep.package_id AS pid, + sc.server_id AS sid + FROM rhnserverchannel sc JOIN rhnchannel c ON c.id = sc.channel_id JOIN rhnchannelerrata ce ON ce.channel_id = c.id JOIN rhnerrata e ON e.id = ce.errata_id JOIN rhnerratapackage ep ON ep.errata_id = e.id - JOIN rhnpackage p ON p.id = ep.package_id WHERE e.advisory_status::text = 'retracted'::text; diff --git a/schema/spacewalk/susemanager-schema.changes.oholecek.errata-optimizations b/schema/spacewalk/susemanager-schema.changes.oholecek.errata-optimizations new file mode 100644 index 000000000000..c01a2a42d254 --- /dev/null +++ b/schema/spacewalk/susemanager-schema.changes.oholecek.errata-optimizations @@ -0,0 +1 @@ +- remove superfluous joins from errata view diff --git a/schema/spacewalk/upgrade/susemanager-schema-5.1.0-to-susemanager-schema-5.1.1/002-errata-view-optimization.sql b/schema/spacewalk/upgrade/susemanager-schema-5.1.0-to-susemanager-schema-5.1.1/002-errata-view-optimization.sql new file mode 100644 index 000000000000..f03b35a47dfc --- /dev/null +++ b/schema/spacewalk/upgrade/susemanager-schema-5.1.0-to-susemanager-schema-5.1.1/002-errata-view-optimization.sql @@ -0,0 +1,9 @@ +CREATE OR REPLACE VIEW suseServerChannelsRetractedPackagesView AS +SELECT DISTINCT ep.package_id AS pid, + sc.server_id AS sid + FROM rhnserverchannel sc + JOIN rhnchannel c ON c.id = sc.channel_id + JOIN rhnchannelerrata ce ON ce.channel_id = c.id + JOIN rhnerrata e ON e.id = ce.errata_id + JOIN rhnerratapackage ep ON ep.errata_id = e.id + WHERE e.advisory_status::text = 'retracted'::text;