powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Next - OIT > sweep_int: может ли НЕ начаться автостарт sweep'a при коннекте к такой базе ?
25 сообщений из 32, страница 1 из 2
Next - OIT > sweep_int: может ли НЕ начаться автостарт sweep'a при коннекте к такой базе ?
    #39159405
Таблоид
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hi all

Вот тут: https://yadi.sk/d/s_AAa-ASo3AKv -- архив с двумя базами ("sweep-ready.fd 0 " и "sweep-ready.fd 1 ", имеющими мусор и sweep interval = 100.

Статистика по ним:
sweep-ready.fd0
Код: 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.
Database "C:\MIX\FIREBIRD\QA\FBT-REPO\TMP\SWEEP-READY.FD0"
Database header page information:
	Flags			0
	Generation		519
	System Change Number	0
	Page size		8192
	ODS version		12.0
	 Oldest transaction	8 
	Oldest active		9
	Oldest snapshot		9
	 Next transaction	511 
	Sequence number		0
	Next attachment ID	10
	Implementation		HW=Intel/i386 little-endian OS=Windows CC=MSVC
	Shadow count		0
	Page buffers		0
	Next header page	0
	Database dialect	3
	Creation date		Nov 3, 2015 13:58:12
	Attributes		force write

    Variable header data:
 	Sweep interval:		100 
	*END*


Database file sequence:
File C:\MIX\FIREBIRD\QA\FBT-REPO\TMP\SWEEP-READY.FD0 is the only file

Analyzing database pages ...
TEST (128)
    Primary pointer page: 179, Index root page: 180
    Total formats: 1, used formats: 1
    Average record length: 56.95, total records: 1001
    Average version length: 0.00, total versions: 0, max versions: 0
    Average fragment length: 0.00, total fragments: 0, max fragments: 0
    Average unpacked length: 56.00, compression ratio: 0.98
    Pointer pages: 1, data page slots: 16
    Data pages: 16, average fill: 57%
    Primary pages: 16, secondary pages: 0, swept pages: 0
    Empty pages: 3, full pages: 12
    Fill distribution:
	 0 - 19% = 4
	20 - 39% = 0
	40 - 59% = 0
	60 - 79% = 12
	80 - 99% = 0

    Index RDB$1 (0)
	Root page: 187, depth: 2, leaf buckets: 8, nodes: 1001
	Average node length: 52.38, total dup: 0, max dup: 0
	Average key length: 51.11, compression ratio: 0.98
	Average prefix length: 1.82, average data length: 48.13
	Clustering factor: 915, ratio: 0.91
	Fill distribution:
	     0 - 19% = 0
	    20 - 39% = 0
	    40 - 59% = 0
	    60 - 79% = 5
	    80 - 99% = 3
"sweep-ready.fd1"
Код: 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.
Database "C:\MIX\FIREBIRD\QA\FBT-REPO\TMP\SWEEP-READY.FD1"
Database header page information:
	Flags			0
	Generation		2017
	System Change Number	0
	Page size		8192
	ODS version		12.0
 	Oldest transaction	9 
	Oldest active		10
	Oldest snapshot		10
 	Next transaction	2012 
	Sequence number		0
	Next attachment ID	9
	Implementation		HW=Intel/i386 little-endian OS=Windows CC=MSVC
	Shadow count		0
	Page buffers		0
	Next header page	0
	Database dialect	3
	Creation date		Nov 3, 2015 13:58:12
	Attributes		force write

    Variable header data:
 	Sweep interval:		100 
	*END*


Database file sequence:
File C:\MIX\FIREBIRD\QA\FBT-REPO\TMP\SWEEP-READY.FD1 is the only file

Analyzing database pages ...
TEST (128)
    Primary pointer page: 179, Index root page: 180
    Total formats: 1, used formats: 1
    Average record length: 509.70, total records: 2000
    Average version length: 0.00, total versions: 0, max versions: 0
    Average fragment length: 0.00, total fragments: 0, max fragments: 0
    Average unpacked length: 506.00, compression ratio: 0.99
    Pointer pages: 1, data page slots: 144
    Data pages: 144, average fill: 90%
    Primary pages: 144, secondary pages: 0, swept pages: 0
    Empty pages: 1, full pages: 143
    Fill distribution:
	 0 - 19% = 1
	20 - 39% = 0
	40 - 59% = 0
	60 - 79% = 1
	80 - 99% = 142

    Index RDB$1 (0)
	Root page: 433, depth: 4, leaf buckets: 362, nodes: 2000
	Average node length: 504.20, total dup: 0, max dup: 0
	Average key length: 502.08, compression ratio: 1.00
	Average prefix length: 1.74, average data length: 498.26
	Clustering factor: 1988, ratio: 0.99
	Fill distribution:
	     0 - 19% = 11
	    20 - 39% = 175
	    40 - 59% = 150
	    60 - 79% = 25
	    80 - 99% = 1

Для каждой из этих баз делаю следующее:

1) останавливаю ФБ
2) copy sweep-ready.fd0 sweep-ready-0.fdb // для второй - аналогично: copy sweep-ready.fd1 sweep-ready-1.fdb
3) стартую ФБ, обнуляю firebird.log
4) Вывод заголовка _до_ коннекта, коннект с единственной командой 'quit', вывод заголовка _после_, т.е.:
* для первой базы:
Код: plaintext
gstat -h sweep-ready-0.fdb & echo quit;|isql /:C:\MIX\firebird\QA\fbt-repo\tmp\sweep-ready-0.fdb & gstat -h sweep-ready-0.fdb
* для второй базы:
Код: plaintext
gstat -h sweep-ready-1.fdb & echo quit;|isql /:C:\MIX\firebird\QA\fbt-repo\tmp\sweep-ready-1.fdb & gstat -h sweep-ready-1.fdb
5) смотрю в firebird.log - нет ли там записей по автостарту sweep'а (а они должны быть в обоих случаях).

Ну так вот:
1) для первой базы такие записи в логе ФБ - будут, т.е. всё пучком:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
CSPROG	Sun Jan 31 10:54:36 2016
	Sweep is started by SWEEPER
	Database "C:\MIX\FIREBIRD\QA\FBT-REPO\TMP\SWEEP-READY-0.FDB" 
	OIT 8, OAT 9, OST 9, Next 512


CSPROG	Sun Jan 31 10:54:36 2016
	Sweep is finished
	Database "C:\MIX\FIREBIRD\QA\FBT-REPO\TMP\SWEEP-READY-0.FDB" 
	OIT 512, OAT 514, OST 514, Next 515

2) для второй базы записей в логе ФБ нет, но счетчики в её заголовке подвинутся и станут:
Код: plaintext
1.
2.
3.
4.
        Oldest transaction      2013
        Oldest active           2014
        Oldest snapshot         2014
        Next transaction        2015

Кто-нить может объяснить эту магию ?
...
Рейтинг: 0 / 0
Next - OIT > sweep_int: может ли НЕ начаться автостарт sweep'a при коннекте к такой базе ?
    #39159408
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Таблоид,

в первой есть rolled back тр-ция, во второй - нет
...
Рейтинг: 0 / 0
Next - OIT > sweep_int: может ли НЕ начаться автостарт sweep'a при коннекте к такой базе ?
    #39159412
Таблоид
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hvlad,

это по заголовку базы как-то можно увидеть?
...
Рейтинг: 0 / 0
Next - OIT > sweep_int: может ли НЕ начаться автостарт sweep'a при коннекте к такой базе ?
    #39159415
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Таблоид,

нет. Но можно в isql сделать
connect
show database
commit
show database

если второй show database покажет такое же значение для OIT, как и первый, то это оно.
Если свип за это время не пролетит, конечно :)

ЗЫ я в твои БД не смотрел
...
Рейтинг: 0 / 0
Next - OIT > sweep_int: может ли НЕ начаться автостарт sweep'a при коннекте к такой базе ?
    #39159416
Таблоид
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спс.
hvladЕсли свип за это время не пролетит, конечно :)Не пролетит: я все команды в одну строку затолкаю )
...
Рейтинг: 0 / 0
Next - OIT > sweep_int: может ли НЕ начаться автостарт sweep'a при коннекте к такой базе ?
    #39159646
Таблоид
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Так. Стоп! Уже не первый раз вижу и больше молчать не буду :)

Создаем новую базу, ставим ей sweep_interval = 100.
Заходим в isql и вводим там на выполнение скрипт:
Код: 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.
    set list on;
    select rdb$get_context('SYSTEM','ENGINE_VERSION') as engine_version 
    from rdb$database;
    commit;

    recreate table test(s varchar(500) unique);
    insert into test(s) values('LOCKED_FOR_PAUSE');
    commit;

    set transaction read committed WAIT;

    update test set s = s where s = 'LOCKED_FOR_PAUSE';


    set term ^;
    execute block as
      declare n int = 150;
      declare v_role varchar(31);
    begin
      while (n > 0) do 
          in autonomous transaction do 
          insert into test(s) values( rpad('', 500, uuid_to_char(gen_uuid()) ) ) 
          returning :n-1 into n;

      v_role = left(replace( uuid_to_char(gen_uuid()), '-', ''), 31);
      execute statement ('update test set s = s where s = ?') ('LOCKED_FOR_PAUSE')
      on external 
          'localhost:' || rdb$get_context('SYSTEM', 'DB_NAME')
          as user 'SYSDBA' password 'masterkey' role v_role
      with autonomous transaction;
      
    end
    ^
    set term ;^
    set heading off;
    select '-- shutdown me now --' from rdb$database;
Этот скрипт намертво застрянет на строке, выделенной синим цветом (ввиду update-conflict'a в WAIT-транзакции).
Далее мы делаем в другом окне shutdown этой базы.

С этого момента при переводе этой базы в онлайн первый же коннект к ней вызовет автосвип.

Вопрос у мну в следующем: почему деятельность этого автосвипа по-разному отображается в логе трейса, когда он запущен с log_sweep = true ?

Запускаем трейс. Переводим базу в онлайн и выполняем:

echo quit; | isql host/port:наша_база_готовая_к_автосвипу

Смотрим затем, что появляется в трейсе для SS /SC & CS.
У меня получилось вот что:
1) для SuperServer 'a: sweep_start, sweep_progress, sweep_finish - т.е. всё логично и понятно:
trace.log for SS
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
2016-01-31T23:08:51.2520 (3740:00C421B8) SWEEP_START
	C:\MIX\FIREBIRD\QA\FBT-REPO\TMP\BUGS.CORE_3934.FDB (ATT_25, SWEEPER:NONE, NONE, <internal>)

Transaction counters:
	Oldest interesting          6
	Oldest active             161
	Oldest snapshot           161
	Next transaction          162

2016-01-31T23:08:51.2680 (3740:00C421B8) SWEEP_PROGRESS
	C:\MIX\FIREBIRD\QA\FBT-REPO\TMP\BUGS.CORE_3934.FDB (ATT_25, SWEEPER:NONE, NONE, <internal>)
      1 ms, 15 read(s), 366 fetch(es), 3 mark(s)

2016-01-31T23:08:51.2680 (3740:00C421B8) SWEEP_FINISH
	C:\MIX\FIREBIRD\QA\FBT-REPO\TMP\BUGS.CORE_3934.FDB (ATT_25, SWEEPER:NONE, NONE, <internal>)

Transaction counters:
	Oldest interesting        162
	Oldest active             161
	Oldest snapshot           161
	Next transaction          163
      4 ms, 100 read(s), 3 write(s), 989 fetch(es), 77 mark(s)
2) для SuperClassic 'a: sweep_start, sweep_progress, sweep_progress /*да, второй раз!*/, sweep_finish
trace.log for SC
Код: 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.
2016-01-31T23:06:17.6900 (416:00C421B8) SWEEP_START
	C:\MIX\FIREBIRD\QA\FBT-REPO\TMP\BUGS.CORE_3934.FDB (ATT_9, SWEEPER:NONE, NONE, <internal>)

Transaction counters:
	Oldest interesting          6
	Oldest active             160
	Oldest snapshot           160
	Next transaction          161

2016-01-31T23:06:17.6900 (416:00C421B8) SWEEP_PROGRESS
	C:\MIX\FIREBIRD\QA\FBT-REPO\TMP\BUGS.CORE_3934.FDB (ATT_9, SWEEPER:NONE, NONE, <internal>)
      0 ms, 1 read(s), 15 fetch(es), 4 mark(s)

2016-01-31T23:06:17.6900 (416:00C421B8) SWEEP_PROGRESS
	C:\MIX\FIREBIRD\QA\FBT-REPO\TMP\BUGS.CORE_3934.FDB (ATT_9, SWEEPER:NONE, NONE, <internal>)
      1 ms, 15 read(s), 366 fetch(es), 3 mark(s)

2016-01-31T23:06:17.6900 (416:00C421B8) SWEEP_FINISH
	C:\MIX\FIREBIRD\QA\FBT-REPO\TMP\BUGS.CORE_3934.FDB (ATT_9, SWEEPER:NONE, NONE, <internal>)

Transaction counters:
	Oldest interesting        161
	Oldest active             160
	Oldest snapshot           160
	Next transaction          162
      4 ms, 111 read(s), 58 write(s), 1003 fetch(es), 81 mark(s)
