|
Что происходит с мусором во времнных таблицах (ON COMMIT DELETE ROWS)?
|
|||
---|---|---|---|
#18+
Всем привет. FB2.5.6.27020 Classic Обнаружил интересный эффект с замедлением работы. Есть процедура, проводящая вычисления во временной таблице. Вызываю ее в цикле, и для пущей убедительности перед каждым вызовом делаю Код: sql 1.
Но с удивлением заметил, что время выполнения этой конструкции нелинейно зависит от количества вызовов вложенной процедуры. Конечно подумал на мусор... но где он во временной таблице? В том же временном файле? И как его собрать внутри этой же транзакции? Код: sql 1.
Никакого эффекта не дает. Да и зачем вообще мусор, ведь других заинтересованных транзакций не может быть по определению... P.S. CORE-5552. (Не стреляйте в пианиста, он играет как умеет.) ... |
|||
:
Нравится:
Не нравится:
|
|||
26.05.2017, 01:18 |
|
Что происходит с мусором во времнных таблицах (ON COMMIT DELETE ROWS)?
|
|||
---|---|---|---|
#18+
oleg_m, по-моему, я это уже когда-то объяснял, может даже и здесь. Данные, введённые в рамках одной тр-ции могут оказаться мусором до завершения этой тр-ции только в одном случае - когда соотв. оператор\блок операторов вызвал ошибку и был откачен соотв. внутренний сейвпойнт. Ладно, есть второй случай - явный откат пользовательского сейвпойнта :) Если тебе это подходит - используй. В любом случае вызывает сомнение сам подход, когда данные многократно вставляются и удаляются из GTT. Если этого не избежать, можно попробовать добавить индексированное поле с номером экземпляра данных. Инкрементировать его один раз после DELETE. Даже лучше - вместо DELETE. И добавить в SELECT'ы. Это про сейчас. Про будущее - в принципе, можно попробовать физически чистить GTT ON COMMIT DELETE после выполнения DELETE без WHERE, но такая очистка возможна только когда уже нет активных сейвпойнтов. На практике это означает, что очистка будет выполена после завершения процедуры верхнего уровня. Т.е. вряд ли спасёт тебя в данном случае. Другой вариант - когда будет сделан TRUNCATE, можно подумать о спец обработке GTT в нём. Но это пока что на уровне - только подумать. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.05.2017, 10:04 |
|
Что происходит с мусором во времнных таблицах (ON COMMIT DELETE ROWS)?
|
|||
---|---|---|---|
#18+
hvladПро будущее - в принципе, можно попробовать физически чистить GTT ON COMMIT DELETE после выполнения DELETE без WHERE, но такая очистка возможна только когда уже нет активных сейвпойнтов.Уточню - когда удаляется тот сейвпойнт, под которым была создана первая запись в GTT. Это кажется неплохим компромиссом... ... |
|||
:
Нравится:
Не нравится:
|
|||
26.05.2017, 10:06 |
|
Что происходит с мусором во времнных таблицах (ON COMMIT DELETE ROWS)?
|
|||
---|---|---|---|
#18+
hvlad, тут помог-бы truncate, но его до сих пор нет. http://docwiki.embarcadero.com/InterBase/2017/en/Truncate_Table ... |
|||
:
Нравится:
Не нравится:
|
|||
26.05.2017, 10:40 |
|
Что происходит с мусором во времнных таблицах (ON COMMIT DELETE ROWS)?
|
|||
---|---|---|---|
#18+
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. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.05.2017, 10:55 |
|
Что происходит с мусором во времнных таблицах (ON COMMIT DELETE ROWS)?
|
|||
---|---|---|---|
#18+
hvlad, спасибо, про это не заметил. Но нам-то ИБ не указ, верно? :-) ... |
|||
:
Нравится:
Не нравится:
|
|||
26.05.2017, 11:16 |
|
Что происходит с мусором во времнных таблицах (ON COMMIT DELETE ROWS)?
|
|||
---|---|---|---|
#18+
kdvтут помог-бы truncate Не помог бы. Это DDL, он в процедурах запрещён. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
26.05.2017, 11:38 |
|
Что происходит с мусором во времнных таблицах (ON COMMIT DELETE ROWS)?
|
|||
---|---|---|---|
#18+
kdvНо нам-то ИБ не указ, верно? :-)Однозначно. Но почему бы не перенять хорошие вещи ? Правда, их практически нет... но они и не публикуют детали, так штааа... ... |
|||
:
Нравится:
Не нравится:
|
|||
26.05.2017, 11:41 |
|
Что происходит с мусором во времнных таблицах (ON COMMIT DELETE ROWS)?
|
|||
---|---|---|---|
#18+
Владу спасибо за советы и комментарии (и не только здесь). Попробую применить на реальной задаче. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.05.2017, 12:25 |
|
Что происходит с мусором во времнных таблицах (ON COMMIT DELETE ROWS)?
|
|||
---|---|---|---|
#18+
oleg_m, Низкая производительность работы INSERT+DELETE Воркэраунд до сих пор все тот же - каждый расчет по возможности в отдельной транзакции. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.05.2017, 08:04 |
|
|
start [/forum/topic.php?fid=40&tid=1561566]: |
0ms |
get settings: |
7ms |
get forum list: |
12ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
513ms |
get topic data: |
12ms |
get forum data: |
2ms |
get page messages: |
41ms |
get tp. blocked users: |
1ms |
others: | 14ms |
total: | 610ms |
0 / 0 |