Sun Jan 8 20:32:23 PST 2006
- Previous message: [Slony1-general] Add single sequence to replicated set
- Next message: [Slony1-general] cleanupEvent() doesn't clean out sl_log_1?
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
G'day , My environment is postgres 7.4.8 / Slony 1.1.0 / RHEL4ES on x86. I've got a three-or-four month old slony cluster which currently has a large sl_log_1 table: db=# select count(*) from _slony.sl_log_1; count --------- 1031377 (1 row) I've run the step at http://cbbrowne.com/info/faq.html#AEN42511 and deleted a few old entries from sl_confirm, then waited for the cleanup thread to purge the log table, as well as running the task manually. The FAQ says (in the same entry) "each cleanupEvent run .... is the event in which old data is purged from sl_log_1 and sl_seqlog". However, I've looked at the function as installed in the slony schema and it doesn't do that, as far as I can tell. (attached below) Can anyone give me a pointer to finding where this task does get run? Thanks, Len db=# \df+ _slony.cleanupevent declare v_max_row record; v_min_row record; v_max_sync int8; begin -- ---- -- First remove all but the oldest confirm row per origin,receiver pair -- ---- delete from "_slony".sl_confirm where con_origin not in (select no_id from "_slony".sl_node); delete from "_slony".sl_confirm where con_received not in (select no_id from "_slony".sl_node); -- ---- -- Next remove all but the oldest confirm row per origin,receiver pair. -- Ignore confirmations that are younger than 10 minutes. We currently -- have an not confirmed suspicion that a possibly lost transaction due -- to a server crash might have been visible to another session, and -- that this led to log data that is needed again got removed. -- ---- for v_max_row in select con_origin, con_received, max(con_seqno) as con_seqno from "_slony".sl_confirm where con_timestamp < (CURRENT_TIMESTAMP - '10 min'::interval) group by con_origin, con_received loop delete from "_slony".sl_confirm where con_origin = v_max_row.con_origin and con_received = v_max_row.con_received and con_seqno < v_max_row.con_seqno; end loop; -- ---- -- Then remove all events that are confirmed by all nodes in the -- whole cluster up to the last SYNC -- ---- for v_min_row in select con_origin, min(con_seqno) as con_seqno from "_slony".sl_confirm group by con_origin loop select coalesce(max(ev_seqno), 0) into v_max_sync from "_slony".sl_event where ev_origin = v_min_row.con_origin and ev_seqno <= v_min_row.con_seqno and ev_type = 'SYNC'; if v_max_sync > 0 then delete from "_slony".sl_event where ev_origin = v_min_row.con_origin and ev_seqno < v_max_sync; end if; end loop; return 0; end; | cleaning old data out of sl_confirm, sl_event. Removes all but the last sl_confirm row per (origin,receiver), and then removes all events that are confirmed by all nodes in the whole cluster up to the last SYNC. (1 row) -- Len Walter len.walter at gmail.com http://crookedtimbre.net skype:len.walter
- Previous message: [Slony1-general] Add single sequence to replicated set
- Next message: [Slony1-general] cleanupEvent() doesn't clean out sl_log_1?
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
More information about the Slony1-general mailing list