Re: Avoiding pin scan during btree vacuum
От | Alvaro Herrera |
---|---|
Тема | Re: Avoiding pin scan during btree vacuum |
Дата | |
Msg-id | 20161116174351.udgypagxn424vl43@alvherre.pgsql обсуждение исходный текст |
Ответ на | Re: Avoiding pin scan during btree vacuum (Alvaro Herrera <alvherre@2ndquadrant.com>) |
Ответы |
Re: Avoiding pin scan during btree vacuum
|
Список | pgsql-hackers |
I am ready now to backpatch this to 9.4 and 9.5; here are the patches. They are pretty similar, but some adjustments were needed due to XLog format changes in 9.5. (I kept most of Simon's original commit message.) This patch has survived in master for a long time, and in released 9.6 for a couple of months now. We have a couple of customers running with this patch installed also (who make heavy use of their standbys), without reported problems. Moreover, the next minors for 9.4 and 9.5 are scheduled for February 2017, so unless some major security problem pops up that prompts a more urgent update, we have three months to go before this is released to the masses running 9.4 and 9.5; if a bug crops up in the meantime, we have plenty of time to get it fixed. While reviewing this I noticed a small thinko in the README, which I'm going to patch in 9.6 and master thusly (with the same commit message): diff --git a/src/backend/access/nbtree/README b/src/backend/access/nbtree/README index 067d15c..a3f11da 100644 --- a/src/backend/access/nbtree/README +++ b/src/backend/access/nbtree/README @@ -521,11 +521,12 @@ because it allows running applications to continue while the standby changes state into a normally running server. The interlocking required to avoid returning incorrect results from -MVCC scans is not required on standby nodes. That is because +non-MVCC scans is not required on standby nodes. That is because HeapTupleSatisfiesUpdate(), HeapTupleSatisfiesSelf(), HeapTupleSatisfiesDirty() and HeapTupleSatisfiesVacuum() are only ever used during write transactions, which cannot exist on the standby. -This leaves HeapTupleSatisfiesMVCC() and HeapTupleSatisfiesToast(). +MVCC scans are already protected by definition, so HeapTupleSatisfiesMVCC() +is not a problem. That leaves concern only for HeapTupleSatisfiesToast(). HeapTupleSatisfiesToast() doesn't use MVCC semantics, though that's because it doesn't need to - if the main heap row is visible then the toast rows will also be visible. So as long as we follow a toast -- Álvaro Herrera https://www.2ndQuadrant.com/ PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services
Вложения
В списке pgsql-hackers по дате отправления: