2018-01-12 8:25 GMT+01:00 Sachin Kotwal <kotsac...@gmail.com>:

> Hi All,
>
> As update operation is "ROW Exclusive" It should not block another update
> operation.
>
>
As long as two processes don't try to update the same row.

In below case we are updating all values for in one column.
>
> It is blocking another update operations.
> It this expected behavior ? Please clarify .
>
>
Yes, it is expected. If you update all rows in a single statement, any
other updates will be blocked till the update-all-rows statement is done.


> 1. Setup database by initializing with pgbench with some scale.
> pgbench -p 5432 -d postgres -s 500 -i -n
>
> 2. pgbench -p 5432 -d postgres -T 1200 -n -c 10
>
> 3. update pgbench_accounts set name ='dummy';
>
> 4. Cancel running pgbench with Ctrl + C.
>
> 5. After canceling pgbench process , we are still able to see running
> transaction by pgbench as below :
>
> select datname, pid, usename, application_name, query_start, state, query
> from pg_stat_activity where state='active' and query not ilike 'END;';
>  datname  | pid  | usename  | application_name |
> query_start            | state  |
>     query
> ----------+------+----------+------------------+------------
> ----------------------+--------+----------------------------
> --------------------------------------
> ------------------------------------------------------------
> --------------------
>  postgres | 6409 | postgres | psql             | 2018-01-11
> 06:11:37.180834+05:30 | active | select datname, pid, usename,
> application_name, query_start, stat
> e, query from pg_stat_activity where state='active' and query not ilike
> 'END;';
>  postgres | 6426 | postgres | psql             | 2018-01-11
> 05:58:22.246781+05:30 | active | update pgbench_accounts set name ='dummy';
>  postgres | 6434 | postgres | pgbench          | 2018-01-11
> 06:00:22.665211+05:30 | active | UPDATE pgbench_accounts SET abalance =
> abalance + 1802 WHERE aid
> = 390426;
>  postgres | 6435 | postgres | pgbench          | 2018-01-11
> 06:00:54.866775+05:30 | active | UPDATE pgbench_accounts SET abalance =
> abalance + 3517 WHERE aid
> = 865230;
>  postgres | 6436 | postgres | pgbench          | 2018-01-11
> 06:00:32.504115+05:30 | active | UPDATE pgbench_accounts SET abalance =
> abalance + -2488 WHERE aid
>  = 469975;
>  postgres | 6437 | postgres | pgbench          | 2018-01-11
> 05:59:54.809692+05:30 | active | UPDATE pgbench_accounts SET abalance =
> abalance + -3039 WHERE aid
>  = 385296;
>  postgres | 6438 | postgres | pgbench          | 2018-01-11
> 06:00:16.971491+05:30 | active | UPDATE pgbench_accounts SET abalance =
> abalance + 1489 WHERE aid
> = 87498;
>  postgres | 6439 | postgres | pgbench          | 2018-01-11
> 05:59:22.330281+05:30 | active | UPDATE pgbench_accounts SET abalance =
> abalance + 507 WHERE aid =
>  69858;
>  postgres | 6440 | postgres | pgbench          | 2018-01-11
> 05:59:53.27686+05:30  | active | UPDATE pgbench_accounts SET abalance =
> abalance + 4955 WHERE aid
> = 378685;
>  postgres | 6441 | postgres | pgbench          | 2018-01-11
> 06:00:41.727319+05:30 | active | UPDATE pgbench_accounts SET abalance =
> abalance + -3107 WHERE aid
>  = 722157;
>  postgres | 6442 | postgres | pgbench          | 2018-01-11
> 06:00:48.311869+05:30 | active | UPDATE pgbench_accounts SET abalance =
> abalance + 2679 WHERE aid
> = 304148;
>  postgres | 6443 | postgres | pgbench          | 2018-01-11
> 06:00:04.269291+05:30 | active | UPDATE pgbench_accounts SET abalance =
> abalance + -2954 WHERE aid
>  = 400782;
> (12 rows)
>
>
>
> Ideally it should cancel queries thrown by pgbench once pgbench process is
> canceled.
> Is this problem with pgbench ?
>
>

-- 
Guillaume.

Reply via email to