3) для Classic Server 'a: также, как для SuperClassic'a (sweep_start, sweep_progress, sweep_progress, sweep_finish), однако начальные значения OAT & OST у него были равны OIT. В итоге, он двиганул только OIT, а OAT & OST остались торчать внизу:
trace.log for Cs
Код: 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.
2016-01-31T23:07:50.1110 (6872:016E2CD0) SWEEP_START
	C:\MIX\FIREBIRD\QA\FBT-REPO\TMP\BUGS.CORE_3934.FDB (ATT_15, SWEEPER:NONE, NONE, <internal>)

Transaction counters:
	Oldest interesting         10
	Oldest active              11
	Oldest snapshot            11
	Next transaction          166

2016-01-31T23:07:50.1110 (6872:016E2CD0) SWEEP_PROGRESS
	C:\MIX\FIREBIRD\QA\FBT-REPO\TMP\BUGS.CORE_3934.FDB (ATT_15, SWEEPER:NONE, NONE, <internal>)
      0 ms, 3 read(s), 15 fetch(es), 4 mark(s)

2016-01-31T23:07:50.1110 (6872:016E2CD0) SWEEP_PROGRESS
	C:\MIX\FIREBIRD\QA\FBT-REPO\TMP\BUGS.CORE_3934.FDB (ATT_15, SWEEPER:NONE, NONE, <internal>)
      1 ms, 15 read(s), 366 fetch(es), 3 mark(s)

2016-01-31T23:07:50.1110 (6872:016E2CD0) SWEEP_FINISH
	C:\MIX\FIREBIRD\QA\FBT-REPO\TMP\BUGS.CORE_3934.FDB (ATT_15, SWEEPER:NONE, NONE, <internal>)

Transaction counters:
	Oldest interesting        166
	Oldest active              11
	Oldest snapshot            11
	Next transaction          167
      6 ms, 119 read(s), 58 write(s), 1003 fetch(es), 81 mark(s)


Объясните кто-нить:
1) что за странный повтор sweep_progress'a в SC & CS ?
2) что там за недуг случился с Cs, от которого он оказался не в состоянии подвинуть OAT & OST вместе с OIT ?

PS. WI-V3.0.0.32300; логи полностью - в аттаче
...
Рейтинг: 0 / 0
Next - OIT > sweep_int: может ли НЕ начаться автостарт sweep'a при коннекте к такой базе ?
    #39160435
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ТаблоидОбъясните кто-нить:
1) что за странный повтор sweep_progress'a в SC & CS ?Включи print_perf - и нам расскажи
...
Рейтинг: 0 / 0
Next - OIT > sweep_int: может ли НЕ начаться автостарт sweep'a при коннекте к такой базе ?
    #39160438
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Таблоид2) что там за недуг случился с Cs, от которого он оказался не в состоянии подвинуть OAT & OST вместе с OIT ?А что, кто-то другой их подвинул ?
...
Рейтинг: 0 / 0
Next - OIT > sweep_int: может ли НЕ начаться автостарт sweep'a при коннекте к такой базе ?
    #39160505
Таблоид
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hvladВключи print_perf - и нам расскажи Уже понял, спс. Рассказывать не буду :)
hvladТаблоид2) что там за недуг случился с Cs, от которого он оказался не в состоянии подвинуть OAT & OST вместе с OIT ?А что, кто-то другой их подвинул ?Да, SS и SC - см их логи.
...
Рейтинг: 0 / 0
Next - OIT > sweep_int: может ли НЕ начаться автостарт sweep'a при коннекте к такой базе ?
    #39160510
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ТаблоидhvladА что, кто-то другой их подвинул ?Да, SS и SC - см их логи.Сам см. И нам тут пкж :)
...
Рейтинг: 0 / 0
Next - OIT > sweep_int: может ли НЕ начаться автостарт sweep'a при коннекте к такой базе ?
    #39160513
Таблоид
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hvlad, ну они там под спойлером были, разве не заметно ?

Хорошо, вот вам всем прямой наводкой, в упор:

Код: 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.
 trace.log for SS :

2016-01-31T23:08:51.2520 (3740:00C421B8) SWEEP_START
	C:\MIX\FIREBIRD\QA\FBT-REPO\TMP\BUGS.CORE_3934.FDB (ATT_25, SWEEPER:NONE, NONE, <internal>)

Transaction counters:
	Oldest interesting          6
	Oldest active             161
	Oldest snapshot           161
	Next transaction          162
. . .
2016-01-31T23:08:51.2680 (3740:00C421B8) SWEEP_FINISH
	C:\MIX\FIREBIRD\QA\FBT-REPO\TMP\BUGS.CORE_3934.FDB (ATT_25, SWEEPER:NONE, NONE, <internal>)

Transaction counters:
	Oldest interesting        162
 	Oldest active             161
	Oldest snapshot           161
 	Next transaction          163
      4 ms, 100 read(s), 3 write(s), 989 fetch(es), 77 mark(s)


 trace.log for SC :

2016-01-31T23:06:17.6900 (416:00C421B8) SWEEP_START
	C:\MIX\FIREBIRD\QA\FBT-REPO\TMP\BUGS.CORE_3934.FDB (ATT_9, SWEEPER:NONE, NONE, <internal>)

Transaction counters:
	Oldest interesting          6
	Oldest active             160
	Oldest snapshot           160
	Next transaction          161
. . .

2016-01-31T23:06:17.6900 (416:00C421B8) SWEEP_FINISH
	C:\MIX\FIREBIRD\QA\FBT-REPO\TMP\BUGS.CORE_3934.FDB (ATT_9, SWEEPER:NONE, NONE, <internal>)

Transaction counters:
	Oldest interesting        161
 	Oldest active             160
	Oldest snapshot           160
 	Next transaction          162
      4 ms, 111 read(s), 58 write(s), 1003 fetch(es), 81 mark(s)


Код: 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.
 trace.log for Cs :

2016-01-31T23:07:50.1110 (6872:016E2CD0) SWEEP_START
	C:\MIX\FIREBIRD\QA\FBT-REPO\TMP\BUGS.CORE_3934.FDB (ATT_15, SWEEPER:NONE, NONE, <internal>)

Transaction counters:
	Oldest interesting         10
	Oldest active              11
	Oldest snapshot            11
	Next transaction          166

2016-01-31T23:07:50.1110 (6872:016E2CD0) SWEEP_PROGRESS
	C:\MIX\FIREBIRD\QA\FBT-REPO\TMP\BUGS.CORE_3934.FDB (ATT_15, SWEEPER:NONE, NONE, <internal>)
      0 ms, 3 read(s), 15 fetch(es), 4 mark(s)

2016-01-31T23:07:50.1110 (6872:016E2CD0) SWEEP_PROGRESS
	C:\MIX\FIREBIRD\QA\FBT-REPO\TMP\BUGS.CORE_3934.FDB (ATT_15, SWEEPER:NONE, NONE, <internal>)
      1 ms, 15 read(s), 366 fetch(es), 3 mark(s)

