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

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


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

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


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

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

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

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

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

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

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

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

тут помог-бы truncate, но его до сих пор нет.
http://docwiki.embarcadero.com/InterBase/2017/en/Truncate_Table
...
Рейтинг: 0 / 0
26.05.2017, 10:55
    #39460245
hvlad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Что происходит с мусором во времнных таблицах (ON COMMIT DELETE ROWS)?
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
26.05.2017, 11:16
    #39460263
kdv
kdv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Что происходит с мусором во времнных таблицах (ON COMMIT DELETE ROWS)?
hvlad,

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

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

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


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