powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / gfix sweep висит по 10 часов
25 сообщений из 89, страница 1 из 4
gfix sweep висит по 10 часов
    #40019148
tromani
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
собствеено сабж, фаяберд 3.0, железо норм ссд, можно как-то ускорить? при этом gbak на ту же бд зависает на записи одной таблицы и пишет по 5 часов 10к записей, размер базы 9гб
...
Рейтинг: 0 / 0
gfix sweep висит по 10 часов
    #40019156
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tromani,

Что показывает gstat -r -t <TABLE> dbfile ?
...
Рейтинг: 0 / 0
gfix sweep висит по 10 часов
    #40019161
tromani
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Database "C:\BASES\LF\STORAGE__.FDB"
Gstat execution time Mon Nov 16 22:52:12 2020

Database header page information:
Flags 0
Generation 247453033
System Change Number 0
Page size 16384
ODS version 12.0
Oldest transaction 63297581
Oldest active 247384064
Oldest snapshot 247384064
Next transaction 247384066
Sequence number 0
Next attachment ID 214353
Implementation HW=AMD/Intel/x64 little-endian OS=Windows CC=MSV
C
Shadow count 0
Page buffers 0
Next header page 0
Database dialect 3
Creation date Nov 12, 2020 1:51:42
Attributes force write

Variable header data:
Sweep interval: 20000
*END*


Database file sequence:
File C:\BASES\LF\STORAGE__.FDB is the only file

I/O error during "CreateFile (open)" operation for file "C:\BASES\LF\STORAGE__.F
DB"
-Error while trying to open file
-Процесс не может получить доступ к файлу, так как этот файл занят другим процес
сом.
Gstat completion time Mon Nov 16 22:52:12 2020
...
Рейтинг: 0 / 0
gfix sweep висит по 10 часов
    #40019166
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tromaniможно как-то ускорить?

Отпинать разработчиков приложения, нанять DBA, ещё раз отпинать разработчиков. Не поможет
- заменить их. Ещё раз не поможет - выкинуть Firebird, поставить MySQL.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
gfix sweep висит по 10 часов
    #40019168
tromani
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry Sibiryakov,

можете подсказать за что пинать
...
Рейтинг: 0 / 0
gfix sweep висит по 10 часов
    #40019169
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tromani,

теперь gstat -r -t <TABLE> localhost:dbfile
...
Рейтинг: 0 / 0
gfix sweep висит по 10 часов
    #40019170
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tromaniза что пинать

За создание и накопление мусора в БД. Да, это два разных процесса. Первый безопасен без
второго.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
gfix sweep висит по 10 часов
    #40019176
tromani
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
hvlad,

Database "C:\BASES\LF\STORAGE__.FDB"
Gstat execution time Mon Nov 16 23:34:05 2020

Database header page information:
Flags 0
Generation 247453033
System Change Number 0
Page size 16384
ODS version 12.0
Oldest transaction 63297581
Oldest active 247384064
Oldest snapshot 247384064
Next transaction 247384066
Sequence number 0
Next attachment ID 214353
Implementation HW=AMD/Intel/x64 little-endian OS=Windows CC=MSV
C
Shadow count 0
Page buffers 0
Next header page 0
Database dialect 3
Creation date Nov 12, 2020 1:51:42
Attributes force write

Variable header data:
Sweep interval: 20000
*END*


Database file sequence:
File C:\BASES\LF\STORAGE__.FDB is the only file

Unable to complete network request to host "localhost".
-Failed to establish a connection.
Gstat completion time Mon Nov 16 23:34:07 2020

я сервер выключил чтоб сделать gbak если что
...
Рейтинг: 0 / 0
gfix sweep висит по 10 часов
    #40019178
tromani
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
я не понимаю, gbak сутки на ссд чето там гбачит, трындец какойто всего 9гб, за это время можно переписать вручную всю бд в тетрадку в клеточку... тут походу разрабов фб надо пнуть
...
Рейтинг: 0 / 0
gfix sweep висит по 10 часов
    #40019188
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tromani
я сервер выключил
тогда снова БЕЗ localhost, и без других коннектов

tromani
чтоб сделать gbak
Глупо и не нужно.

