| From: | Hiroyuki Yamada <yamada(at)kokolink(dot)net> |
|---|---|
| To: | Hiroyuki Yamada <yamada(at)kokolink(dot)net> |
| Cc: | Simon Riggs <simon(at)2ndQuadrant(dot)com>, Heikki Linnakangas <heikki(dot)linnakangas(at)enterprisedb(dot)com>, pgsql-hackers(at)postgresql(dot)org |
| Subject: | Re: An example of bugs for Hot Standby |
| Date: | 2009-12-21 09:38:52 |
| Message-ID: | 200912210938.AA00179@silver.kokolink.net |
| Views: | Whole Thread | Raw Message | Download mbox | Resend email |
| Thread: | |
| Lists: | pgsql-hackers |
>Following question may be redundant. Just a confirmation.
>
>Deadlock example is catstrophic while it's rather a rare event.
>On the other hand, LockBufferForCleanup() can cause another
>problem.
>
> * One idle pin-holder backend can freeze startup process().
>
>This problem is not catstrophic, but it seems a similar problem
>which StandbyAcquireAccessExclusiveLock() tries to avoid.
>
>...Is this the problem you call "general problem" above ?
>
Here is a typical scenario in which startup process freezes until the end of
a certain transaction.
1. Consider a table A, which has pages with HOT chain tuples old enough to be vacuumed.
2. Xact 1 in the standby node declares a cursor for table A, fetches the page
which contains the HOT chain, and becomes idle for some reason.
3. Xact 2 in the active node reads the table A and calls heap_page_prune()
for HOT pruning, which create XLOG_HEAP2_CLEAN record.
4. Startup process tries to redo XLOG_HEAP2_CLEAN record, calls
LockBufferForCleanup() and freezes until the Xact 1 ends.
Note that with HOT pruning, we do not need VACUUM command, and most tables,
which has long history of updation, can be table A.
--
Hiroyuki YAMADA
Kokolink Corporation
yamada(at)kokolink(dot)net
| From | Date | Subject | |
|---|---|---|---|
| Next Message | Hiroyuki Yamada | 2009-12-21 09:42:16 | Re: alpha3 release schedule? |
| Previous Message | Heikki Linnakangas | 2009-12-21 08:55:57 | Re: alpha3 release schedule? |