|
Сборка мусора
|
|||
---|---|---|---|
#18+
Сделал очень простой тест для FB2.5 (полагаю, что относится к любым версиям FB): 1. Создал таблицу (не важно какую) с длинным полем varchar(5000) - для наглядности 2. Добавил в таблицу 1 запись 3. Запустил транзакцию T1 read_committed,rec_version,nowait (для удержания Oldest active) 2. Запустил цикл из 10000 итераций, в котором: 2.1 Запускается транзакция T2 read_committed,rec_version,nowait 2.2 Обновляется запись (каждый раз генерируется случайный текст из 5000 символов) 2.3 Коммитится транзакция T2 В результате gstat показывает ожидаемую разницу между "Oldest active" и "Next transaction" (те самые 10000 итераций). При этом размер базы: 85 МБайт. В ней очень много версий этой одной записи. Вопрос наверное звучит странно: почему Firebird, зная что транзакция "Oldest active" является "read_committed" и видя что все остальные транзакции между "Oldest active" и "Next transaction" закомичены, не хочет признавать версии записей мусором? ... |
|||
:
Нравится:
Не нравится:
|
|||
20.11.2018, 00:00 |
|
Сборка мусора
|
|||
---|---|---|---|
#18+
DmSerСделал очень простой тест для FB2.5 (полагаю, что относится к любым версиям FB):Повтори на снапшоте fb4 и больше так не полагай :) ... |
|||
:
Нравится:
Не нравится:
|
|||
20.11.2018, 00:17 |
|
Сборка мусора
|
|||
---|---|---|---|
#18+
DmSer, дело не в "признании", а в необходимости "выкусывания" лишних версий, что (до ФБ 4) считалось сложным и не нужным. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.11.2018, 00:26 |
|
Сборка мусора
|
|||
---|---|---|---|
#18+
Для тех кто не читал fbdevel. Если я правильно понимаю промежуточная сборка мусора вообще изначально не планировалась и идея возникла случайно. Николай предложил патч для реализации Statement Consistency в Read Committed, и предложил чтобы этот режим работал в Firebird 4.0 по умолчанию для Read Committed. Были заданы уточняющие вопросы из которых выяснилось, что в таком режиме даже транзакция RC RO будет удерживать мусор, что естественно вызвало недовольство, особенно программистов на Delphi. Потом в беседу вступил Джим и сказал что возможно в Firebird можно сделать промежуточную сборку мусора, чтобы уменьшить негативные последствия. Николай изучил этот вопрос и реализовал эту промежуточную сборку мусора. Ну а Влад потом доводил до ума и портировал в 4.0. Спасибо всем разработчикам за проделанную работу. hvladПовтори на снапшоте fb4 и больше так не полагай я пробовал. Промежуточные версии действительно отлично чистятся. Но одна версия всё равно остаётся пока читающая транзакция не завершена, даже когда она read committed и все записи курсора отфетчены (таблица содержит всего одну запись). Не знаю правильно это или нет (в любом случае лучше чем раньше). Если так не должно быть могу вечером написать воспроизводимый пример. Если так и должно быть, то не мог бы ты пояснить почему, ведь формально снапшот для курсора в RC из которого отфетчены все записи больше не нужен. Мешают BlobId? ... |
|||
:
Нравится:
Не нравится:
|
|||
20.11.2018, 09:50 |
|
Сборка мусора
|
|||
---|---|---|---|
#18+
Симонов ДенисЕсли так и должно бытьДа, так и должно быть. Предыдущая версия нужна той тр-ции, которая делает апдейт\делит. Её снимок никто не отменял. Да и куда откатываться, в случае роллбека ? ... |
|||
:
Нравится:
Не нравится:
|
|||
20.11.2018, 11:03 |
|
Сборка мусора
|
|||
---|---|---|---|
#18+
hvlad, тот кто делал апдейт/делит уже закомичен. Схема теста приблизительно такая Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
я могу сколько угодно делать в сессии 1 start trasaction -> update -> commit gstat будет показывать длину цепочки версий 1 select count(*) from t; могу тоже сколько угодно раз повторять ничего не меняется. Как только делаем в сессии 2 commit gstat показывает длину цепочки версий 0 ... |
|||
:
Нравится:
Не нравится:
|
|||
20.11.2018, 11:43 |
|
Сборка мусора
|
|||
---|---|---|---|
#18+
Симонов ДенисКак только делаем в сессии 2 commit gstat показывает длину цепочки версий 0Коммит сбросил кеш на диск. gstat читает данные с диска сам, без движка. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.11.2018, 12:01 |
|
Сборка мусора
|
|||
---|---|---|---|
#18+
hvlad, честно говоря не понял. Коммит транзакции которая делает update разве не сбрасывает кеш на диск? gstat я через сервисы запускаю, да и полностью рестартую каждый раз Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9.
сессия 1 Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13.
Код: plaintext 1. 2. 3. 4. 5. 6. 7.
Код: plaintext 1. 2. 3. 4. 5. 6. 7.
сессия 2 Код: sql 1. 2. 3. 4.
Код: plaintext 1. 2. 3. 4. 5. 6. 7.
сессия 2 Код: sql 1. 2.
сессия 1 Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12.
Код: plaintext 1. 2. 3. 4. 5. 6. 7.
Код: plaintext 1. 2. 3. 4. 5.
сессия 2 Код: sql 1.
Код: plaintext 1. 2. 3. 4. 5.
сессия 1 Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12.
Код: plaintext 1. 2. 3. 4. 5. 6. 7.
сессия 1 Код: sql 1.
Код: plaintext 1. 2. 3. 4. 5. 6. 7.
... |
|||
:
Нравится:
Не нравится:
|
|||
20.11.2018, 22:25 |
|
Сборка мусора
|
|||
---|---|---|---|
#18+
Симонов ДенисКоммит транзакции которая делает update разве не сбрасывает кеш на диск?Сбрасывает. И в этот момент на диске две версии. Потом ты запускаешь select в новой тр-ции, он собирает мусор. Но очищенные страницы живут в кеше FB и gstat их не видит. Симонов Денисgstat я через сервисы запускаю, да и полностью рестартую каждый разСервисы\не сервисы - он всё равно с диска читает, а не из кеша FB. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.11.2018, 22:31 |
|
Сборка мусора
|
|||
---|---|---|---|
#18+
hvlad, о как! Спасибо за разъяснения. А я то надеялся увидеть это живьём ... |
|||
:
Нравится:
Не нравится:
|
|||
20.11.2018, 22:42 |
|
Сборка мусора
|
|||
---|---|---|---|
#18+
Вот такая жесть с транзакциями сейчас у клиента: http://www.loginovprojects.ru/gstat-office.jpg Если клиент остановит СУБД, то БД будет повреждена. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.11.2018, 10:45 |
|
Сборка мусора
|
|||
---|---|---|---|
#18+
DmSerЕсли клиент остановит СУБД, то БД будет повреждена.С чего бы это ? ... |
|||
:
Нравится:
Не нравится:
|
|||
26.11.2018, 11:01 |
|
Сборка мусора
|
|||
---|---|---|---|
#18+
DmSerЕсли клиент остановит СУБД, то БД будет повреждена. ты откуда это взял? ... |
|||
:
Нравится:
Не нравится:
|
|||
26.11.2018, 11:04 |
|
Сборка мусора
|
|||
---|---|---|---|
#18+
2 раза уже было такое - в августе и в ноябре. Видимо, при закрытии всех программ срабатывает сборка мусора (может sweep, но в логи FB2.1 об этом не писал), а клиент завершает работу Windows (в последний раз отключили внешнее питание и нужно было выключить сервер, пока не сел бесперебойник). После этого базу приходилось восстанавливать с помощью gfix. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.11.2018, 11:34 |
|
Сборка мусора
|
|||
---|---|---|---|
#18+
Такое чаще всего бывает, когда база уже повреждена (вы работаете с повреждённой базой), но не настолько, чтобы это вызвало аварийное завершение. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.11.2018, 11:39 |
|
Сборка мусора
|
|||
---|---|---|---|
#18+
DmSer2 раза уже было такоеКакое ? DmSerПосле этого базу приходилось восстанавливать с помощью gfix.Кроме орфанов что-то было ? А до того ? ... |
|||
:
Нравится:
Не нравится:
|
|||
26.11.2018, 11:46 |
|
Сборка мусора
|
|||
---|---|---|---|
#18+
hvladКакое ? База повреждалась. Оба раза довольно легко лечилась с помощью gfix. После первого повреждения зависал SELECT к таблице, где много версий (там всего 150 записей, но каждая из них обновляется раз в минуту). После второго повреждения проверка БД выдавала несколько тысяч ошибочных страниц с данными. При этом данные затронуты не были, проблема видимо была только со страницами, на которых хранились версии. hvladКроме орфанов что-то было ? А до того ? По сути в логах FB оба раза я видел только орфаны, причем по несколько миллионов. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.11.2018, 11:55 |
|
Сборка мусора
|
|||
---|---|---|---|
#18+
DmSer, орфаны <> повреждения DmSerПосле первого повреждения зависал SELECT к таблице, где много версий (там всего 150 записей, но каждая из них обновляется раз в минуту). не путай сборку мусора, которая и выглядит как зависание, с повреждениями. Вариант 2 время уходит на восстановление записей из версий >> там всего 150 записей, но каждая из них обновляется раз в минуту ужас!!!! И ещё 2.1 уже снят с поддержки вряд ли в нём что-то будет правится ... |
|||
:
Нравится:
Не нравится:
|
|||
26.11.2018, 12:14 |
|
Сборка мусора
|
|||
---|---|---|---|
#18+
Симонов Денисне путай сборку мусора, которая и выглядит как зависание, с повреждениями. Вариант 2 время уходит на восстановление записей из версий Спутать невозможно. Клиент 6 часов ждал. Там именно зависание было. Симонов ДенисИ ещё 2.1 уже снят с поддержки вряд ли в нём что-то будет правится Зачем править Firebird? Проблема в моём софте, а не в Firebird. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.11.2018, 12:19 |
|
Сборка мусора
|
|||
---|---|---|---|
#18+
26.11.2018 12:19, DmSer пишет: > Спутать невозможно. Клиент 6 часов ждал. > Там именно зависание было. "мамом клянусЪ, э!" (С) Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
26.11.2018, 12:44 |
|
Сборка мусора
|
|||
---|---|---|---|
#18+
Мимопроходящий26.11.2018 12:19, DmSer пишет: > Спутать невозможно. Клиент 6 часов ждал. > Там именно зависание было. "мамом клянусЪ, э!" (С) Можно и так сказать. Клиент мне эту базу присылал (в состоянии "поврежденная"). Там FB при SELECT к этой несчастной таблице жрал одно ядро на 100%. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.11.2018, 12:47 |
|
Сборка мусора
|
|||
---|---|---|---|
#18+
26.11.2018 12:47, DmSer пишет: > Можно и так сказать. Клиент мне эту базу присылал (в состоянии "поврежденная"). > Там FB при SELECT к этой несчастной таблице жрал одно ядро на 100%. цепляться нужно было с отключенной сборкой мусора Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
26.11.2018, 12:50 |
|
Сборка мусора
|
|||
---|---|---|---|
#18+
Симонов Денис>> там всего 150 записей, но каждая из них обновляется раз в минуту ужас!!!! вполне может быть ужас. Я наблюдал систему, где на классике повис один коннект с активной транзакцией, и висел он три дня. Примерно в такой же мелкой таблице апдейтами за эти 3 дня нагенерилось 1.5млн версий. Даже если в этой таблице два целочисленных столбца, размер такой записи (с кучей версий) - под 50 мегабайт. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.11.2018, 12:56 |
|
Сборка мусора
|
|||
---|---|---|---|
#18+
kdv> 1.5млн версий. ... под 50 мегабайт. И что, 3 дня чистилось? Не верю. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
26.11.2018, 12:59 |
|
Сборка мусора
|
|||
---|---|---|---|
#18+
DmSer, много orphan pages - результат обрубания коннекта, который много навставлял. Это не повреждение, просто результат ACID. А вот зависание при сборке мусора, да еще на 6 часов - вполне может быть. Много индексов, хилое железо, плюс старый ФБ - вот и результат. Другое дело, что - за 9 дней 4 миллиона транзакций, это 460 тысяч транзакций в сутки. - активная транзакция висела чуть больше 2х суток. И возникает вопрос, кто такое приложение писал, что оно так работает. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.11.2018, 13:02 |
|
|
start [/forum/search_topic.php?author=Zurab2018&author_mode=last_topics&do_search=1]: |
0ms |
get settings: |
8ms |
get forum list: |
13ms |
get settings: |
10ms |
get forum list: |
11ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
82ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
54ms |
get tp. blocked users: |
1ms |
others: | 372ms |
total: | 569ms |
0 / 0 |