|
Остановка работы базы при нехватке места под временный файл
|
|||
---|---|---|---|
#18+
FB 3.0.8. Сегодня запустили один запрос, который включает много полей для группировки. Через некоторое время на диске закончилось место под файл сортировки (90 Гб), и сервер начал сыпать разными сообщениями про нехватку места, например: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13.
Код: plaintext 1. 2. 3. 4. 5.
В итоге база остановилась с сообщениями про Firebird consistency check. Хотя на самом деле ничего криминального не произошло. Добавлю, что уже писал несколько лет назад, что нехватка места под временный файл приводит к вот такому итогу. Валидация базы после перезагрузки сервера показала, что все ОК. Могу ли я создать тикеты на следующую тему: 1. Останавливать выполнение запроса, если размер временного файла превышает определенный размер (настраивается в firebird.conf)? Сейчас свободно 200 Гб, но нет гарантии, что через пару лет окажется достаточно. 2. Корректно обрабатывать соединением нехватку места для временного файла? Другие коннекты не виноваты, что кончилось место в Temp Directories. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.02.2022, 04:22 |
|
Остановка работы базы при нехватке места под временный файл
|
|||
---|---|---|---|
#18+
CyberMax Другие коннекты не виноваты, что кончилось место в Temp Directories. У вас база и Temp на одном диске? ... |
|||
:
Нравится:
Не нравится:
|
|||
18.02.2022, 10:12 |
|
Остановка работы базы при нехватке места под временный файл
|
|||
---|---|---|---|
#18+
ggreggory, Нет. Temp на диске C, сама база (базы) на диске D. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.02.2022, 10:23 |
|
Остановка работы базы при нехватке места под временный файл
|
|||
---|---|---|---|
#18+
CyberMax, если есть возможность, то подумай о миграции на 4.0. Там для широких сортировок есть улучшения (новый метод доступа REFETCH) ... |
|||
:
Нравится:
Не нравится:
|
|||
18.02.2022, 10:30 |
|
Остановка работы базы при нехватке места под временный файл
|
|||
---|---|---|---|
#18+
CyberMaxdatabase file appears corrupt (C:\WINDOWS\TEMP\FB_TABLE_V2FCZR) это не файл базы, и не файл сортировки. Это GTT. Структуру имеет такую же как в базе, поэтому при нехватке места, естественно, его скрючило. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.02.2022, 10:44 |
|
Остановка работы базы при нехватке места под временный файл
|
|||
---|---|---|---|
#18+
kdv CyberMaxdatabase file appears corrupt (C:\WINDOWS\TEMP\FB_TABLE_V2FCZR) это не файл базы, и не файл сортировки. Это GTT. Структуру имеет такую же как в базе, поэтому при нехватке места, естественно, его скрючило.Как бы там ни было, это ошибка. Должно было отвалиться выполнение этого стейтмента с ошибкой, возможно - нескольких одновременно, кому не хватило, но не останавливаться же всей базе. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.02.2022, 11:01 |
|
Остановка работы базы при нехватке места под временный файл
|
|||
---|---|---|---|
#18+
CyberMax Могу ли я создать тикеты на следующую тему: 1. Останавливать выполнение запроса, если размер временного файла превышает определенный размер (настраивается в firebird.conf)? Сейчас свободно 200 Гб, но нет гарантии, что через пару лет окажется достаточно. 2. Корректно обрабатывать соединением нехватку места для временного файла? Другие коннекты не виноваты, что кончилось место в Temp Directories. Другой вопрос - какая судьба их ждёт :) 1. Можно обсудить, но есть сомнения, что это поможет и не будут "наказаны" невиновные 2. Без воспроизводимого примера такой тикет имеет мало шансов на исправление. С примером - обещаю заняться им сразу как воспроизведу проблему. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.02.2022, 22:31 |
|
Остановка работы базы при нехватке места под временный файл
|
|||
---|---|---|---|
#18+
hvlad 1. Можно обсудить, но есть сомнения, что это поможет и не будут "наказаны" невиновные Тогда моя точка зрения на этот вопрос. При выполнении запроса FB создает структуры под сортировку, группировку и т.д. (это неважно). Когда размер структуры достигает определенного размера (настраивается в firebird.conf), он из памяти перемещается во временный файл. Если размер файла относительно невелик (под этим размером можно подразумевать в принципе любой размер в гигабайтах), то все ОК. Если же размер этого временного файла становится достаточно большим (на усмотрение администратора, например, 100 Гб), это означает, что что-то пошло не так (программист ошибся в запросе или не учел предполагаемый размер выборки). Это первое. Второе. Как известно, место, выделяемое администраторами серверов под временные файлы, ограничено. Если Temp directory находится на системном диске (это не запрещено), то несмотря на наличие 500 Гб свободного места, хотелось бы, чтобы из них FB было максимум взято не более 450 Гб (нужно место для самой ОС). Сейчас способа указать указать максимальный размер файлов под временные нужды нет и FB забирает все пространство, какое есть, нарушая работу ОС или иных сервисов, которые тоже работают с этим диском. Итого: 1. Необходима настройка ограничения по максимальному объему дискового пространства под временные файлы. Это защитит другие сервисы, использующие этот же диск, от внезапного исчезновения свободного места и от специального/случайного выполнения запроса, выбирающего все свободное место на диске. 2. Необходима настройка ограничения по максимальному размеру временных файлов в рамках соединения. Я уверен, что у нас выборки, которые требуют 50 Гб файла под сортировку - это что-то из ряда вон выходящее, и с такими запросами надо разбираться. Это защитит от опустошения дискового пространства под временные файлы одним соединением, ломая работу других соединений (у них не остается свободного места под свои небольшие сортировки). Добавлю, что когда размер БД был в районе пары десятков гигабайт, этого не требовалось. Но когда размер БД подходит к сотне Гб, а значит, растут и размеры некоторых выборок, такое ограничение просто необходимо. hvlad С примером - обещаю заняться им сразу как воспроизведу проблему. Будет сделано. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.02.2022, 08:42 |
|
Остановка работы базы при нехватке места под временный файл
|
|||
---|---|---|---|
#18+
CyberMaxДобавлю, что когда размер БД был в районе пары десятков гигабайт, этого не требовалось. Но когда размер БД подходит к сотне Гб, а значит, растут и размеры некоторых выборок, такое ограничение просто необходимо. Размер временного файла для сортировки не связан напрямую с размером БД. Он зависит от ширины набора данных для сортировки и количества записей. Кривым запросом можно и на employee.fdb создать временный файл под сортировку в 100Гб. Ещё раз отмечу, что в 4.0 для широких сортировок используется другой алгоритм сортировки, который позволяет избежать содания гигантских временных файлов CyberMaxНеобходима настройка ограничения по максимальному объему дискового пространства под временные файлы. Это защитит другие сервисы, использующие этот же диск, от внезапного исчезновения свободного места и от специального/случайного выполнения запроса, выбирающего все свободное место на диске. сильно сомневаюсь что проверка такого ограничения может быть эффективно реализована в архитектуре классик. Ограничение в рамках коннекта наверное возможно, но там надо смотреть насколько это дорого будет ... |
|||
:
Нравится:
Не нравится:
|
|||
21.02.2022, 09:33 |
|
Остановка работы базы при нехватке места под временный файл
|
|||
---|---|---|---|
#18+
Симонов Денис Размер временного файла для сортировки не связан напрямую с размером БД. Он зависит от ширины набора данных для сортировки и количества записей. Кривым запросом можно и на employee.fdb создать временный файл под сортировку в 100Гб. Да, напрямую не связан. Да, можно и с табличкой в 100 записей создать файл сортировки на 100 Гб. Симонов Денис Ещё раз отмечу, что в 4.0 для широких сортировок используется другой алгоритм сортировки, который позволяет избежать содания гигантских временных файлов Еще раз напишу - речь идет не об алгоритмах сортировки, а об устранении потенциальных уязвимостей. На сервере может быть свободно 5 Гб под файлы сортировки. И FB все это съест и еще попросит. С непредсказуемым эффектом. Симонов Денис сильно сомневаюсь что проверка такого ограничения может быть эффективно реализована в архитектуре классик. Ограничение в рамках коннекта наверное возможно, но там надо смотреть насколько это дорого будет Могу предположить, что очень дешево - проверка требуется только при увеличении размера временного файла. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.02.2022, 09:43 |
|
Остановка работы базы при нехватке места под временный файл
|
|||
---|---|---|---|
#18+
CyberMax Могу предположить, что очень дешево - проверка требуется только при увеличении размера временного файла. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.02.2022, 09:51 |
|
Остановка работы базы при нехватке места под временный файл
|
|||
---|---|---|---|
#18+
Basil A. Sidorov, Каких сотен, ты о чем? ... |
|||
:
Нравится:
Не нравится:
|
|||
21.02.2022, 09:53 |
|
Остановка работы базы при нехватке места под временный файл
|
|||
---|---|---|---|
#18+
Если говорить о винде, то кроме FIREBIRD_TMP на системном диске находится ещё и FIREBIRD_LOCK (%ProgramData%\firebird) Если говорить о линуксах, то, по умолчанию, "они оба" находятся в /tmp. Если одна или несколько сортировок полностью заняли TempCacheLimit, то все одновременные сортировки (даже небольшие) могут оказаться на диске. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.02.2022, 09:58 |
|
Остановка работы базы при нехватке места под временный файл
|
|||
---|---|---|---|
#18+
Basil A. Sidorov, в рамках одного коннекта сотен не будет. А вот если общий размер контролировать, то тут уже очень сомнительно. Пока размеры всех файлов соберёшь, они уже станут неактуальными ... |
|||
:
Нравится:
Не нравится:
|
|||
21.02.2022, 10:00 |
|
Остановка работы базы при нехватке места под временный файл
|
|||
---|---|---|---|
#18+
ОбоШтоИразговор. Процесс(ы) firebird могут создавать пачки временных файлов. Более того, если я правильно понимаю, исходная проблема вообще возникла не для сортировки (fb_sort), а для GTT (fb_table) и поврежденным оказался именно (конкретный) экземпляр GTT. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.02.2022, 10:06 |
|
Остановка работы базы при нехватке места под временный файл
|
|||
---|---|---|---|
#18+
У меня вопрос не совсем по теме. Почему FB создает временный файл в C:\WINDOWS\TEMP\FB_TABLE_6JN3N6, если у меня Temp Directory - c:\Temp? А файл сортировки создается в c:\Temp. Код: plaintext 1. 2. 3. 4.
... |
|||
:
Нравится:
Не нравится:
|
|||
21.02.2022, 10:37 |
|
Остановка работы базы при нехватке места под временный файл
|
|||
---|---|---|---|
#18+
И разные сообщения при нехватке места для GTT и сортировки. Нет места для GTT: Код: plaintext 1. 2. 3. 4.
Нет места под сортировку: Код: plaintext 1. 2. 3. 4.
В первом случае есть имя файла, что очень удобно - сразу понятно, где места нету. Во втором случае имя тщательно скрывается. Я думаю, вот по этому поводу точно можно создать тикет. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.02.2022, 10:43 |
|
Остановка работы базы при нехватке места под временный файл
|
|||
---|---|---|---|
#18+
hvlad, я поискал другие сообщения про порчу файлов FB_TABLE_XXX и могу сделать предположение - это происходит при сработке internal Firebird consistency check. Вот в прошлом году: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16.
Вот на прошлой неделе: Код: 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.
Сообщение "Error during savepoint backout - transaction invalidated" к данной проблеме, видимо, не относится. Я не знаю, как вызвать сработку internal Firebird consistency check, чтобы проверить теорию. Если кто подскажет способ, попробую воспроизвести. P.S. Я в курсе, что это не порча самой БД и никак на нее не влияет. Тем не менее, некорректное поведение FB налицо. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.02.2022, 10:52 |
|
Остановка работы базы при нехватке места под временный файл
|
|||
---|---|---|---|
#18+
CyberMax У меня вопрос не совсем по теме. Почему FB создает временный файл в C:\WINDOWS\TEMP\FB_TABLE_6JN3N6, если у меня Temp Directory - c:\Temp? А файл сортировки создается в c:\Temp. Код: plaintext 1. 2. 3. 4.
Вот тут 22408166 и ниже, обсуждалось что параметр TempDirectories в конфиге не задает место создания файлов fb_table_XXX. Задать это можно через параметр среды окружения fb_table. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.02.2022, 11:22 |
|
Остановка работы базы при нехватке места под временный файл
|
|||
---|---|---|---|
#18+
imho, разумно задавать лимит не на файлы сортировки или gtt, а лимит на свободное место. Т.е. скажем в настройках указать 1 Гб и если места становится меньше указанного выдавать ошибку. Думаю что это не сложно сделать для любой архитектуры сервера. Исчерпание места на системном диске может привести не только к падению firebird-а, но и к падению всей операционной системы и часто к необходимости её переустановки (натыкался на примере windows server 2012). И так же неплохо задавать лимит для диска с базой данных. Если на диске с базой меньше установленного лимита - отказывать в подключении. Сам сталкивался в нулевых еще на 1-ом firebird-е с порчей базы на переполненном диске. С тех пор при подключении вызываю UDF, которая проверяет место сразу после коннекта и при малом объеме не подключает. Но контроль за файлами сортировки с помощью UDF не реализовать. Разумно также, чтобы какие-то лимиты, хоть самые минимальные, уже были по дефолту, без настроек firebird.conf. Конфиг могли забыть настроить, перетереть при переустановке и т.д. Когда служиться п...ц можно конечно уже разобраться во всём, найти виновных, но будет уже поздно. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.02.2022, 11:38 |
|
Остановка работы базы при нехватке места под временный файл
|
|||
---|---|---|---|
#18+
ggreggory, ещё раз повторяю, проверка свободного места на диске совсем не бесплатна. Вот сколько раз в секунду придётся это делать на нагруженном серваке? ... |
|||
:
Нравится:
Не нравится:
|
|||
21.02.2022, 11:42 |
|
Остановка работы базы при нехватке места под временный файл
|
|||
---|---|---|---|
#18+
fraks параметр TempDirectories в конфиге не задает место создания файлов fb_table_XXX fraks Задать это можно через параметр среды окружения fb_table В fb4 введён новый параметр TempTableDirectory ... |
|||
:
Нравится:
Не нравится:
|
|||
21.02.2022, 11:45 |
|
Остановка работы базы при нехватке места под временный файл
|
|||
---|---|---|---|
#18+
CyberMax Я не знаю, как вызвать сработку internal Firebird consistency check, чтобы проверить теорию. Если кто подскажет способ, попробую воспроизвести. Ведь даже если я сейчас внесу исправление "вслепую" - нужен способ его подтвердить. CyberMax P.S. Я в курсе, что это не порча самой БД и никак на нее не влияет. Тем не менее, некорректное поведение FB налицо. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.02.2022, 11:50 |
|
Остановка работы базы при нехватке места под временный файл
|
|||
---|---|---|---|
#18+
Симонов Денис ggreggory, ещё раз повторяю, проверка свободного места на диске совсем не бесплатна. Вот сколько раз в секунду придётся это делать на нагруженном серваке? Всегда можно сделать трешхолд на такую проверку. Например, функция проверки хранит предыдущее состояние свободного места и GetTickCount64 его получения. И если с момента предыдущего получения прошло менее, скажем, 10 сек, возвращать предыдущее значение. За мгновение диск не заполнится, есть аппаратные ограничения скорости записи. Значения хранить в разделяемой памяти, так чтобы все процессы/потоки пользовались ими и не было зависимости от числа коннектов. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.02.2022, 11:51 |
|
|
start [/forum/topic.php?fid=40&msg=40135483&tid=1559816]: |
0ms |
get settings: |
25ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
49ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
613ms |
get tp. blocked users: |
1ms |
others: | 2735ms |
total: | 3459ms |
0 / 0 |