powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / select ID from <T> for update with lock into :V - создает ли версию записи ?
2 сообщений из 27, страница 2 из 2
select ID from <T> for update with lock into :V - создает ли версию записи ?
    #38709601
Таблоид
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Таблоидhvladпропущено...
Для SELECT WITH LOCK - не работает, согласен.А должен ли был вообще ?
PS. Я проверю для update t set id=id, отпишусь тогда.
PPS. И еще тут бНОПНЯ: если в SS работает один аттач-молотилка, а в двух других потоках - GC & CW, то должна ли их активность отображаться в виде ненулевой загрузки разных cpu-ядер сервера ? Ибо я тут понаблюдал в top'e, и увидел загрузку только одного ядра...В общем, когда меняем select with lock на холостой апдейт:
Код: 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.
select current_timestamp as dts, 'start EB. . .' as msg from rdb$database;
commit;
set transaction no wait no auto undo;
set term ^;
execute block returns( eng varchar(10), scanned int, locked_ok int, skipped int )
as
  declare cx cursor for ( select rdb$db_key as dbkey from t where x between 49 and 51 order by x);
  declare v_key char(8) character set octets;
  declare id int;
  declare x int;
begin
  scanned=0;
  locked_ok=0;
  skipped=0;
  eng=rdb$get_context('SYSTEM','ENGINE_VERSION');
  open cx;
  while (1=1) do begin
    fetch cx into v_key;
    if ( row_count = 0 ) then leave;
    scanned = scanned + 1;
    begin
         update t set id=id where current of cx; 
        --select id, x from t where rdb$db_key = :v_key for update with lock into id, x;

        locked_ok = locked_ok + 1;
    when any do
        begin
            if ( gdscode in ( 335544345, 335544878, 335544336,335544451 ) )
              then skipped = skipped +1;
            else
              exception;
        end
    end
  end
  close cx;
  suspend;
end
^
set term ;^
commit;
select current_timestamp as dts, 'finish EB + commit' as msg from rdb$database;
-- emulate some activity
out nul;
select count(*) from rdb$types,rdb$types,rdb$types; 
commit;
select count(*) from rdb$types,rdb$types,rdb$types; 
commit;
out;
select current_timestamp as dts, 'finish counts' as msg from rdb$database;
commit;
- то... ничего не меняется. Потоки GC & CW - бездельничают.
gc_run.log
Код: 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.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
                      DTS MSG           
========================= ============= 
2014-07-31 00:40:56.1400  start EB. . . 


ENG             SCANNED    LOCKED_OK      SKIPPED 
========== ============ ============ ============ 
3.0.0             60000        60000            0 


                      DTS MSG                
========================= ================== 
2014-07-31 00:40:56.8250  finish EB + commit 


                      DTS MSG           
========================= ============= 
2014-07-31 00:41:14.3630  finish counts 


                      DTS MSG           
========================= ============= 
2014-07-31 00:41:14.3650  start EB. . . 


ENG             SCANNED    LOCKED_OK      SKIPPED 
========== ============ ============ ============ 
3.0.0             60000        60000            0 


                      DTS MSG                
========================= ================== 
2014-07-31 00:41:15.0250  finish EB + commit 


                      DTS MSG           
========================= ============= 
2014-07-31 00:41:32.5460  finish counts 


                      DTS MSG           
========================= ============= 
2014-07-31 00:41:32.5490  start EB. . . 


ENG             SCANNED    LOCKED_OK      SKIPPED 
========== ============ ============ ============ 
3.0.0             60000        60000            0 


                      DTS MSG                
========================= ================== 
2014-07-31 00:41:33.2040  finish EB + commit 


                      DTS MSG           
========================= ============= 
2014-07-31 00:41:50.7260  finish counts 


                      DTS MSG           
========================= ============= 
2014-07-31 00:41:50.7290  start EB. . . 


ENG             SCANNED    LOCKED_OK      SKIPPED 
========== ============ ============ ============ 
3.0.0             60000        60000            0 


                      DTS MSG                
========================= ================== 
2014-07-31 00:41:51.3820  finish EB + commit 


                      DTS MSG           
========================= ============= 
2014-07-31 00:42:08.9180  finish counts 


                      DTS MSG           
========================= ============= 
2014-07-31 00:42:08.9210  start EB. . . 


ENG             SCANNED    LOCKED_OK      SKIPPED 
========== ============ ============ ============ 
3.0.0             60000        60000            0 


                      DTS MSG                
========================= ================== 
2014-07-31 00:42:09.5780  finish EB + commit 


                      DTS MSG           
========================= ============= 
2014-07-31 00:42:27.1430  finish counts 

В аттаче - причесанный эксельчик с данными опроса мониторинга для этого варианта.
...
Рейтинг: 0 / 0
select ID from <T> for update with lock into :V - создает ли версию записи ?
    #38712882
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ТаблоидВ общем, когда меняем select with lock на холостой апдейт:Я не воспроизводил твою "систему мониторинга", но вижу, что GC собирает мусор меньше чем за секунду после старта новой тр-ции, после EB.
Есс-но, ты не успеешь увидеть загрузку более чем одного ядра.
...
Рейтинг: 0 / 0
2 сообщений из 27, страница 2 из 2
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / select ID from <T> for update with lock into :V - создает ли версию записи ?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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