|
Огромное потребление памяти в FB 2.5
|
|||
---|---|---|---|
#18+
FB 2.5.7. Предыстория. С недавних пор у процесса сервера начала заканчиваться память с вот такими сообщениями: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14.
Сегодня поразбирался с этим триггером. Выяснилось, что на тестовой базе апдейт таблицы BAT$RECEIPT$RECEIPT увеличивает потребление памяти процессом сервера со 110 МБ до 1400 МБ и выше (дальше заканчиваются записи для обновления) при выполнении простого запроса: Код: sql 1. 2. 3.
Методом комментирования нашли строку, при удалении которой сервер перестает потреблять память: Код: sql 1. 2.
Поле "SERVICES_HINT" объявлено следующим образом: Код: sql 1.
Код: sql 1. 2. 3. 4. 5. 6. 7. 8.
Предполагаю, что FB не освобождает память, если в вычисляемом поле в триггере Before Update используется ХП. В триггере After Update точно такая же проверка, но потребление памяти не увеличивается. Если описания недостаточно, могу подготовить базу для воспроизведения. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.10.2017, 05:07 |
|
Огромное потребление памяти в FB 2.5
|
|||
---|---|---|---|
#18+
сегодня попробую воспроизвести. Если нужна будет база - отпишусь. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.10.2017, 07:08 |
|
Огромное потребление памяти в FB 2.5
|
|||
---|---|---|---|
#18+
таки нужен воспроизводимый пример. Такое ощущение, что проблема во внутренностях процедуры. Ибо если она пустая (возвращает константу + саспенд), то я не вижу утечки. Может там в ней временные блобы создаются? ... |
|||
:
Нравится:
Не нравится:
|
|||
26.10.2017, 10:54 |
|
Огромное потребление памяти в FB 2.5
|
|||
---|---|---|---|
#18+
dimitr, Да, вы правы. Не догадался сразу посмотреть. Используется SELECT с LIST(). То есть проблема с временными блобами, которая снова была озвучена здесь недавно. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.10.2017, 11:40 |
|
Огромное потребление памяти в FB 2.5
|
|||
---|---|---|---|
#18+
CyberMaxerror during savepoint backout (290) предположу дохрена памяти в undo log. Типа, запрос обновляет 1 млн записей, триггер обновляет еще 10-100, в итоге 10-100млн обновлений, и т.д. CyberMax SERVICES_HINT COMPUTED BY ((SELECT RESULT FROM HINT$RECEIPT$SERVICES(BAT$RECEIPT$RECEIPT.ID))), это, конечно, просто прекрасный код. Великолепный! Пиши так дальше, везде и чаще. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.10.2017, 11:43 |
|
Огромное потребление памяти в FB 2.5
|
|||
---|---|---|---|
#18+
kdv, ну вычисляемое поле с SELECT из ХП это ещё полбеды, а вот сравнивать вычисляемые поля в триггере уж точно изврат какой-то. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.10.2017, 11:47 |
|
Огромное потребление памяти в FB 2.5
|
|||
---|---|---|---|
#18+
Симонов Дениса вот сравнивать вычисляемые поля в триггере уж точно изврат какой-то. Это не я писал :). ... |
|||
:
Нравится:
Не нравится:
|
|||
26.10.2017, 11:54 |
|
Огромное потребление памяти в FB 2.5
|
|||
---|---|---|---|
#18+
kdvэто, конечно, просто прекрасный код. Великолепный! Пиши так дальше, везде и чаще. Мне так удобно. Никаких проблем с кодом не вижу. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.10.2017, 11:56 |
|
Огромное потребление памяти в FB 2.5
|
|||
---|---|---|---|
#18+
CyberMaxМне так удобно. Никаких проблем с кодом не вижу. проблема - это запрос в вычисляемом поле. Еще хуже - вызов процедуры в вычисляемом поле. Так можно, но это говнокод, по определению. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.10.2017, 11:59 |
|
Огромное потребление памяти в FB 2.5
|
|||
---|---|---|---|
#18+
CyberMax, ну для меня странно собирать огромные BLOB а потом сравнивать их между собой. Это же гигантский оверхед ... |
|||
:
Нравится:
Не нравится:
|
|||
26.10.2017, 12:00 |
|
Огромное потребление памяти в FB 2.5
|
|||
---|---|---|---|
#18+
kdv, Чем отличается запрос в вычисляемом поле от подзапроса прямо в SELECT, без вычисляемого поля? Ответ: ничем. Или вы против подзапросов в запросе? ... |
|||
:
Нравится:
Не нравится:
|
|||
26.10.2017, 12:02 |
|
Огромное потребление памяти в FB 2.5
|
|||
---|---|---|---|
#18+
а ТС часом не проходил стажировку в Индии? Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
26.10.2017, 12:04 |
|
Огромное потребление памяти в FB 2.5
|
|||
---|---|---|---|
#18+
Симонов Денисну для меня странно собирать огромные BLOB а потом сравнивать их между собой. Это же гигантский оверхед Нет никакого сбора BLOB'ов. Сравниваются два VARCHAR'а. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.10.2017, 12:08 |
|
Огромное потребление памяти в FB 2.5
|
|||
---|---|---|---|
#18+
CyberMax, с точки зрения оптимизации ничем. Пока вычисляемое поле не используется в запросе оно не вычисляется. Другое дело, что код становится менее прозрачным. Что касается сравнения вычисляемых полей OLD.* и NEW.* в триггерах, то у меня вообще сомнения что это работоспособно. Код: sql 1.
в каких случаях это выражение ложно? 1. Изменили ID 2. Каким-то непонятным образом при одном и том же ID процедура HINT$RECEIPT$SERVICES даёт разные значения. Ну это в принципе возможно. Например HINT$RECEIPT$SERVICES делает свои вычисления на основе самой таблицы BAT$RECEIPT$RECEIPT или других таблиц которые меняются в триггерах. Это дико запутывает код. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.10.2017, 12:14 |
|
Огромное потребление памяти в FB 2.5
|
|||
---|---|---|---|
#18+
CyberMaxЧем отличается запрос в вычисляемом поле от подзапроса прямо в SELECT, без вычисляемого поля? Ответ: ничем. Или вы против подзапросов в запросе? запрос в вычисляемом поле - это говнокод, сообщаю по опыту обследования разных систем на тему производительности. Да, поначалу это прикольно, потому что работает "типа само", а когда база становится сложнее - происходит вот такая фигня, что "где-то тормозит", а потом выясняется, что где-то на третьем уровне вложенности вот это самое вычисляемое поле с запросом или процедурой, в которой еще запросы, которые .... и т.д. Или, запрос без столбца А быстро работает, а запрос со столбцом А - медленно. Смотрим в столбец А, а там выборка из процедуры, которая выбирает из ... и опять же "и так далее". ... |
|||
:
Нравится:
Не нравится:
|
|||
26.10.2017, 12:16 |
|
|
start [/forum/topic.php?fid=40&fpage=40&tid=1561365]: |
0ms |
get settings: |
11ms |
get forum list: |
14ms |
check forum access: |
5ms |
check topic access: |
5ms |
track hit: |
45ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
68ms |
get tp. blocked users: |
2ms |
others: | 311ms |
total: | 476ms |
0 / 0 |