2016-01-31T23:07:50.1110 (6872:016E2CD0) SWEEP_FINISH
	C:\MIX\FIREBIRD\QA\FBT-REPO\TMP\BUGS.CORE_3934.FDB (ATT_15, SWEEPER:NONE, NONE, <internal>)

Transaction counters:
	Oldest interesting        166
 	Oldest active              11
	Oldest snapshot            11 
	Next transaction          167
      6 ms, 119 read(s), 58 write(s), 1003 fetch(es), 81 mark(s)

Что скажете, товарищи ?
...
Рейтинг: 0 / 0
Next - OIT > sweep_int: может ли НЕ начаться автостарт sweep'a при коннекте к такой базе ?
    #39160515
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ТаблоидЧто скажете, товарищи ?Продолжаем разговор (ц)
Покажи дельту для SS\SC\CS, т.е. насколько они продвинули OAT и OST.
...
Рейтинг: 0 / 0
Next - OIT > sweep_int: может ли НЕ начаться автостарт sweep'a при коннекте к такой базе ?
    #39160517
Таблоид
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
тьфу, блин... глаза замылились ужо... :-[

но таки вопрос всё равно про Классик остался: а чего он не "поднял" OAT & OST до высот 160...161 в процессе молотьбы, как это произошло в SS & SC ?
...
Рейтинг: 0 / 0
Next - OIT > sweep_int: может ли НЕ начаться автостарт sweep'a при коннекте к такой базе ?
    #39160522
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Таблоид,

вспомни, что я говорил на семинаре про значения OAT и OST и почему свип их не трогает.
...
Рейтинг: 0 / 0
Next - OIT > sweep_int: может ли НЕ начаться автостарт sweep'a при коннекте к такой базе ?
    #39160630
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ТаблоидЧто скажете, товарищи ?
я уже много лет назад (разрабатывая IBAnalyst) нашел ситуацию, когда OIT может стать больше OST. Правда, чтобы OIT было больше OAT - не видел. Но допускаю такую возможность.
см.
http://www.ibase.ru/devinfo/summary.htm
Когда ReadCommitted блокирует Oldest Snapshot

hvladпро значения OAT и OST и почему свип их не трогает.
а с какой стати, прости господи, sweep их должен (и может) "трогать"???
...
Рейтинг: 0 / 0
Next - OIT > sweep_int: может ли НЕ начаться автостарт sweep'a при коннекте к такой базе ?
    #39160650
Таблоид
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hvladвспомни, что я говорил на семинаре про значения OAT и OST и почему свип их не трогает.Это я буду осиливать на свежак.
А сейчас, почтеннейшая публика, прошу внимания. "Следите за руками - никакого жульничества!.."

0. Стартуем ФБ, в двух режимах: SS & CS.

1. Создаём базу, делаем для неё "gfix -h 100", затем вводим на выполнение скрипт, от которого ISQL повесится:
Код: 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.
    set list on;

    recreate table test(s varchar(500) unique);
    insert into test(s) values('LOCKED_FOR_PAUSE');
    commit;

    set transaction read committed WAIT;

    set count on;
    set echo on;
    update test set s = s where s = 'LOCKED_FOR_PAUSE';


    set term ^;
    execute block as
      declare n int = 150;
      declare v_role varchar(31);
    begin
      while (n > 0) do 
          in autonomous transaction do 
          insert into test(s) values( rpad('', 500, uuid_to_char(gen_uuid()) ) ) 
          returning :n-1 into n;

      v_role = left(replace( uuid_to_char(gen_uuid()), '-', ''), 31);
      
      execute statement ('update test set s = s where s = ?') ('LOCKED_FOR_PAUSE')
      on external 
          'localhost:' || rdb$get_context('SYSTEM', 'DB_NAME')
          as user 'SYSDBA' password 'masterkey' role v_role
      with autonomous transaction;
      
      
    end
    ^
2. В соседнем окне запускаем: gfix -shut full -force 0 host/port:path/db_file.fdb

3. Делаем шаги 1 и 2 в SS, затем в Cs (наверное, можно было бы и один раз сделать в любой арх-ре, но я решил всю эту "историю" разделить на всех этапах). Возвращаем базы в онлайн и копируем куда-нить для последующего многократного восстановления с них:
Код: plaintext
1.
copy e30.fdb ready4sweep-sS.fdb 
copy e30.fdb ready4sweep-Cs.fdb 

4. Делаем еще раз рестарт ФБ.

5. Начинаем эксперимент с SuperServer'ом , выполняя:
Код: plaintext
1.
copy ready4sweep-sS.fdb e30.fdb
echo quit;|C:\MIX\firebird\fb30\isql /3333:C:\MIX\firebird\QA\fbt-repo\tmp\E30.FDB & C:\MIX\firebird\fb30\gstat -h C:\MIX\firebird\QA\fbt-repo\tmp\E30.FDB
- и смотрим на вывод gstat'a, а также в "хвост" firebird.log'a

Счётчики gstat'a будут:
Код: plaintext
1.
2.
3.
4.
         Oldest transaction      164
        Oldest active           165
        Oldest snapshot         165
        Next transaction        166 
Хвост firebird.log'a будет:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
CSPROG	Tue Feb 02 01:18:12 2016
	Sweep is started by SWEEPER
	Database "C:\MIX\FIREBIRD\QA\FBT-REPO\TMP\E30.FDB" 
	OIT 8, OAT 9, OST 9, Next 163

CSPROG	Tue Feb 02 01:18:12 2016
	Sweep is finished
	Database "C:\MIX\FIREBIRD\QA\FBT-REPO\TMP\E30.FDB" 
	 OIT 163, OAT 163, OST 163, Next 164 

Нескладуха в OIT на 1, в OAT & OST - на 2, в Next - опять на 1.
Т.е. свип записал счетчики в лог, но они всё-таки дёрнулись еще "кем-то", и это был _не_ gstat -h, который к базе коннект вообше не делает, а открывает её как файл.

Ну да ладно, это SuperServer - там ведь лингер есть, да и вообще он базу не сразу отпускает после дисконнекта (60 или 70 сек держит файл, ЕМНИП). Как знать, может там что-то еще должно шевелиться после дисконнекта isql'я... :-)

Интересно, однако, что если повторить вышеприведенные команды (copy ... и затем echo quit; | isql ... & gstat -h ...), то можем получить уже "нормальный" результат, при котором всё совпадает:
Код: plaintext
1.
2.
3.
       Oldest transaction      164
       Oldest active           163
       Oldest snapshot         163
       Next transaction        165
vs
Код: plaintext
1.
2.
	Sweep is finished
	Database "C:\MIX\FIREBIRD\QA\FBT-REPO\TMP\E30.FDB" 
	OIT 164, OAT 163, OST 163, Next 165

6. Начинаем эксперимент с Classic'ом , выполняя:
Код: plaintext
1.
copy ready4sweep-Cs.fdb e30.fdb
echo quit;|C:\MIX\firebird\fb30Cs\isql /3329:C:\MIX\firebird\QA\fbt-repo\tmp\E30.FDB & C:\MIX\firebird\fb30Cs\gstat -h C:\MIX\firebird\QA\fbt-repo\tmp\E30.FDB
Эта команда выведет вполне ожидаемые значения счетчиков:
Код: plaintext
1.
2.
3.
        Oldest transaction      165
        Oldest active           166
        Oldest snapshot         166
        Next transaction        167
А теперь смотрим в лог ФБ и видим "чудо":
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
CSPROG	Tue Feb 02 01:31:54 2016
	Sweep is started by SWEEPER
	Database "C:\MIX\FIREBIRD\QA\FBT-REPO\TMP\E30.FDB" 
	OIT 8, OAT 9, OST 9, Next 164

CSPROG	Tue Feb 02 01:31:54 2016
	Sweep is finished
	Database "C:\MIX\FIREBIRD\QA\FBT-REPO\TMP\E30.FDB" 
	OIT 164,  OAT 9, OST 9 , Next 165

Повторяем всё опять с Классиком.
* результат echo quit; | isql ... & gstat -h ...:
Код: plaintext
1.
2.
3.
        Oldest transaction      164
        Oldest active           166
        Oldest snapshot         166
        Next transaction        167
* результат в ФБ логе:
Код: plaintext
1.
2.
	Sweep is finished
	Database "C:\MIX\FIREBIRD\QA\FBT-REPO\TMP\E30.FDB" 
	OIT 164, OAT 166, OST 166, Next 167

Всё хорошо, всё сходится ? Не будем наивными. Повторим команды из хистори и поиздеваемся еще немного :)

