diff options
author | Marko Kreen | 2010-10-27 14:58:49 +0000 |
---|---|---|
committer | Marko Kreen | 2010-11-02 13:41:48 +0000 |
commit | e903caa9a141bffbc1548c89b3e862d6c754181b (patch) | |
tree | 9348d3281be1df49c1a2fcd6b98e5e12e2a22a78 | |
parent | 78472afe1e8857f4ac3b36a1fa13ac4eccd40001 (diff) |
pgq.tune_storage: turn autovac off for queue tables
-rw-r--r-- | sql/pgq/functions/pgq.create_queue.sql | 2 | ||||
-rw-r--r-- | sql/pgq/functions/pgq.tune_storage.sql | 48 | ||||
-rw-r--r-- | sql/pgq/structure/func_internal.sql | 1 |
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 |