Гость
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Автономная Tx в режиме WAIT выдает update conflict через <DeadlockTimeout> сек. Why ? / 3 сообщений из 3, страница 1 из 1
20.12.2015, 11:59
    #39132514
Таблоид
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Автономная Tx в режиме WAIT выдает update conflict через <DeadlockTimeout> сек. Why ?
hi all

В конфиге ФБ прописано:
Код: plaintext
DeadlockTimeout = 1

Объясните, плз, почему вот этот код:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
connect '/3333:e30' user 'SYSDBA' password 'masterkey';

recreate table test(id int);
insert into test values(1);
commit;

set transaction  wait ;
set echo on;
update test set id = -id;
set term ^;
execute block as
begin
  in autonomous transaction do update test set id = -id;
end
^
set term ^;
-- выдает через 1 секунду:

Код: plaintext
1.
2.
3.
Statement failed, SQLSTATE = 40001
deadlock
-update conflicts with concurrent update
-concurrent transaction number is 154


Меня интересует не сам текст исключения, а почему он проигнориовал 'set transaction WAIT'.

По этой логике вот этот вариант:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
connect '/3333:e30' user 'SYSDBA' password 'masterkey';

recreate table test(id int);
insert into test values(1);
commit;

set transaction  wait ;
set echo on;
update test set id = -id;
set term ^;
execute block as
begin
  execute statement 'update test set id = -id'
  on external 'localhost:' || rdb$get_context('SYSTEM', 'DB_NAME')
  as user 'SYSDBA' password 'masterkey' role 'FOO';
end
^
set term ^;
-- тоже должен вывалить ошибку через 1 сек. Но он будет висеть по посинения (as expected).

В трейсе для варианта с auton Tx видим, что она стартовала именно как WAIT (её номер = 231):
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
2015-12-20T11:50:48.6330 (1816:00C42358) EXECUTE_STATEMENT_FINISH
	e30 (ATT_220, SYSDBA:NONE, NONE, TCPv4:192.168.43.154)
	C:\MIX\Firebird\fb30\isql.exe:3260
		(TRA_229, CONCURRENCY | WAIT | READ_WRITE)

Statement 1599:
-------------------------------------------------------------------------------
update test set id = -id
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Select Expression
    -> Table "TEST" Full Scan
0 records fetched
      1 ms, 15 fetch(es), 2 mark(s)

Table                             Natural     Index    Update    Insert    Delete   Backout     Purge   Expunge
***************************************************************************************************************
TEST                                    1                   1                                                  

2015-12-20T11:50:48.6480 (1816:00C42358) EXECUTE_STATEMENT_START
	e30 (ATT_220, SYSDBA:NONE, NONE, TCPv4:192.168.43.154)
	C:\MIX\Firebird\fb30\isql.exe:3260
		(TRA_229, CONCURRENCY | WAIT | READ_WRITE)

Statement 1602:
-------------------------------------------------------------------------------
execute block as
begin
  in autonomous transaction do update test set id = -id;
end

^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Select Expression
    -> Table "TEST" Full Scan

2015-12-20T11:50: 48 .6480 (1816:00C42358) START_TRANSACTION
	e30 (ATT_220, SYSDBA:NONE, NONE, TCPv4:192.168.43.154)
	C:\MIX\Firebird\fb30\isql.exe:3260
		( TRA_231 , CONCURRENCY |  WAIT  | READ_WRITE)

2015-12-20T11:50: 49 .6480 (1816:00C42358) ROLLBACK_TRANSACTION
	e30 (ATT_220, SYSDBA:NONE, NONE, TCPv4:192.168.43.154)
	C:\MIX\Firebird\fb30\isql.exe:3260
		( TRA_231 , CONCURRENCY |  WAIT  | READ_WRITE)
      2 ms, 2 write(s), 1 fetch(es), 1 mark(s)

2015-12-20T11:50:49.6480 (1816:00C42358) FAILED EXECUTE_STATEMENT_FINISH
	e30 (ATT_220, SYSDBA:NONE, NONE, TCPv4:192.168.43.154)
	C:\MIX\Firebird\fb30\isql.exe:3260
		(TRA_229, CONCURRENCY | WAIT | READ_WRITE)

Statement 1602:
-------------------------------------------------------------------------------
execute block as
begin
  in autonomous transaction do update test set id = -id;
end

^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Select Expression
    -> Table "TEST" Full Scan
0 records fetched
   1002 ms, 1 write(s), 10 fetch(es), 3 mark(s)

Table                             Natural     Index    Update    Insert    Delete   Backout     Purge   Expunge
***************************************************************************************************************
TEST                                    1                                                                      

2015-12-20T11:50:49.6480 (1816:00C42358) ERROR AT JStatement::execute
	e30 (ATT_220, SYSDBA:NONE, NONE, TCPv4:192.168.43.154)
	C:\MIX\Firebird\fb30\isql.exe:3260
335544336 : deadlock
335544451 : update conflicts with concurrent update
335544878 : concurrent transaction number is 229
PS.
WI-V2.5.5.26952
WI-V3.0.0.32239
...
Рейтинг: 0 / 0
20.12.2015, 12:49
    #39132524
hvlad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Автономная Tx в режиме WAIT выдает update conflict через <DeadlockTimeout> сек. Why ?
Таблоид,

в первом случае у нас один и тот же коннект и в графе ожидания блокировок есть цикл, поэтому рапортуется дедлок.
Во втором случае коннекты разные и цикла нет - ждём до упора.
...
Рейтинг: 0 / 0
20.12.2015, 18:16
    #39132588
Таблоид
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Автономная Tx в режиме WAIT выдает update conflict через <DeadlockTimeout> сек. Why ?
2 Денис: Если лок-менеджер так зорко следит, чтобы не случился мёртвый затык при WAIT, когда две транзакции что-то "общее" меняют в одном коннекте, то надо бы это как-то отразить в доке. ИМХО.
...
Рейтинг: 0 / 0
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Автономная Tx в режиме WAIT выдает update conflict через <DeadlockTimeout> сек. Why ? / 3 сообщений из 3, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]