И, раз:
Код: plaintext
1.
2.
3.
        Oldest transaction      164
        Oldest active           166
        Oldest snapshot         166
        Next transaction        167
vs
Код: plaintext
1.
2.
	Sweep is finished
	Database "C:\MIX\FIREBIRD\QA\FBT-REPO\TMP\E30.FDB" 
	OIT 164, OAT 166, OST 166, Next 167

И, два-с:
Код: plaintext
1.
2.
3.
        Oldest transaction      165
        Oldest active           166
        Oldest snapshot         166
        Next transaction        167
vs
Код: plaintext
1.
2.
3.
	Sweep is finished
	Database "C:\MIX\FIREBIRD\QA\FBT-REPO\TMP\E30.FDB" 
	OIT 164,  OAT 9, OST 9 , Next 165

А теперь объясните мне, плз: почему свип то ли "не успевает" увидеть реальные счетчики транзакций на момент своего окончания, то ли видит их, но "не все" ? Например, OAT & OST для Cs в сообщении "swep finished" - ну явно же старые остались. Хотя и не всегда, иногда "видит" и актуальные... вроде...

PS. Обе базы, ready4sweep-sS.fdb & ready4sweep-Cs.fdb, подготовленные для автостарта свипа при первом же коннекте к ним, см. в аттаче.
...
Рейтинг: 0 / 0
Next - OIT > sweep_int: может ли НЕ начаться автостарт sweep'a при коннекте к такой базе ?
    #39160655
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Таблоид,

ломотно смотреть твои скрипты, может дело в том, что sweep кроме oit ничего больше "не двигает". И чтобы увидеть реальные счетчики надо стартануть транзакцию, хотя бы в isql. OST и OAT вверх двигает только старт новой транзакции (если они могут подвинуться).
...
Рейтинг: 0 / 0
Next - OIT > sweep_int: может ли НЕ начаться автостарт sweep'a при коннекте к такой базе ?
    #39160717
Таблоид
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdvsweep кроме oit ничего больше "не двигает". И чтобы увидеть реальные счетчики надо стартануть транзакцию, хотя бы в isql. OST и OAT вверх двигает только старт новой транзакции (если они могут подвинуться).Хорошо, вот пример без isql'я (но нужно, чтобы на машине был установлен Python и дрова к ФБ - пакет "fdb"; база прописана в 'databases.conf' как алиас 'e30').

Делаю два .py-файлика:
1) для коннекта без транзакции к SuperServer'у (он слушает порт 3333; скрипт назван "test-sS.py"):

Код: plaintext
1.
2.
3.
4.
import fdb
dbnm='localhost/3333:e30'
att1 = fdb.connect(dsn=dbnm, user='SYSDBA', password='masterkey')
print(fdb.__version__)

2) для коннекта без транзакции к Classic'у (он слушает порт 3329; скрипт назван "test-Cs.py"):

Код: plaintext
1.
2.
3.
import fdb
dbnm='localhost/3329:e30'
att1 = fdb.connect(dsn=dbnm, user='SYSDBA', password='masterkey')
print(fdb.__version__)

Оба они при своём запуске ('python test-XX.py' должны выдать версию драйвера и тут же завершиться).

Делаю рестарт ФБ (SS, CS), обнуляю firebird.log.
Запускаю трейс с конфигом:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
  enabled = true
  log_sweep = true
  log_errors = true
  time_threshold = 0
  log_connections = true
  log_transactions = true
  log_statement_prepare = true
  log_statement_start = true
  log_statement_finish = true

И теперь делаю два прогона:
1) SuperServer:
Код: plaintext
copy ready4sweep-Ss.fdb E30.FDB & python test-sS.py & C:\MIX\firebird\fb30\gstat -h C:\MIX\firebird\QA\fbt-repo\tmp\E30.FDB

2) Classic:
Код: plaintext
copy ready4sweep-Cs.fdb E30.FDB & python test-Cs.py & C:\MIX\firebird\fb30Cs\gstat -h C:\MIX\firebird\QA\fbt-repo\tmp\E30.FDB

А дальше смотрю в логи трейса и ФБ.
И вижу:
1) SuperServer:
1.1) firebird.log:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
CSPROG	Tue Feb 02 08:38:41 2016
	Sweep is started by SWEEPER
	Database "e30" 
	OIT 8, OAT 9, OST 9, Next 163

CSPROG	Tue Feb 02 08:38:41 2016
	Sweep is finished
	Database "e30" 
	OIT 163,  OAT 163, OST 163 , Next 164
1.2) Trace:
Код: 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.
98.
99.
100.
Trace session ID 8 started
2016-02-02T08:38:41.0960 (7756:00C42B30) TRACE_INIT
	SESSION_8  
	

2016-02-02T08:38:41.0960 (7756:00C42B30) DETACH_DATABASE
	C:\MIX\FIREBIRD\FB30\SECURITY3.FDB (ATT_83, SYSDBA:NONE, NONE, <internal>)

2016-02-02T08:38:41.0960 (7756:00C42B30) TRACE_FINI
	SESSION_8  
	

2016-02-02T08:38:41.1740 (7756:00C42B30) TRACE_INIT
	SESSION_8  
	

2016-02-02T08:38:41.1740 (7756:00C42B30) ATTACH_DATABASE
	C:\MIX\FIREBIRD\FB30\SECURITY3.FDB (ATT_84, SYSDBA:NONE, NONE, <internal>)

2016-02-02T08:38:41.1890 (7756:00C42B30) START_TRANSACTION
	C:\MIX\FIREBIRD\FB30\SECURITY3.FDB (ATT_84, SYSDBA:NONE, NONE, <internal>)
		(TRA_109, CONCURRENCY | WAIT | READ_ONLY)

2016-02-02T08:38:41.1890 (7756:00C42B30) ROLLBACK_TRANSACTION
	C:\MIX\FIREBIRD\FB30\SECURITY3.FDB (ATT_84, SYSDBA:NONE, NONE, <internal>)
		(TRA_109, CONCURRENCY | WAIT | READ_ONLY)
      0 ms, 1 write(s), 1 fetch(es), 1 mark(s)

2016-02-02T08:38:41.4240 (7756:00C45550) TRACE_INIT
	SESSION_8  
	

2016-02-02T08:38:41.4240 (7756:00C45550) ATTACH_DATABASE
	e30 (ATT_17, SWEEPER:NONE, NONE, <internal>)

2016-02-02T08:38:41.4240 (7756:00C45550) SWEEP_START
	e30 (ATT_17, SWEEPER:NONE, NONE, <internal>)

Transaction counters:
	Oldest interesting          8
	Oldest active               9
	Oldest snapshot             9
	Next transaction          163

2016-02-02T08:38:41.4240 (7756:00C45550) START_TRANSACTION
	e30 (ATT_17, SWEEPER:NONE, NONE, <internal>)
		(TRA_164, READ_COMMITTED | REC_VERSION | WAIT | READ_ONLY)

2016-02-02T08:38:41.4240 (7756:00C45890) TRACE_INIT
	SESSION_8  
	

2016-02-02T08:38:41.4240 (7756:00C45890) ATTACH_DATABASE
	e30 (ATT_18, SYSDBA:NONE, NONE, TCPv4:127.0.0.1/3396)
	C:\Python27\python.exe:5524

2016-02-02T08:38:41.4390 (7756:00C45550) SWEEP_PROGRESS
	e30 (ATT_17, SWEEPER:NONE, NONE, <internal>)
      6 ms, 15 read(s), 366 fetch(es), 3 mark(s)

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

2016-02-02T08:38:41.4390 (7756:00C45550) SWEEP_FINISH
	e30 (ATT_17, SWEEPER:NONE, NONE, <internal>)

Transaction counters:
	Oldest interesting        163
	Oldest active             163
	Oldest snapshot           163
	Next transaction          164
     20 ms, 76 read(s), 26 write(s), 968 fetch(es), 77 mark(s)

Table                             Natural     Index    Update    Insert    Delete   Backout     Purge   Expunge
***************************************************************************************************************
RDB$PAGES                             152                                                                      
RDB$DATABASE                            1                                                                      
RDB$RELATIONS                                     2                                                            
RDB$FORMATS                                       1                                                            
RDB$SECURITY_CLASSES                              1                                                            
TEST                                  151                                                 1                    

2016-02-02T08:38:41.4390 (7756:00C45550) COMMIT_TRANSACTION
	e30 (ATT_17, SWEEPER:NONE, NONE, <internal>)
		(TRA_164, READ_COMMITTED | REC_VERSION | WAIT | READ_ONLY)
      0 ms

2016-02-02T08:38:41.4550 (7756:00C45550) DETACH_DATABASE
	e30 (ATT_17, SWEEPER:NONE, NONE, <internal>)

2016-02-02T08:38:41.4550 (7756:00C45550) TRACE_FINI
	SESSION_8  
	

2016-02-02T08:38:41.4550 (7756:00C45890) DETACH_DATABASE
	e30 (ATT_18, SYSDBA:NONE, NONE, TCPv4:127.0.0.1/3396)
	C:\Python27\python.exe:5524

2016-02-02T08:38:41.4550 (7756:00C45890) TRACE_FINI
	SESSION_8  


2) Classic:
2.1) firebird.log:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
CSPROG	Tue Feb 02 08:43:18 2016
	Sweep is started by SWEEPER
	Database "e30" 
	OIT 8, OAT 9, OST 9, Next 164

CSPROG	Tue Feb 02 08:43:18 2016
	Sweep is finished
	Database "e30" 
	OIT 164,  OAT 9, OST 9 , Next 165
2.2) Trace:
Код: 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.
Trace session ID 10 started
2016-02-02T08:45:20.8920 (4816:016E3E90) TRACE_INIT
	SESSION_10  
	

2016-02-02T08:45:20.8920 (4816:016E3E90) ATTACH_DATABASE
	e30 (ATT_12, SWEEPER:NONE, NONE, <internal>)

2016-02-02T08:45:20.8920 (4816:016E3E90) SWEEP_START
	e30 (ATT_12, SWEEPER:NONE, NONE, <internal>)

Transaction counters:
	Oldest interesting          8
	Oldest active               9
	Oldest snapshot             9
	Next transaction          164

2016-02-02T08:45:20.8920 (4816:016E3E90) START_TRANSACTION
	e30 (ATT_12, SWEEPER:NONE, NONE, <internal>)
		(TRA_165, READ_COMMITTED | REC_VERSION | WAIT | READ_ONLY)

2016-02-02T08:45:20.8920 (4816:016E3E90) SWEEP_PROGRESS
	e30 (ATT_12, SWEEPER:NONE, NONE, <internal>)
      0 ms, 3 read(s), 15 fetch(es), 4 mark(s)

Table                             Natural     Index    Update    Insert    Delete   Backout     Purge   Expunge
***************************************************************************************************************
RDB$DATABASE                            1                                                           1          

2016-02-02T08:45:20.9080 (4816:016E3E90) SWEEP_PROGRESS
	e30 (ATT_12, SWEEPER:NONE, NONE, <internal>)
      1 ms, 15 read(s), 366 fetch(es), 3 mark(s)

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

2016-02-02T08:45:20.9080 (4816:016E41D0) TRACE_INIT
	SESSION_10  
	

2016-02-02T08:45:20.9080 (4816:016E41D0) ATTACH_DATABASE
	e30 (ATT_13, SYSDBA:NONE, NONE, TCPv4:127.0.0.1/3411)
	C:\Python27\python.exe:6848

