powered by simpleCommunicator - 2.0.29     © 2024 Programmizd 02
Map
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Остановка работы базы при нехватке места под временный файл
25 сообщений из 37, страница 1 из 2
Остановка работы базы при нехватке места под временный файл
    #40135013
Фотография CyberMax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FB 3.0.8.
Сегодня запустили один запрос, который включает много полей для группировки. Через некоторое время на диске закончилось место под файл сортировки (90 Гб), и сервер начал сыпать разными сообщениями про нехватку места, например:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
SERVER	Fri Feb 18 09:30:08 2022
	Database: XXX.FDB
	Error during savepoint backout - transaction invalidated
	Error during savepoint backout - transaction invalidated
	No free space found in temporary directories
	operating system directive WriteFile failed
	Недостаточно места на диске. 
	At procedure 'PKG$TEST.UPDATE_TEST_INFO_FOR_RECORD' line: 250, col: 9
At procedure 'PKG$TBL$REG$ABONENT$EQUIPMENT.TEST' line: 112, col: 9
At trigger 'REG$ABONENT$EQUIPMENT_TEST' line: 9, col: 9
At procedure 'OPER$EQUIPMENT$CALC_DATE_END_SL' line: 58, col: 5
At trigger 'REG$ABONENT$EQUIPMENT_AIU0' line: 16, col: 13
	internal Firebird consistency check (record disappeared (186), file: vio.cpp line: 3939)

Код: plaintext
1.
2.
3.
4.
5.
SERVER	Fri Feb 18 09:30:53 2022
	Database: XXX.FDB
	database file appears corrupt (C:\WINDOWS\TEMP\FB_TABLE_V2FCZR)
	wrong page type
	page 321 is of wrong type (expected index root, found data)

В итоге база остановилась с сообщениями про Firebird consistency check. Хотя на самом деле ничего криминального не произошло.
Добавлю, что уже писал несколько лет назад, что нехватка места под временный файл приводит к вот такому итогу.
Валидация базы после перезагрузки сервера показала, что все ОК.

Могу ли я создать тикеты на следующую тему:
1. Останавливать выполнение запроса, если размер временного файла превышает определенный размер (настраивается в firebird.conf)? Сейчас свободно 200 Гб, но нет гарантии, что через пару лет окажется достаточно.
2. Корректно обрабатывать соединением нехватку места для временного файла? Другие коннекты не виноваты, что кончилось место в Temp Directories.
...
Рейтинг: 0 / 0
Остановка работы базы при нехватке места под временный файл
    #40135066
ggreggory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
CyberMax
Другие коннекты не виноваты, что кончилось место в Temp Directories.


У вас база и Temp на одном диске?
...
Рейтинг: 0 / 0
Остановка работы базы при нехватке места под временный файл
    #40135069
Фотография CyberMax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ggreggory,

Нет. Temp на диске C, сама база (базы) на диске D.
...
Рейтинг: 0 / 0
Остановка работы базы при нехватке места под временный файл
    #40135070
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CyberMax,

если есть возможность, то подумай о миграции на 4.0. Там для широких сортировок есть улучшения (новый метод доступа REFETCH)
...
Рейтинг: 0 / 0
Остановка работы базы при нехватке места под временный файл
    #40135072
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CyberMaxdatabase file appears corrupt (C:\WINDOWS\TEMP\FB_TABLE_V2FCZR)
это не файл базы, и не файл сортировки. Это GTT. Структуру имеет такую же как в базе, поэтому при нехватке места, естественно, его скрючило.
...
Рейтинг: 0 / 0
Остановка работы базы при нехватке места под временный файл
    #40135080
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdv
CyberMaxdatabase file appears corrupt (C:\WINDOWS\TEMP\FB_TABLE_V2FCZR)

