summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarko Kreen2010-10-27 14:58:49 +0000
committerMarko Kreen2010-11-02 13:41:48 +0000
commite903caa9a141bffbc1548c89b3e862d6c754181b (patch)
tree9348d3281be1df49c1a2fcd6b98e5e12e2a22a78
parent78472afe1e8857f4ac3b36a1fa13ac4eccd40001 (diff)
pgq.tune_storage: turn autovac off for queue tables
-rw-r--r--sql/pgq/functions/pgq.create_queue.sql2
-rw-r--r--sql/pgq/functions/pgq.tune_storage.sql48
-rw-r--r--sql/pgq/structure/func_internal.sql1
3 files changed, 51 insertions, 0 deletions
diff --git a/sql/pgq/functions/pgq.create_queue.sql b/sql/pgq/functions/pgq.create_queue.sql
index 927a48cb..46ddf9b0 100644
--- a/sql/pgq/functions/pgq.create_queue.sql
+++ b/sql/pgq/functions/pgq.create_queue.sql
@@ -65,6 +65,8 @@ begin
perform pgq.ticker(i_queue_name);
+ perform pgq.tune_storage(i_queue_name);
+
return 1;
end;
$$ language plpgsql security definer;
diff --git a/sql/pgq/functions/pgq.tune_storage.sql b/sql/pgq/functions/pgq.tune_storage.sql
new file mode 100644
index 00000000..945a457c
--- /dev/null
+++ b/sql/pgq/functions/pgq.tune_storage.sql
@@ -0,0 +1,48 @@
+create or replace function pgq.tune_storage(i_queue_name text)
+returns integer as $$
+-- ----------------------------------------------------------------------
+-- Function: pgq.tune_storage(1)
+--
+-- Tunes storage settings for queue data tables
+-- ----------------------------------------------------------------------
+declare
+ tbl text;
+ tbloid oid;
+ q record;
+ i int4;
+ sql text;
+ pgver int4;
+begin
+ pgver := current_setting('server_version_num');
+
+ select * into q
+ from pgq.queue where queue_name = i_queue_name;
+ if not found then
+ return 0;
+ end if;
+
+ for i in 0 .. (q.queue_ntables - 1) loop
+ tbl := q.queue_data_pfx || '_' || i;
+
+ -- set fillfactor
+ sql := 'alter table ' || tbl || ' set (fillfactor = 100';
+
+ -- autovacuum for 8.4+
+ if pgver >= 80400 then
+ sql := sql || ', autovacuum_enabled=off, toast.autovacuum_enabled =off';
+ end if;
+ sql := sql || ')';
+ execute sql;
+
+ -- autovacuum for 8.3
+ if pgver < 80400 then
+ tbloid := tbl::regclass::oid;
+ delete from pg_catalog.pg_autovacuum where vacrelid = tbloid;
+ insert into pg_catalog.pg_autovacuum values (tbloid, false, 0,0,0,0,0,0,0,0);
+ end if;
+ end loop;
+
+ return 1;
+end;
+$$ language plpgsql strict;
+
diff --git a/sql/pgq/structure/func_internal.sql b/sql/pgq/structure/func_internal.sql
index 8f042df8..4d2f750c 100644
--- a/sql/pgq/structure/func_internal.sql
+++ b/sql/pgq/structure/func_internal.sql
@@ -24,6 +24,7 @@
-- Group: Random utility functions
\i functions/pgq.grant_perms.sql
+\i functions/pgq.tune_storage.sql
\i functions/pgq.force_tick.sql
\i functions/pgq.seq_funcs.sql