PS ключ -g gbak'у указан ?
PPS RTFM gbak -se
...
Рейтинг: 0 / 0
gfix sweep висит по 10 часов
    #40019189
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tromani
я не понимаю , gbak сутки на ссд чето там гбачит, трындец какойто всего 9гб, за это время можно переписать вручную всю бд в тетрадку в клеточку
Что мешает ? Тетрадки нет ?
Впрочем, главное я выделил.

tromani
тут походу разрабов фб надо пнуть
Ну давай, пинай - посмотрим у кого тетрадка толще
...
Рейтинг: 0 / 0
gfix sweep висит по 10 часов
    #40019190
tromani
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
hvlad,

а смысл указывать -g? ни один запрос не выполняется все висит
-se не указана сервер локальный
...
Рейтинг: 0 / 0
gfix sweep висит по 10 часов
    #40019204
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tromaniOldest transaction 63297581
Oldest active 247384064

А вот за такую хрень разработчиков приложения надо не просто пинать, а целиться по самым
чувствительным местам. Они про транзакции вообще хоть что-нибудь слышали?..
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
gfix sweep висит по 10 часов
    #40019205
tromani
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry Sibiryakov,
везде любой запрос начинается со starttransaction и заканчивается commit/rollback
...
Рейтинг: 0 / 0
gfix sweep висит по 10 часов
    #40019208
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tromaniвезде любой запрос начинается со starttransaction и заканчивается commit/rollback

Во-первых, это само по себе глупость.
Во-вторых, отквоченные цифры утверждают противоположное.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
gfix sweep висит по 10 часов
    #40019211
tromani
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry Sibiryakov,

почему глупость? а чем должен заканчиваться запрос?
...
Рейтинг: 0 / 0
gfix sweep висит по 10 часов
    #40019216
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tromaniа чем должен заканчиваться запрос?

Тем, что от него требует ТЗ. Я реально не верю, что у вас там в требованиях написано
"коммит на каждый чих".

У вас в базе проведено 250 миллионов транзакций за четыре дня. Транзакции Мастеркард
обрабатываете?..
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
gfix sweep висит по 10 часов
    #40019217
tromani
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry Sibiryakov,

Dimitry SibiryakovВо-вторых, отквоченные цифры утверждают противоположное

Для того, чтобы подвинуть "вверх" номер Oldest Interesting Transaction (Oldest transaction в gstat -h). Дело в том, что единственные транзакции, которые приводят к "залипанию" Oldest на месте, это транзакции, которые завершились Rollback, и для которых сервер не смог отменить все изменения по сохраненным в памяти savepoints. То есть, пока все версии, созданные этой транзакцией не будут отменены, ее состояние нельзя перевернуть в committed. А транзакции snapshot оценивают состояния конкурирующих транзакций и возможность модификации записей именно от Oldest transaction до Next transaction. Собственно, при чтении версий, номер транзакций которых меньше Oldest transaction, сервер даже не проверяет наличие версий, потому что таковых нет и быть не может, а кроме того, все транзакции меньше Oldest обязательно находятся в состоянии committed (т. е. их версии можно читать).

http://www.ibase.ru/sweep/

как раз таки об этом
...
Рейтинг: 0 / 0
gfix sweep висит по 10 часов
    #40019219
tromani
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry Sibiryakov,

Dimitry SibiryakovУ вас в базе проведено 250 миллионов транзакций за четыре дня

да там очень быстрый поток данных и сильно меняющийся во времени
...
Рейтинг: 0 / 0
gfix sweep висит по 10 часов
    #40019221
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tromaniкак раз таки об этом

У вас автосвип должен был запуститься и отработать на разрыве уже в 20 тысяч
транзакций, подвинув счётчик. А Вы показываете разрыв в 180 миллионов . То есть та
хрень, что вы творили с базой, полностью его заблокировала.

tromaniда там очень быстрый поток данных и сильно меняющийся во времени

И дай угадаю: этот поток меняет одни и те же записи в одной таблице по миллиону раз в
день? Если так, то пинать надо не разработчиков, а архитектора, которые выбрал для этого
проекта Firebird вместо чего-нибудь In-memory.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
gfix sweep висит по 10 часов
    #40019223
