Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Очистка лога транзакций во время выполнения бооольшой транзакции...
|
|||
|---|---|---|---|
|
#18+
Добрый день. Есть запрос, который удаляет огромное количество данных из таблицы (примерно 150 Гб). Код: sql 1. Но при этом в лог транзакций генерируется куча данных. И лог иногда перестает влазить на диск. удаление длится примерно 3 часа. Бэкап лога прямо во время выполнения этого удаления должен ли очищать лог? Или он не сможет очистить то что генерирует открытая транзакция? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.08.2018, 18:15 |
|
||
|
Очистка лога транзакций во время выполнения бооольшой транзакции...
|
|||
|---|---|---|---|
|
#18+
А что должно произойти в случае, если вы забэкапите лог, сервер его почистит, а потом транзакция захочет откатиться? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.08.2018, 18:20 |
|
||
|
Очистка лога транзакций во время выполнения бооольшой транзакции...
|
|||
|---|---|---|---|
|
#18+
Гавриленко Сергей АлексеевичА что должно произойти в случае, если вы забэкапите лог, сервер его почистит, а потом транзакция захочет откатиться? Я вот тоже думаю что он очищать текущие транзакции не могёт. Ну и бэкап лога это подтверждает - не очищает. Хотел убедиться. А во время перестройки индекса получается такая же ситуация - бэкапь не бэкапь лог: он не очистится? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.08.2018, 18:22 |
|
||
|
Очистка лога транзакций во время выполнения бооольшой транзакции...
|
|||
|---|---|---|---|
|
#18+
пятый2Или он не сможет очистить то что генерирует открытая транзакция? не сможет используйте батчи например Код: sql 1. 2. 3. 4. 5. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.08.2018, 18:24 |
|
||
|
Очистка лога транзакций во время выполнения бооольшой транзакции...
|
|||
|---|---|---|---|
|
#18+
komradпятый2Или он не сможет очистить то что генерирует открытая транзакция? не сможет используйте батчи например Код: sql 1. 2. 3. 4. 5. Спасибо, попробую так. Наверное еще на каждом шаге бэкап лога как-нить всуну. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.08.2018, 18:28 |
|
||
|
Очистка лога транзакций во время выполнения бооольшой транзакции...
|
|||
|---|---|---|---|
|
#18+
Может, стоит секционировать по полю "a" как-нибудь и транкейтить секции? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.08.2018, 18:33 |
|
||
|
Очистка лога транзакций во время выполнения бооольшой транзакции...
|
|||
|---|---|---|---|
|
#18+
Гавриленко Сергей АлексеевичМожет, стоит секционировать по полю "a" как-нибудь и транкейтить секции? Тоже хороший вариант, благодарю. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.08.2018, 18:34 |
|
||
|
Очистка лога транзакций во время выполнения бооольшой транзакции...
|
|||
|---|---|---|---|
|
#18+
10 раз подумайте прежде чем секционировать... некоторые запросы возможно придется менять. Я за вариант удаления пачками. Найдите кол-во записей в пачке экспериментально. Код: sql 1. 2. 3. 4. 5. 6. Для такого запроса обязательно нужен индекс по полю "a", иначе такое удаление только хуже сделает. Код: sql 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.08.2018, 19:44 |
|
||
|
Очистка лога транзакций во время выполнения бооольшой транзакции...
|
|||
|---|---|---|---|
|
#18+
Владимир Затуливетер10 раз подумайте прежде чем секционировать... некоторые запросы возможно придется менять. Я за вариант удаления пачками. Найдите кол-во записей в пачке экспериментально. Код: sql 1. 2. 3. 4. 5. 6. Для такого запроса обязательно нужен индекс по полю "a", иначе такое удаление только хуже сделает. Код: sql 1. Да, да, секционирование это зло, а вот поддерживать доп индекс на таблице и добавить "лукап" в кластерный индекс при удалении это "best practices" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.08.2018, 19:48 |
|
||
|
Очистка лога транзакций во время выполнения бооольшой транзакции...
|
|||
|---|---|---|---|
|
#18+
А огромное кол-во данных это какой процент от всех данных в таблице? А то может проще перенести все что надо в новую табличку, а эту дропнуть? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.08.2018, 19:49 |
|
||
|
Очистка лога транзакций во время выполнения бооольшой транзакции...
|
|||
|---|---|---|---|
|
#18+
msLex, авторДа, да, секционирование это зло, а вот поддерживать доп индекс на таблице и добавить "лукап" в кластерный индекс при удалении это "best practices" это как-то специально надо заставить это сделать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.08.2018, 20:07 |
|
||
|
Очистка лога транзакций во время выполнения бооольшой транзакции...
|
|||
|---|---|---|---|
|
#18+
пятый2Добрый день. Есть запрос, который удаляет огромное количество данных из таблицы (примерно 150 Гб). Код: sql 1. Но при этом в лог транзакций генерируется куча данных. И лог иногда перестает влазить на диск. удаление длится примерно 3 часа. Бэкап лога прямо во время выполнения этого удаления должен ли очищать лог? Или он не сможет очистить то что генерирует открытая транзакция? А можно так. Сделать выгрузку из таблицы table в CSV where a <> 1. Затем загрузку пакетом SSIS с Fast load в чистую вновь созданную таблицу table_new. Затем переименование table в table_old и table_new в table внутри одной транзакции с обработкой исключения. И после этого делать бэкап журнала транзакций. Если что-то важное удалится, а реально столбец для этой строки был не a=1, а a=2, то найти нужную строку в table_old и загрузить ее одну такую в table будет проще, чем с воплями "где таки свободное дисковое пространство" разворачивать полный бэкап базы рядом и дальше после этого искать в базе-копии эту единственную строку. То есть я предлагаю Вам посмотреть чуть дальше привычного горизонта планирования. А место внутри БД можно всегда получить через truncate table_old перед полным бэкапом БД, MSSQL поймет, что там были реальные строки, а теперь страницы с пустым местом для новых таблиц - и не будет эту пустоту записывать в бэкап. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.08.2018, 20:24 |
|
||
|
Очистка лога транзакций во время выполнения бооольшой транзакции...
|
|||
|---|---|---|---|
|
#18+
Andy_OLAP, Более того, имея копию одной большой таблицы, но одной, в файле CSV - можно ее в любой момент загрузить внутрь этой базы данных в таблицу table_old_copy_before_delete и поискать там. А если файлы CSV сжимать в архив и складывать на дешевую дисковую полку - то при необходимости можно будет в любой момент сделать bulk insert через SSIS пакет в таблицу table_old_copy_before_delete_in_date_20180803 и другой CSV в таблицу table_old_copy_before_delete_in_date_20180806 - и сравнить между собой. Иногда такое сравнение дает исключительно положительный и неожиданный эффект. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.08.2018, 20:28 |
|
||
|
Очистка лога транзакций во время выполнения бооольшой транзакции...
|
|||
|---|---|---|---|
|
#18+
msLexДа, да, секционирование это зло, а вот поддерживать доп индекс на таблице и добавить "лукап" в кластерный индекс при удалении это "best practices" Да, да, как буд-то секционирование дается нам "бесплатно". Я сказал подумать. Если автор только складывает и удаляет, то однозначно секционирование. А вот если у него куча разных запросов, которым поплохеет после вашего секционирования, да еще и новые значения добавляются в столбец "а" переодически, то кто заплатит за рефекторинг и поддержку софта автора? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.08.2018, 20:50 |
|
||
|
Очистка лога транзакций во время выполнения бооольшой транзакции...
|
|||
|---|---|---|---|
|
#18+
пятый2 Наверное еще на каждом шаге бэкап лога как-нить всуну. ну безусловно, либо через N-ое кол-во циклов кстати, бекап в NUL работает безотказно и места не занимает, хотя с компрессией не совместим ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.08.2018, 22:14 |
|
||
|
Очистка лога транзакций во время выполнения бооольшой транзакции...
|
|||
|---|---|---|---|
|
#18+
Владимир ЗатуливетерmsLexДа, да, секционирование это зло, а вот поддерживать доп индекс на таблице и добавить "лукап" в кластерный индекс при удалении это "best practices" Да, да, как буд-то секционирование дается нам "бесплатно". Я сказал подумать. Если автор только складывает и удаляет, то однозначно секционирование. А вот если у него куча разных запросов, которым поплохеет после вашего секционирования, да еще и новые значения добавляются в столбец "а" переодически, то кто заплатит за рефекторинг и поддержку софта автора?Если выпиливание 150 Гб данных командой delete (да еще, по вашей версии, и по некластерному индексу) -- это не повод задуматься о секционировании, то я уж даже не знаю, что может быть таким поводом. Но я уже испорчен наличием AlwaysOn -- сия волшебная технология быстро отучает нагружать лог всякой ненужной фигней. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.08.2018, 00:13 |
|
||
|
Очистка лога транзакций во время выполнения бооольшой транзакции...
|
|||
|---|---|---|---|
|
#18+
В каждом решении есть плюсы и минусы, давайте предоставим выбор автору темы. Мы не знаем что у него там, у нас только предположения. А по поводу некластерного индекса, это не важно что мы удаляем по нему. Это бэкграунд таск, задержкой мы можем регулировать нагрузку. Он может удалять данные и 10 часов и неделю. Главное чтобы это автора темы устраивало. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.08.2018, 06:54 |
|
||
|
Очистка лога транзакций во время выполнения бооольшой транзакции...
|
|||
|---|---|---|---|
|
#18+
В схожем случае выпиливал записи курсором (delete...current of). По одной, зато сразу и без накладных расходов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.08.2018, 09:57 |
|
||
|
Очистка лога транзакций во время выполнения бооольшой транзакции...
|
|||
|---|---|---|---|
|
#18+
Владимир Затуливетер10 раз подумайте прежде чем секционировать... некоторые запросы возможно придется менять. Я за вариант удаления пачками. Найдите кол-во записей в пачке экспериментально. Код: sql 1. 2. 3. 4. 5. 6. Для такого запроса обязательно нужен индекс по полю "a", иначе такое удаление только хуже сделает. Код: sql 1. Индекс есть. На счет задержки, спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.08.2018, 12:23 |
|
||
|
Очистка лога транзакций во время выполнения бооольшой транзакции...
|
|||
|---|---|---|---|
|
#18+
Andy_OLAPAndy_OLAP, Более того, имея копию одной большой таблицы, но одной, в файле CSV - можно ее в любой момент загрузить внутрь этой базы данных в таблицу table_old_copy_before_delete и поискать там. А если файлы CSV сжимать в архив и складывать на дешевую дисковую полку - то при необходимости можно будет в любой момент сделать bulk insert через SSIS пакет в таблицу table_old_copy_before_delete_in_date_20180803 и другой CSV в таблицу table_old_copy_before_delete_in_date_20180806 - и сравнить между собой. Иногда такое сравнение дает исключительно положительный и неожиданный эффект. Интересный вариант, мини архив получается. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.08.2018, 12:26 |
|
||
|
|

start [/forum/topic.php?fid=46&msg=39683904&tid=1689306]: |
0ms |
get settings: |
5ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
49ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
66ms |
get tp. blocked users: |
1ms |
| others: | 216ms |
| total: | 369ms |

| 0 / 0 |