2016-02-02T08:45:20.9080 (4816:016E3E90) SWEEP_FINISH
	e30 (ATT_12, SWEEPER:NONE, NONE, <internal>)

Transaction counters:
	Oldest interesting        164
	Oldest active               9
	Oldest snapshot             9
	Next transaction          165
     19 ms, 117 read(s), 54 write(s), 1001 fetch(es), 81 mark(s)

Table                             Natural     Index    Update    Insert    Delete   Backout     Purge   Expunge
***************************************************************************************************************
RDB$PAGES                             152                                                                      
RDB$DATABASE                            3                                                           1          
RDB$RELATIONS                                     3                                                            
RDB$FORMATS                                       1                                                            
RDB$SECURITY_CLASSES                              1                                                            
TEST                                  151                                                 1                    

2016-02-02T08:45:20.9080 (4816:016E3E90) COMMIT_TRANSACTION
	e30 (ATT_12, SWEEPER:NONE, NONE, <internal>)
		(TRA_165, READ_COMMITTED | REC_VERSION | WAIT | READ_ONLY)
      0 ms

2016-02-02T08:45:20.9240 (4816:016E41D0) DETACH_DATABASE
	e30 (ATT_13, SYSDBA:NONE, NONE, TCPv4:127.0.0.1/3411)
	C:\Python27\python.exe:6848

2016-02-02T08:45:20.9390 (4816:016E41D0) TRACE_FINI
	SESSION_10  
	

2016-02-02T08:45:20.9550 (4816:016E3E90) DETACH_DATABASE
	e30 (ATT_12, SWEEPER:NONE, NONE, <internal>)

2016-02-02T08:45:20.9550 (4816:016E3E90) TRACE_FINI
	SESSION_10  
Коннект от питона транзакцию стопудово НЕ стартовал - это и по трейсу видно, и по документации к fdb тоже :))
Однако, это не помешало OAT & OST сдвинуться, но только в SuperServer'e. Это значит, что в SS "кто-то" тихо дёрнул транзакцию, и в результате они сдвиинулись.

Кроме того: значения счетчиков, в отличие от игр с isql'ем, выдаются стабильными, нету этих странностей с отличием значений в firebird.log (для 'sweep finish') и тем, что выдаёт после gstat -h.

И еще.
Classic показывает в трейсе сообщение 'sweep_progress' два раза - сначала для таблицы RDB$DATABASE, затем для "моей" таблицы TEST. Super - показывает 'sweep_progress' только 1 раз, для таблицы TEST; системные таблицы, насколько могу понять, свип в SS обходит стороной, что ле ?

ЗЫ. ну да, смотреть на многабукаф в и мне в лом, но таки "странность" со счетчиками от этого никуда не денется :-)
Ладно, кому интересно, тот найдёт 15-20 минут времени и прогонит у себя - я все шаги показал, базейки приаттачил.
...
Рейтинг: 0 / 0
Next - OIT > sweep_int: может ли НЕ начаться автостарт sweep'a при коннекте к такой базе ?
    #39160724
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Таблоиду да ладно, это SuperServer - там ведь лингер есть, да и вообще он базу не сразу отпускает после дисконнекта (60 или 70 сек держит файл, ЕМНИП).

никакого linger по умолчанию нет. Он по умолчанию стоит равным 60 секунд только у security3.fdb . Во всех других базах пока ты сам этот лингер не поставишь он не появится
...
Рейтинг: 0 / 0
Next - OIT > sweep_int: может ли НЕ начаться автостарт sweep'a при коннекте к такой базе ?
    #39160732
Таблоид
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Денис,

ты бы проверил у себя все эти "выкладки".
Особливо по Классику интересно: будет ли картина со счетчиками такая же, как я выше привёл, т.е. будут ли в конфиге ФБ для 'sweep finished' записаны значения OAT & OST, отличающиеся от реальных (выдаваемых gstat -h) ?
...
Рейтинг: 0 / 0
Next - OIT > sweep_int: может ли НЕ начаться автостарт sweep'a при коннекте к такой базе ?
    #39160748
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Таблоид,

пару предположений

Свип для RDB$DATABASE запускается потому что в нём создаётся версия при DROP/CREATE TABLE (изменяется значение поля RDB$RELATION_ID). В супере есть ещё фоновая сборка мусора и она возможно успевает зачистить там всё до свипа.

В тройке свип более хитёр и читает только страницы у которых swept flag = 0, т.е. те которые не вычистил сборщик мусора или не вычистил предыдущий свип.

Я не сомневаюсь в приведённых тобой результатах, но не вижу причин для беспокойства
...
Рейтинг: 0 / 0
Next - OIT > sweep_int: может ли НЕ начаться автостарт sweep'a при коннекте к такой базе ?
    #39160795
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Таблоид,

я тебе дам наводки, а ты сам разбирайся с этой чепухой:
а) isql стартует 2 тр-ции,
б) свип работает асинхронно
в) свип стартует свою тр-цию
г) фоновая сборка мусора стартует свою тр-цию (Денису плюс за догадку)

Всё. Этого достаточно, чтобы всё объяснить. Правда смысла в этом - нулл в квадрате
...
Рейтинг: 0 / 0
Next - OIT > sweep_int: может ли НЕ начаться автостарт sweep'a при коннекте к такой базе ?
    #39161065
Таблоид
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hvladя тебе дам наводки, а ты сам разбирайся с этой чепухой:
а) isql стартует 2 тр-ции,
б) свип работает асинхронно
в) свип стартует свою тр-цию
г) фоновая сборка мусора стартует свою тр-цию (Денису плюс за догадку)

Всё. Этого достаточно, чтобы всё объяснить. Правда смысла в этом - нулл в квадратеОно конечно верно, чепуха полная, да нулл в квадрате... только вот что происходит (следите снова за руками, никаких козырей у меня в рукавах нету :)):
1) создаем, как я выше говорил, два файлика: test-Cs.py и test-sS.py (они показаны выше);
2) создаем батник 'swptest.bat':
Код: 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.
@echo off

if /i not .%1.==.SS. if /i not .%1.==.CS. goto syntax
if  /i not .%2.==.ISQL. if /i not .%2.==.PYTHON. goto syntax

set fb_arch=%1
set client=%2

if /i .%fb_arch%.==.sS. set fbc=C:\MIX\firebird\fb30
if /i .%fb_arch%.==.Cs. set fbc=C:\MIX\firebird\fb30Cs

copy nul %fbc%\firebird.log 1>nul 2>&1

set db_source=C:\MIX\firebird\QA\fbt-repo\tmp\ready4sweep-%fb_arch%.fdb
set db_target=C:\MIX\firebird\QA\fbt-repo\tmp\e30.fdb

if exist %db_target% del %db_target%
if exist %db_target% echo File %db_target% is opened by some application. & exit