это не файл базы, и не файл сортировки. Это GTT. Структуру имеет такую же как в базе, поэтому при нехватке места, естественно, его скрючило.Как бы там ни было, это ошибка.
Должно было отвалиться выполнение этого стейтмента с ошибкой, возможно - нескольких одновременно, кому не хватило, но не останавливаться же всей базе.
...
Рейтинг: 0 / 0
Остановка работы базы при нехватке места под временный файл
    #40135318
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CyberMax
Могу ли я создать тикеты на следующую тему:
1. Останавливать выполнение запроса, если размер временного файла превышает определенный размер (настраивается в firebird.conf)? Сейчас свободно 200 Гб, но нет гарантии, что через пару лет окажется достаточно.
2. Корректно обрабатывать соединением нехватку места для временного файла? Другие коннекты не виноваты, что кончилось место в Temp Directories.
Никто не запрещает создавать любые тикеты.
Другой вопрос - какая судьба их ждёт :)
1. Можно обсудить, но есть сомнения, что это поможет и не будут "наказаны" невиновные
2. Без воспроизводимого примера такой тикет имеет мало шансов на исправление.
С примером - обещаю заняться им сразу как воспроизведу проблему.
...
Рейтинг: 0 / 0
Остановка работы базы при нехватке места под временный файл
    #40135483
Фотография CyberMax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hvlad
1. Можно обсудить, но есть сомнения, что это поможет и не будут "наказаны" невиновные

Тогда моя точка зрения на этот вопрос.
При выполнении запроса FB создает структуры под сортировку, группировку и т.д. (это неважно). Когда размер структуры достигает определенного размера (настраивается в firebird.conf), он из памяти перемещается во временный файл. Если размер файла относительно невелик (под этим размером можно подразумевать в принципе любой размер в гигабайтах), то все ОК. Если же размер этого временного файла становится достаточно большим (на усмотрение администратора, например, 100 Гб), это означает, что что-то пошло не так (программист ошибся в запросе или не учел предполагаемый размер выборки). Это первое. Второе. Как известно, место, выделяемое администраторами серверов под временные файлы, ограничено. Если Temp directory находится на системном диске (это не запрещено), то несмотря на наличие 500 Гб свободного места, хотелось бы, чтобы из них FB было максимум взято не более 450 Гб (нужно место для самой ОС). Сейчас способа указать указать максимальный размер файлов под временные нужды нет и FB забирает все пространство, какое есть, нарушая работу ОС или иных сервисов, которые тоже работают с этим диском.
Итого:
1. Необходима настройка ограничения по максимальному объему дискового пространства под временные файлы. Это защитит другие сервисы, использующие этот же диск, от внезапного исчезновения свободного места и от специального/случайного выполнения запроса, выбирающего все свободное место на диске.
2. Необходима настройка ограничения по максимальному размеру временных файлов в рамках соединения. Я уверен, что у нас выборки, которые требуют 50 Гб файла под сортировку - это что-то из ряда вон выходящее, и с такими запросами надо разбираться. Это защитит от опустошения дискового пространства под временные файлы одним соединением, ломая работу других соединений (у них не остается свободного места под свои небольшие сортировки).

Добавлю, что когда размер БД был в районе пары десятков гигабайт, этого не требовалось. Но когда размер БД подходит к сотне Гб, а значит, растут и размеры некоторых выборок, такое ограничение просто необходимо.

hvlad
С примером - обещаю заняться им сразу как воспроизведу проблему.

Будет сделано.
...
Рейтинг: 0 / 0
Остановка работы базы при нехватке места под временный файл
    #40135496
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CyberMaxДобавлю, что когда размер БД был в районе пары десятков гигабайт, этого не требовалось. Но когда размер БД подходит к сотне Гб, а значит, растут и размеры некоторых выборок, такое ограничение просто необходимо.

Размер временного файла для сортировки не связан напрямую с размером БД.

Он зависит от ширины набора данных для сортировки и количества записей. Кривым запросом можно и на employee.fdb создать временный файл под сортировку в 100Гб.

Ещё раз отмечу, что в 4.0 для широких сортировок используется другой алгоритм сортировки, который позволяет избежать содания гигантских временных файлов

CyberMaxНеобходима настройка ограничения по максимальному объему дискового пространства под временные файлы. Это защитит другие сервисы, использующие этот же диск, от внезапного исчезновения свободного места и от специального/случайного выполнения запроса, выбирающего все свободное место на диске.

сильно сомневаюсь что проверка такого ограничения может быть эффективно реализована в архитектуре классик. Ограничение в рамках коннекта наверное возможно, но там надо смотреть насколько это дорого будет
...
Рейтинг: 0 / 0
Остановка работы базы при нехватке места под временный файл
    #40135499
Фотография CyberMax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Денис
Размер временного файла для сортировки не связан напрямую с размером БД.
Он зависит от ширины набора данных для сортировки и количества записей. Кривым запросом можно и на employee.fdb создать временный файл под сортировку в 100Гб.

Да, напрямую не связан. Да, можно и с табличкой в 100 записей создать файл сортировки на 100 Гб.

Симонов Денис
Ещё раз отмечу, что в 4.0 для широких сортировок используется другой алгоритм сортировки, который позволяет избежать содания гигантских временных файлов

Еще раз напишу - речь идет не об алгоритмах сортировки, а об устранении потенциальных уязвимостей.
На сервере может быть свободно 5 Гб под файлы сортировки. И FB все это съест и еще попросит. С непредсказуемым эффектом.

Симонов Денис
сильно сомневаюсь что проверка такого ограничения может быть эффективно реализована в архитектуре классик. Ограничение в рамках коннекта наверное возможно, но там надо смотреть насколько это дорого будет

Могу предположить, что очень дешево - проверка требуется только при увеличении размера временного файла.
...
Рейтинг: 0 / 0
Остановка работы базы при нехватке места под временный файл
    #40135503
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CyberMax
Могу предположить, что очень дешево - проверка требуется только при увеличении размера временного файла.
Какого из сотен возможных?
...
Рейтинг: 0 / 0
Остановка работы базы при нехватке места под временный файл
    #40135504
Фотография CyberMax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Basil A. Sidorov,

Каких сотен, ты о чем?
...
Рейтинг: 0 / 0
Остановка работы базы при нехватке места под временный файл
    #40135508
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если говорить о винде, то кроме FIREBIRD_TMP на системном диске находится ещё и FIREBIRD_LOCK (%ProgramData%\firebird)
Если говорить о линуксах, то, по умолчанию, "они оба" находятся в /tmp.
Если одна или несколько сортировок полностью заняли TempCacheLimit, то все одновременные сортировки (даже небольшие) могут оказаться на диске.
...
Рейтинг: 0 / 0
Остановка работы базы при нехватке места под временный файл
    #40135511
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Basil A. Sidorov,

в рамках одного коннекта сотен не будет. А вот если общий размер контролировать, то тут уже очень сомнительно. Пока размеры всех файлов соберёшь, они уже станут неактуальными
...
Рейтинг: 0 / 0
Остановка работы базы при нехватке места под временный файл
    #40135515
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ОбоШтоИразговор.
Процесс(ы) firebird могут создавать пачки временных файлов.
Более того, если я правильно понимаю, исходная проблема вообще возникла не для сортировки (fb_sort), а для GTT (fb_table) и поврежденным оказался именно (конкретный) экземпляр GTT.
...
Рейтинг: 0 / 0
Остановка работы базы при нехватке места под временный файл
    #40135528
Фотография CyberMax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У меня вопрос не совсем по теме.
Почему FB создает временный файл в C:\WINDOWS\TEMP\FB_TABLE_6JN3N6, если у меня Temp Directory - c:\Temp? А файл сортировки создается в c:\Temp.

Код: plaintext
1.
2.
3.
4.
Unsuccessful execution caused by a system error that precludes successful execution of subsequent statements.
I/O error during "WriteFile" operation for file "C:\WINDOWS\TEMP\FB_TABLE_6JN3N6".
Error while trying to write to file.
Недостаточно места на диске. .
...
Рейтинг: 0 / 0
Остановка работы базы при нехватке места под временный файл
    #40135531
Фотография CyberMax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И разные сообщения при нехватке места для GTT и сортировки.
Нет места для GTT:
Код: plaintext
1.
2.
3.
4.
Unsuccessful execution caused by a system error that precludes successful execution of subsequent statements.
I/O error during "WriteFile" operation for file "C:\WINDOWS\TEMP\FB_TABLE_6JN3N6".
Error while trying to write to file.
Недостаточно места на диске. .

Нет места под сортировку:
Код: plaintext
1.
2.
3.
4.
Unsuccessful execution caused by system error that does not preclude successful execution of subsequent statements.
sort error.
No free space found in temporary directories.
operating system directive WriteFile failed.
Недостаточно места на диске. .

В первом случае есть имя файла, что очень удобно - сразу понятно, где места нету. Во втором случае имя тщательно скрывается. Я думаю, вот по этому поводу точно можно создать тикет.
...
Рейтинг: 0 / 0
Остановка работы базы при нехватке места под временный файл
    #40135537
Фотография CyberMax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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.
SERVER	Fri Jul 09 08:31:37 2021
	Database: XXX.FDB
	internal Firebird consistency check (partner index description not found (175), file: idx.cpp line: 1310)


SERVER	Fri Jul 09 08:31:43 2021
	I/O error during "ReadFile" operation for file "C:\WINDOWS\TEMP\FB_TABLE_2KQ6BW"
	Error while trying to read from file
	Неверный дескриптор. 


SERVER	Fri Jul 09 08:31:43 2021
	Database: XXX.FDB
	database file appears corrupt (C:\WINDOWS\TEMP\FB_TABLE_2KQ6BW)
	wrong page type
	page 206 is of wrong type (expected index root, found data)


Вот на прошлой неделе:
Код: 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.
SERVER	Fri Feb 18 09:30:08 2022
	Database: XXX.FDB
	Error during savepoint backout - transaction invalidated
	Error during savepoint backout - transaction invalidated
	No free space found in temporary directories
	operating system directive WriteFile failed
	Недостаточно места на диске. 
	At procedure 'PKG$TEST.UPDATE_TEST_INFO_FOR_RECORD' line: 250, col: 9
At procedure 'PKG$TBL$REG$ABONENT$EQUIPMENT.TEST' line: 112, col: 9
At trigger 'REG$ABONENT$EQUIPMENT_TEST' line: 9, col: 9
At procedure 'OPER$EQUIPMENT$CALC_DATE_END_SL' line: 58, col: 5
At trigger 'REG$ABONENT$EQUIPMENT_AIU0' line: 16, col: 13
	internal Firebird consistency check (record disappeared (186), file: vio.cpp line: 3939)


SERVER	Fri Feb 18 09:30:53 2022
	I/O error during "ReadFile" operation for file "C:\WINDOWS\TEMP\FB_TABLE_V2FCZR"
	Error while trying to read from file
	Неверный дескриптор. 


SERVER	Fri Feb 18 09:30:53 2022
	Database: XXX.FDB
	database file appears corrupt (C:\WINDOWS\TEMP\FB_TABLE_V2FCZR)
	wrong page type
	page 321 is of wrong type (expected index root, found data)

Сообщение "Error during savepoint backout - transaction invalidated" к данной проблеме, видимо, не относится.

Я не знаю, как вызвать сработку internal Firebird consistency check, чтобы проверить теорию. Если кто подскажет способ, попробую воспроизвести.
P.S. Я в курсе, что это не порча самой БД и никак на нее не влияет. Тем не менее, некорректное поведение FB налицо.
...
Рейтинг: 0 / 0
Остановка работы базы при нехватке места под временный файл
    #40135551
fraks
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CyberMax
У меня вопрос не совсем по теме.
Почему FB создает временный файл в C:\WINDOWS\TEMP\FB_TABLE_6JN3N6, если у меня Temp Directory - c:\Temp? А файл сортировки создается в c:\Temp.

Код: plaintext
1.
2.
3.
4.
Unsuccessful execution caused by a system error that precludes successful execution of subsequent statements.
I/O error during "WriteFile" operation for file "C:\WINDOWS\TEMP\FB_TABLE_6JN3N6".
Error while trying to write to file.
Недостаточно места на диске. .


Вот тут 22408166 и ниже, обсуждалось что параметр TempDirectories в конфиге не задает место создания файлов fb_table_XXX.
Задать это можно через параметр среды окружения fb_table.
...
Рейтинг: 0 / 0
Остановка работы базы при нехватке места под временный файл
    #40135564
ggreggory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
imho, разумно задавать лимит не на файлы сортировки или gtt, а лимит на свободное место. Т.е. скажем в настройках указать 1 Гб и если места становится меньше указанного выдавать ошибку. Думаю что это не сложно сделать для любой архитектуры сервера. Исчерпание места на системном диске может привести не только к падению firebird-а, но и к падению всей операционной системы и часто к необходимости её переустановки (натыкался на примере windows server 2012).

И так же неплохо задавать лимит для диска с базой данных. Если на диске с базой меньше установленного лимита - отказывать в подключении. Сам сталкивался в нулевых еще на 1-ом firebird-е с порчей базы на переполненном диске. С тех пор при подключении вызываю UDF, которая проверяет место сразу после коннекта и при малом объеме не подключает. Но контроль за файлами сортировки с помощью UDF не реализовать.

Разумно также, чтобы какие-то лимиты, хоть самые минимальные, уже были по дефолту, без настроек firebird.conf. Конфиг могли забыть настроить, перетереть при переустановке и т.д. Когда служиться п...ц можно конечно уже разобраться во всём, найти виновных, но будет уже поздно.
...
Рейтинг: 0 / 0
Остановка работы базы при нехватке места под временный файл
    #40135567
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ggreggory,

ещё раз повторяю, проверка свободного места на диске совсем не бесплатна. Вот сколько раз в секунду придётся это делать на нагруженном серваке?
...
Рейтинг: 0 / 0
Остановка работы базы при нехватке места под временный файл
    #40135569
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fraks
параметр TempDirectories в конфиге не задает место создания файлов fb_table_XXX
Да, так и есть.

fraks
Задать это можно через параметр среды окружения fb_table
Нет такого и никогда не было

В fb4 введён новый параметр TempTableDirectory
...
Рейтинг: 0 / 0
Остановка работы базы при нехватке места под временный файл
    #40135573
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CyberMax
Я не знаю, как вызвать сработку internal Firebird consistency check, чтобы проверить теорию. Если кто подскажет способ, попробую воспроизвести.
Достаточно создать простой пример который переполнит (заранее созданный небольшой) раздел для GTT и приведёт к bugchek'у или wrong page type.
Ведь даже если я сейчас внесу исправление "вслепую" - нужен способ его подтвердить.

CyberMax
P.S. Я в курсе, что это не порча самой БД и никак на нее не влияет. Тем не менее, некорректное поведение FB налицо.
С этим ведь никто не спорит.
...
Рейтинг: 0 / 0
Остановка работы базы при нехватке места под временный файл
    #40135574
ggreggory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Симонов Денис
ggreggory,

ещё раз повторяю, проверка свободного места на диске совсем не бесплатна. Вот сколько раз в секунду придётся это делать на нагруженном серваке?


Всегда можно сделать трешхолд на такую проверку. Например, функция проверки хранит предыдущее состояние свободного места и GetTickCount64 его получения. И если с момента предыдущего получения прошло менее, скажем, 10 сек, возвращать предыдущее значение. За мгновение диск не заполнится, есть аппаратные ограничения скорости записи. Значения хранить в разделяемой памяти, так чтобы все процессы/потоки пользовались ими и не было зависимости от числа коннектов.
...
Рейтинг: 0 / 0
Остановка работы базы при нехватке места под временный файл
    #40135576
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ggreggory,

в конкурентной среде любые проверки существования\достаточности ресурса до совершения действия потребляющего этот ресурс - не имеют большого смысла.
Это азбука.
...
Рейтинг: 0 / 0
25 сообщений из 37, страница 1 из 2
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Остановка работы базы при нехватке места под временный файл
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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