tromani
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry Sibiryakov,

да уже понятно что файберд не справился с задачами и субд заменим, все таки с сабжем чем-то поможете? вторые сутки -sweep никак не родит, а то как обычно ушли в дебри пинания архитекторов, программистов, создателя программистов и всего прочего вопрос то был можно как-то ускорить -sweep и что он таки делает вторые сутки даже перебирая 250млн мусорных записей это всего 9гб данных можно было уже по байту все перебрать
...
Рейтинг: 0 / 0
gfix sweep висит по 10 часов
    #40019231
fraks
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tromani

да уже понятно что файберд не справился с задачами и субд заменим,


Программист не справился, или не предусмотрел таких объемов.
Выбрал СУБД не соответствующую архитектуре, или простроил архитектуру не соответствующую выбранной СУБД.

tromani

все таки с сабжем чем-то поможете? вторые сутки -sweep никак не родит
можно как-то ускорить -sweep и что он таки делает вторые сутки даже перебирая 250млн мусорных записей это всего 9гб данных можно было уже по байту все перебрать


Я бы попробовал следующее:

1. Отключить автосвип, он все равно не успевает справляться.
2. Отключить все коннекты.
3. Сделать бэкап с ключом -g (без сборки мусора)
4. Рестор

Получаем базу без мусора.

Далее, что бы мусор не накапливался, нужно отрубать хвосты транзакциям которые держат мусор.
Можно поискать конкретного - по номеру транзакции oldest через таблицы мониторинга смотрим из какого коннекта она выполнена, может быть даже запрос в этой транзакции посмотреть, и отключить этого клиента. Можно добровольно, а можно и принудительно. Удерживаемые этим клиентом этой транзакцией потеряют актуальность и их можно будет собрать, как мусор.

После чего смотрим разрыв между oldest и next - если большой, то опять ищем кто держит oldest и перезапускаем эту программу.

Либо просто сделать регламент - каждый час все программы работающие с базой перезапускаются.

tromani

и что он таки делает вторые сутки даже перебирая 250млн мусорных записей это всего 9гб данных


Неверно.
250 миллионов не записей а транзакций, каждая из которых может держать кучу версий записей для себя.
Самих версий записей может быть намного больше чем 250млн и намного больше чем собственно записей в таблице.
...
Рейтинг: 0 / 0
gfix sweep висит по 10 часов
    #40019232
fraks
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tromani

а смысл указывать -g? ни один запрос не выполняется все висит


-g отключает кооперативную сборку мусора, если не ошибаюсь в термине.

Смысл такой. Читающая транзакция (в данном случае она из gbak) ищет те версии записей которые ей можно видеть. Обнаружив еще какие-то иные - проверяет, есть ли кто-то заинтересованный в этих версиях. Если интересантов нет - удаляет такие версии.

Так вот, ключ -g этот механизм отключает - нашлась версия которая нужна - берем, остальное просто пропускаем, ничего больше не читаем, чисткой мусора не занимаемся. Это ускорит бэкап замусоренной базы.
...
Рейтинг: 0 / 0
gfix sweep висит по 10 часов
    #40019249
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fraks,

плюсану по пунктам.
Автор - сделайте срочно gfix database -h 0
хотя бы.
При таком разрыве OST-OT у вас авто-sweep может долбить базу целый день. Там еще видимо Oldest active торчало, иначе авто-свип бы смог хоть какой-то "мусор" собрать.

А разработчиков БД надо пнуть, да, пусть хоть что-то по транзакциям на ibase.ru почитают.
...
Рейтинг: 0 / 0
gfix sweep висит по 10 часов
    #40019269
fraks
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tromani
Dimitry Sibiryakov,
везде любой запрос начинается со starttransaction и заканчивается commit/rollback


Выполните запрос на рабочей базе и посмотрите как и все ли транзакции у вас заканчиваются.
Запрос написан для Fibrebird-2.5 не гарантирую что на тройке будет работать.

Транзакция у которой MON$TRANSACTION_ID = OLDEST TRANSACTION - и есть та самая которая не дает собирать мусор.

Код: plsql
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.
-- FrmFirebird.QTrans
--
-- Текущие транзакции в базе
--

