Гость
Map
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Остановка работы базы при нехватке места под временный файл / 25 сообщений из 37, страница 1 из 2
18.02.2022, 04:22
    #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
18.02.2022, 10:12
    #40135066
ggreggory
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Остановка работы базы при нехватке места под временный файл
CyberMax
Другие коннекты не виноваты, что кончилось место в Temp Directories.


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

в рамках одного коннекта сотен не будет. А вот если общий размер контролировать, то тут уже очень сомнительно. Пока размеры всех файлов соберёшь, они уже станут неактуальными
...
Рейтинг: 0 / 0
21.02.2022, 10:06
    #40135515
Basil A. Sidorov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Остановка работы базы при нехватке места под временный файл
ОбоШтоИразговор.
Процесс(ы) firebird могут создавать пачки временных файлов.
Более того, если я правильно понимаю, исходная проблема вообще возникла не для сортировки (fb_sort), а для GTT (fb_table) и поврежденным оказался именно (конкретный) экземпляр GTT.
...
Рейтинг: 0 / 0
21.02.2022, 10:37
    #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
21.02.2022, 10:43
    #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
21.02.2022, 10:52
    #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
21.02.2022, 11:22
    #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
21.02.2022, 11:38
    #40135564
ggreggory
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Остановка работы базы при нехватке места под временный файл
imho, разумно задавать лимит не на файлы сортировки или gtt, а лимит на свободное место. Т.е. скажем в настройках указать 1 Гб и если места становится меньше указанного выдавать ошибку. Думаю что это не сложно сделать для любой архитектуры сервера. Исчерпание места на системном диске может привести не только к падению firebird-а, но и к падению всей операционной системы и часто к необходимости её переустановки (натыкался на примере windows server 2012).

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

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

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

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

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

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

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


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

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


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