Re: Revised Patch to allow multiple table locks in "Unison"
От | Neil Padgett |
---|---|
Тема | Re: Revised Patch to allow multiple table locks in "Unison" |
Дата | |
Msg-id | Pine.LNX.4.33.0107292014420.32586-100000@lacrosse.corp.redhat.com обсуждение исходный текст |
Ответ на | Re: Revised Patch to allow multiple table locks in "Unison" (Hiroshi Inoue <Inoue@tpf.co.jp>) |
Ответы |
Re: Revised Patch to allow multiple table locks in "Unison"
|
Список | pgsql-patches |
On Mon, 30 Jul 2001, Hiroshi Inoue wrote: > I have a question. > What will happen when the second table is locked for a long time > though the first table isn't locked ? Consider the case: LOCK a,b; Assume a is free (i.e. not locked), but b is busy (i.e. locked). First the system will do a blocking lock attempt on a, which will return immediately, since a was free. Table a is now locked. Now, the system will try a non-blocking lock on b. But, b is busy so the lock attempt will fail immediately (since the lock attempt was non-blocking). So, the system will back off, and the lock on a is released. Next, a blocking lock attempt will be made on b. (Since it was busy last time, we want to wait for it to become free.) The lock call will block until b becomes free. At that time, the lock attempt will return, and b will be locked. Then, a non-blocking lock attempt will be made on table a. (Recall that we don't have a lock on it, since we released it during back-off earlier.) Assuming a is still free, it will be locked and the LOCK command will complete. Otherwise, if a is busy, the lock attempt will then restart with a blocking lock attempt on a. The procedure will continue until all tables are free to lock. In summary, no locks are held while waiting for tables to become free -- in essence, the tables are locked all at once, once all tables in the LOCK statement are free. Neil -- Neil Padgett Red Hat Canada Ltd. E-Mail: npadgett@redhat.com 2323 Yonge Street, Suite #300, Toronto, ON M4P 2C9
В списке pgsql-patches по дате отправления: