[open-ils-commits] r19004 - in branches/rel_2_0/Open-ILS/src/sql/Pg: . upgrade (dbs)

svn at svn.open-ils.org svn at svn.open-ils.org
Wed Dec 15 15:24:41 EST 2010


Author: dbs
Date: 2010-12-15 15:24:36 -0500 (Wed, 15 Dec 2010)
New Revision: 19004

Added:
   branches/rel_2_0/Open-ILS/src/sql/Pg/upgrade/0471.schema.asset-call-number-add-sortkey-compound-index.sql
Modified:
   branches/rel_2_0/Open-ILS/src/sql/Pg/002.schema.config.sql
   branches/rel_2_0/Open-ILS/src/sql/Pg/040.schema.asset.sql
   branches/rel_2_0/Open-ILS/src/sql/Pg/1.6.1-2.0-upgrade-db.sql
Log:
Address the call number browsing performance problem raised in LP 690242

The ORDER BY clause currently generated by call number browsing does not
have a sufficient index to use to assist the sorting of the returned rows,
and consequently does a sequential scan of the asset.call_number table.
Which, as you can imagine, is not fast for a system with more than a few
thousand call numbers.

This adds an index specifically to enable the query to go back to an
index scan instead of a sequential scan. We can investigate whether other
indexes should be removed to enable efficient data loading once we've
squashed the sequential scan problem.


Modified: branches/rel_2_0/Open-ILS/src/sql/Pg/002.schema.config.sql
===================================================================
--- branches/rel_2_0/Open-ILS/src/sql/Pg/002.schema.config.sql	2010-12-15 20:22:21 UTC (rev 19003)
+++ branches/rel_2_0/Open-ILS/src/sql/Pg/002.schema.config.sql	2010-12-15 20:24:36 UTC (rev 19004)
@@ -70,7 +70,7 @@
     install_date    TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT NOW()
 );
 
-INSERT INTO config.upgrade_log (version) VALUES ('0470'); -- berick
+INSERT INTO config.upgrade_log (version) VALUES ('0471'); -- dbs
 
 CREATE TABLE config.bib_source (
 	id		SERIAL	PRIMARY KEY,

Modified: branches/rel_2_0/Open-ILS/src/sql/Pg/040.schema.asset.sql
===================================================================
--- branches/rel_2_0/Open-ILS/src/sql/Pg/040.schema.asset.sql	2010-12-15 20:22:21 UTC (rev 19003)
+++ branches/rel_2_0/Open-ILS/src/sql/Pg/040.schema.asset.sql	2010-12-15 20:24:36 UTC (rev 19004)
@@ -297,6 +297,7 @@
 CREATE INDEX asset_call_number_upper_label_id_owning_lib_idx ON asset.call_number (oils_text_as_bytea(label),id,owning_lib);
 CREATE INDEX asset_call_number_label_sortkey ON asset.call_number(oils_text_as_bytea(label_sortkey));
 CREATE UNIQUE INDEX asset_call_number_label_once_per_lib ON asset.call_number (record, owning_lib, label) WHERE deleted = FALSE OR deleted IS FALSE;
+CREATE INDEX asset_call_number_label_sortkey_browse ON asset.call_number(oils_text_as_bytea(label_sortkey), oils_text_as_bytea(label), id, owning_lib) WHERE deleted IS FALSE OR deleted = FALSE;
 CREATE RULE protect_cn_delete AS ON DELETE TO asset.call_number DO INSTEAD UPDATE asset.call_number SET deleted = TRUE WHERE OLD.id = asset.call_number.id;
 CREATE TRIGGER asset_label_sortkey_trigger
     BEFORE UPDATE OR INSERT ON asset.call_number

Modified: branches/rel_2_0/Open-ILS/src/sql/Pg/1.6.1-2.0-upgrade-db.sql
===================================================================
--- branches/rel_2_0/Open-ILS/src/sql/Pg/1.6.1-2.0-upgrade-db.sql	2010-12-15 20:22:21 UTC (rev 19003)
+++ branches/rel_2_0/Open-ILS/src/sql/Pg/1.6.1-2.0-upgrade-db.sql	2010-12-15 20:24:36 UTC (rev 19004)
@@ -19066,6 +19066,9 @@
 -- Speed up item-age browse axis (new books feed)
 CREATE INDEX cp_create_date  ON asset.copy (create_date);
 
+-- Speed up call number browsing
+CREATE INDEX asset_call_number_label_sortkey_browse ON asset.call_number(oils_text_as_bytea(label_sortkey), oils_text_as_bytea(label), id, owning_lib) WHERE deleted IS FALSE OR deleted = FALSE;
+
 \qecho Upgrade script completed.
 \qecho But wait, there's more: please run reingest-1.6-2.0.pl
 \qecho in order to create an SQL script to run to partially reindex 

Copied: branches/rel_2_0/Open-ILS/src/sql/Pg/upgrade/0471.schema.asset-call-number-add-sortkey-compound-index.sql (from rev 19003, trunk/Open-ILS/src/sql/Pg/upgrade/0471.schema.asset-call-number-add-sortkey-compound-index.sql)
===================================================================
--- branches/rel_2_0/Open-ILS/src/sql/Pg/upgrade/0471.schema.asset-call-number-add-sortkey-compound-index.sql	                        (rev 0)
+++ branches/rel_2_0/Open-ILS/src/sql/Pg/upgrade/0471.schema.asset-call-number-add-sortkey-compound-index.sql	2010-12-15 20:24:36 UTC (rev 19004)
@@ -0,0 +1,13 @@
+BEGIN;
+
+INSERT INTO config.upgrade_log (version) VALUES ('0471'); -- dbs
+
+-- Vanquish a sequential scan in call number browsing using the simplest
+-- possible approach; yes, there is duplication with asset.asset_call_number_label_once_per_lib
+-- and asset.asset_call_number_label_sortkey, but let's fix the first problem
+-- and worry about data loading time later if that turns out to be a real
+-- problem.
+
+CREATE INDEX asset_call_number_label_sortkey_browse ON asset.call_number(oils_text_as_bytea(label_sortkey), oils_text_as_bytea(label), id, owning_lib) WHERE deleted IS FALSE OR deleted = FALSE;
+
+COMMIT;



More information about the open-ils-commits mailing list