select
  tr.MON$TRANSACTION_ID     as MON$TRANSACTION_ID,
  tr.MON$ATTACHMENT_ID      as MON$ATTACHMENT_ID,

  att.MON$REMOTE_ADDRESS    as att_ip,
  att.MON$REMOTE_PROCESS    as att_exe,

  -- выкусить текст после последнего слэша, и в верхний регистр
  upper( reverse( substring( reverse(att.MON$REMOTE_PROCESS) from 1 for position('\', reverse(replace(att.MON$REMOTE_PROCESS,'/','\')), 1)-1 ) ) )
                            as att_exe2,

  case tr.MON$STATE
    when 0 then 'idle'
    when 1 then 'active'
    else        tr.MON$STATE
  end                       as state,

  tr.MON$TIMESTAMP          as timestamp_,
  tr.MON$TOP_TRANSACTION    as top_transaction,
  tr.MON$OLDEST_TRANSACTION as oldest_transaction,
  tr.MON$OLDEST_ACTIVE      as oldest_active,

  case tr.MON$ISOLATION_MODE
    when 0 then 'consistency'
    when 1 then 'concurrency'
    when 2 then 'RC record version'
    when 3 then 'RC no record version'
    else        tr.MON$ISOLATION_MODE
  end                       as isolation_mode,

  case tr.MON$LOCK_TIMEOUT
    when -1 then 'wait'
    when  0 then 'no wait'
    else         'timeout ' || tr.MON$LOCK_TIMEOUT
  end                       as lock_timeout,

  tr.MON$READ_ONLY          as read_only,
  tr.MON$AUTO_COMMIT        as auto_commit,
  tr.MON$AUTO_UNDO          as auto_undo,
  tr.MON$STAT_ID            as MON$STAT_ID,

  -- сколько часов коннект существует
  (datediff(HOUR,   tr.MON$TIMESTAMP, current_timestamp)) as dt_hour,

  -- сколько минут коннект существует
  (datediff(MINUTE, tr.MON$TIMESTAMP, current_timestamp)) as dt_minute,

  -- если транзакция (или коннект?) активен более 180 минут (3 часа) - выделим его красным шрифтом
  iif((datediff(MINUTE, tr.MON$TIMESTAMP, current_timestamp)) > 180, 'RED', '') as ROW_COLOR

from mon$transactions tr
  left join mon$attachments att on (att.mon$attachment_id =  tr.MON$ATTACHMENT_ID)

order by tr.MON$TIMESTAMP




Вот так можно посмотреть какие запросы были выполнены в этой транзакции

Код: plsql
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.
-- FrmFirebird.QStat
--
-- Запросы в указанной транзакции
--

select
  st.MON$STATEMENT_ID       as MON$STATEMENT_ID,
  st.MON$ATTACHMENT_ID      as MON$ATTACHMENT_ID,
  st.MON$TRANSACTION_ID     as MON$TRANSACTION_ID,

  att.MON$REMOTE_ADDRESS    as att_ip,
  att.MON$REMOTE_PROCESS    as att_exe,

  case st.MON$STATE
    when 0 then 'idle'
    when 1 then 'active'
    when 2 then 'stalled'
    else        st.MON$STATE
  end                       as STATE,

  st.MON$TIMESTAMP          as TIMESTAMP_,

  -- сколько минут запрос существует
  (datediff(MINUTE, st.MON$TIMESTAMP, current_timestamp)) as dt_minute,

  st.MON$STAT_ID            as MON$STAT_ID

from mon$statements st
  left join mon$attachments att on (att.mon$attachment_id =  st.MON$ATTACHMENT_ID)

where (st.MON$TRANSACTION_ID = :TRANSACTION_ID)

order by 
  st.MON$STATEMENT_ID





А вот так глянуть на сам текст запроса

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
-- FrmFirebird.QStatSQL
--
-- Текст указанного запроса
--

select 
  mon$sql_text

from mon$statements

where (mon$statement_id = :statement_id)



По результатам можно будет потыкать программистов носом в конкретное место программы, где они херово работают с транзакцией (не закрывают например).
...
Рейтинг: 0 / 0
25 сообщений из 89, страница 1 из 4
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / gfix sweep висит по 10 часов
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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