copy %db_source% %db_target% >nul

echo Before connection:
%fbc%\gstat -h %db_target% | findstr /c:"Oldest" /c:"Next transaction"

echo.
echo Make connection to %db_target% using %client%
@echo on

if /i .%client%.==.PYTHON. (
   python test-%fb_arch%.py 
) else (
   echo quit; | %fbc%\isql localhost:%db_target%
)

@echo off
echo.
echo After connection:
%fbc%\gstat -h %db_target% | findstr /c:"Oldest" /c:"Next transaction"

echo Check %fbc%\firebird.log:
echo -------------------------
@rem type %fbc%\firebird.log
for /f "tokens=*" %%a in (%fbc%\firebird.log) do echo %%a
echo -------------------------

goto end

:syntax
  echo.
  echo Syntax: 
  echo.
  echo %~dp0%~n0 ^<fb_arch^> ^<client^>
  echo.
  echo Where arguments (case insensitive):
  echo.
  echo        fb_arch = SS ^| CS
  echo        client  = ISQL ^| PYTHON
  echo.
  pause
  goto end
:end
Этот батник делает:

0) обнуление к ЧМ лога ФБ (который определит по входному параметру 'fb_arch' и внутренней переменной 'fbc', значение которой зависит от него); копирование файла базы-"эталона" (ready4sweep-sS.fdb или ready4sweep-CS.fdb) в файл базы для пыток ('E30.FDB') - см переменные db_source & db_target;
1) вызов gstat -h для db_target - т.е. для базы, которая "готова к сборке" мусора, но еще не стала объектом домогательств свипа; для SS это база "ready4sweep-sS.fdb", для CS - база "ready4sweep-CS.fdb"
2) вызов коннекта - и тут он может сделать одно из двух:
2.1) либо выполнить коннект силами ISQL'я (но тогда там и транзакции будут стартовать)
2.2) либо выполнить коннект силами Python'a - и тогда будет вызван "test-Cs.py" или же "test-sS.py"
3) вызов gstat -h для базы уже _после_ того, как управление вернулось из isql или python'a
4) показ непустых строк firebird.log'a (а там должны появиться строки-сообщения о сборке мусора).

Ну так вот: когда этот батник дёргает Python для выполнения коннекта, то:
1) в SuperServer'e все три четчика (OIT, OAT & OST) будут продвинуты, но только для первого выполнения этого батника с момента рестарта ФБ !
Вот что будет на экране:
Код: 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.
C:\MIX\firebird\QA\fbt-repo\tmp>swptest.bat ss python
Before connection:
        Oldest transaction      8
        Oldest active           9
        Oldest snapshot         9
        Next transaction        162

Make connection to C:\MIX\firebird\QA\fbt-repo\tmp\e30.fdb using python

C:\MIX\firebird\QA\fbt-repo\tmp>if /I .python. == .PYTHON. (python test-ss.py  )  else (echo quit;   | C:\MIX\firebird\fb30\isql localh
ost:C:\MIX\firebird\QA\fbt-repo\tmp\e30.fdb )
1.5

After connection:
        Oldest transaction      163
        Oldest active           163
        Oldest snapshot         163
        Next transaction        164
 Check C:\MIX\firebird\fb30\firebird.log:
-------------------------
CSPROG  Tue Feb 02 13:53:19 2016
Sweep is started by SWEEPER
Database "e30"
OIT 8, OAT 9, OST 9, Next 163
CSPROG  Tue Feb 02 13:53:19 2016
Sweep is finished
Database "e30"
OIT 163, OAT 163, OST 163, Next 164
------------------------- 

C:\MIX\firebird\QA\fbt-repo\tmp>swptest.bat ss python
Before connection:
        Oldest transaction      8
        Oldest active           9
        Oldest snapshot         9
        Next transaction        162

Make connection to C:\MIX\firebird\QA\fbt-repo\tmp\e30.fdb using python

C:\MIX\firebird\QA\fbt-repo\tmp>if /I .python. == .PYTHON. (python test-ss.py  )  else (echo quit;   | C:\MIX\firebird\fb30\isql localh
ost:C:\MIX\firebird\QA\fbt-repo\tmp\e30.fdb )
1.5

After connection:
        Oldest transaction      8
        Oldest active           9
        Oldest snapshot         9
        Next transaction        162
 Check C:\MIX\firebird\fb30\firebird.log:
-------------------------
------------------------- 
/* да, firebird.log - пустой!*/ 
(разумеется, я ждал между последовательными запусками более 60 сек - мало ли, что там ему еще надо было от базы после детача :))

2) в Classic'e OIT (и только этот счетчик) будет продвинут при первом обращении к базе с момента рестарта ФБ:
Код: 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.
C:\MIX\firebird\QA\fbt-repo\tmp>swptest.bat cs python
Before connection:
        Oldest transaction      8
        Oldest active           9
        Oldest snapshot         9
        Next transaction        163

Make connection to C:\MIX\firebird\QA\fbt-repo\tmp\e30.fdb using python

C:\MIX\firebird\QA\fbt-repo\tmp>if /I .python. == .PYTHON. (python test-cs.py  )  else (echo quit;   | C:\MIX\firebird\fb30Cs\isql loca
lhost:C:\MIX\firebird\QA\fbt-repo\tmp\e30.fdb )
1.5

After connection:
        Oldest transaction      164
        Oldest active           9
        Oldest snapshot         9
        Next transaction        165
Check C:\MIX\firebird\fb30Cs\firebird.log:
-------------------------
CSPROG  Tue Feb 02 13:56:45 2016
Sweep is started by SWEEPER
Database "e30"
OIT 8, OAT 9, OST 9, Next 164
CSPROG  Tue Feb 02 13:56:45 2016
Sweep is finished
Database "e30"
OIT 164, OAT 9, OST 9, Next 165
-------------------------
-- а вот дальше... с вероятностью 1/2...1/3 батник заклинит на коннекте питона к базе! Хорошо еще, что питон "слушается" Ctrl-Break и можно затем повторять попытки.
...
Рейтинг: 0 / 0
Next - OIT > sweep_int: может ли НЕ начаться автостарт sweep'a при коннекте к такой базе ?
    #39161066
Таблоид
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И вот вам весь "пакет" для теста - см аттач.
Настройте только под свои порты прослушки и каталоги ФБ.
...
Рейтинг: 0 / 0
Next - OIT > sweep_int: может ли НЕ начаться автостарт sweep'a при коннекте к такой базе ?
    #39161075
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Таблоид,

тебе же Влад написал про фоновую сборку мусора для супера. Чего ещё не понятного осталось?
...
Рейтинг: 0 / 0
25 сообщений из 32, страница 1 из 2
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Next - OIT > sweep_int: может ли НЕ начаться автостарт sweep'a при коннекте к такой базе ?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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