powered by simpleCommunicator - 2.0.52     © 2025 Programmizd 02
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Что происходит с мусором во времнных таблицах (ON COMMIT DELETE ROWS)?
11 сообщений из 11, страница 1 из 1
Что происходит с мусором во времнных таблицах (ON COMMIT DELETE ROWS)?
    #39460054
oleg_m
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем привет.
FB2.5.6.27020 Classic
Обнаружил интересный эффект с замедлением работы.

Есть процедура, проводящая вычисления во временной таблице.
Вызываю ее в цикле, и для пущей убедительности перед каждым вызовом делаю
Код: sql
1.
DELETE FROM TTMP;


Но с удивлением заметил, что время выполнения этой конструкции нелинейно зависит от количества вызовов вложенной процедуры.
Конечно подумал на мусор... но где он во временной таблице? В том же временном файле?
И как его собрать внутри этой же транзакции?

Код: sql
1.
SELECT COUNT(*) FROM TTMP;


Никакого эффекта не дает.

Да и зачем вообще мусор, ведь других заинтересованных транзакций не может быть по определению...

P.S. CORE-5552. (Не стреляйте в пианиста, он играет как умеет.)
...
Рейтинг: 0 / 0
Что происходит с мусором во времнных таблицах (ON COMMIT DELETE ROWS)?
    #39460184
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
oleg_m,

по-моему, я это уже когда-то объяснял, может даже и здесь.

Данные, введённые в рамках одной тр-ции могут оказаться мусором до завершения этой тр-ции только в одном случае -
когда соотв. оператор\блок операторов вызвал ошибку и был откачен соотв. внутренний сейвпойнт.
Ладно, есть второй случай - явный откат пользовательского сейвпойнта :)
Если тебе это подходит - используй.

В любом случае вызывает сомнение сам подход, когда данные многократно вставляются и удаляются из GTT.
Если этого не избежать, можно попробовать добавить индексированное поле с номером экземпляра данных.
Инкрементировать его один раз после DELETE. Даже лучше - вместо DELETE. И добавить в SELECT'ы.

Это про сейчас.

Про будущее - в принципе, можно попробовать физически чистить GTT ON COMMIT DELETE после выполнения
DELETE без WHERE, но такая очистка возможна только когда уже нет активных сейвпойнтов.
На практике это означает, что очистка будет выполена после завершения процедуры верхнего уровня.
Т.е. вряд ли спасёт тебя в данном случае.
Другой вариант - когда будет сделан TRUNCATE, можно подумать о спец обработке GTT в нём. Но это пока что на уровне - только подумать.
...
Рейтинг: 0 / 0
Что происходит с мусором во времнных таблицах (ON COMMIT DELETE ROWS)?
    #39460189
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hvladПро будущее - в принципе, можно попробовать физически чистить GTT ON COMMIT DELETE после выполнения
DELETE без WHERE, но такая очистка возможна только когда уже нет активных сейвпойнтов.Уточню - когда удаляется тот сейвпойнт, под которым была создана первая запись в GTT.
Это кажется неплохим компромиссом...
...
Рейтинг: 0 / 0
Что происходит с мусором во времнных таблицах (ON COMMIT DELETE ROWS)?
    #39460232
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hvlad,

тут помог-бы truncate, но его до сих пор нет.
http://docwiki.embarcadero.com/InterBase/2017/en/Truncate_Table
...
Рейтинг: 0 / 0
Что происходит с мусором во времнных таблицах (ON COMMIT DELETE ROWS)?
    #39460245
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdvhvlad,

тут помог-бы truncate, но его до сих пор нет.
http://docwiki.embarcadero.com/InterBase/2017/en/Truncate_Table А ты это читал ? Внимательно ? :)
Requirements and Constraints
...
It is not possible to truncate system tables, temporary tables , and views.
...
Рейтинг: 0 / 0
Что происходит с мусором во времнных таблицах (ON COMMIT DELETE ROWS)?
    #39460263
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hvlad,

спасибо, про это не заметил.
Но нам-то ИБ не указ, верно? :-)
...
Рейтинг: 0 / 0
Что происходит с мусором во времнных таблицах (ON COMMIT DELETE ROWS)?
    #39460279
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdvтут помог-бы truncate
Не помог бы. Это DDL, он в процедурах запрещён.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Что происходит с мусором во времнных таблицах (ON COMMIT DELETE ROWS)?
    #39460282
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdvНо нам-то ИБ не указ, верно? :-)Однозначно.
Но почему бы не перенять хорошие вещи ?
Правда, их практически нет... но они и не публикуют детали, так штааа...
...
Рейтинг: 0 / 0
Что происходит с мусором во времнных таблицах (ON COMMIT DELETE ROWS)?
    #39460326
oleg_m
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владу спасибо за советы и комментарии (и не только здесь).
Попробую применить на реальной задаче.
...
Рейтинг: 0 / 0
Что происходит с мусором во времнных таблицах (ON COMMIT DELETE ROWS)?
    #39460756
Фотография CyberMax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
oleg_m,

Низкая производительность работы INSERT+DELETE

Воркэраунд до сих пор все тот же - каждый расчет по возможности в отдельной транзакции.
...
Рейтинг: 0 / 0
Что происходит с мусором во времнных таблицах (ON COMMIT DELETE ROWS)?
    #39460965
oleg_m
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CyberMax, спасибо конечно. Но верилось в лучшее: что временные таблицы вообще "сферические в вакууме". В отличие от.
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Что происходит с мусором во времнных таблицах (ON COMMIT DELETE ROWS)?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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