Что мне установить уровень изоляции транзакции для конверсии с большим количеством записей - PullRequest
0 голосов
/ 19 апреля 2011

Я использую SQL Server 2008 R2, и у меня есть преобразование, написанное на VB.NET, которое занимает несколько часов и преобразует миллионы записей. Есть моменты, когда мне нужно отменить процесс, который откатывает транзакцию. Когда это происходит, я не хочу, чтобы откат занял несколько часов, как это происходит.

Поэтому я удалил транзакцию все вместе, чтобы не было времени для отката, но он оставляет все записи в том состоянии, в котором они находятся. Тем не менее, у меня есть одна таблица с миллионами записей в ней. Я удаляю все записи, чтобы начать. Чтобы удалить все записи, нужны часы. Когда я смотрю на RowCount таблицы, он говорит ноль, как будто он удалил их все, но он чего-то ждет, и я не могу понять, что. Я надеюсь, что помещение команды DELETE в транзакцию с уровнем изоляции READ UNCOMMITTED поможет.

Я хотел бы получить мнение о том, что является лучшим методом для уровней изоляции транзакций на больших объемах данных, прежде чем я попытаюсь это сделать, потому что это займет несколько часов. Кроме того, как вы думаете, если бы я поместил всю конвертацию в транзакцию READ UNCOMMITTED, это не заняло бы никакого времени, если я отменил бы процесс?

Ответы [ 2 ]

2 голосов
/ 19 апреля 2011

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

Уровни восстановления делают, простое или массовое восстановление будет быстрее для вставки данных при использовании BCP или BULK INSERT

Вы пишете код, написанный на основе SET, или зацикливаетесь на злых курсорах?

У вас есть триггеры на столе, которые не оптимизированы?

Чтобы удалить все строки, обрежьте таблицу, так как это минимально зарегистрировано, или пакетный процесс удаления в пакетах, например, 10000 или около того, если вы не хотите удалять все

1 голос
/ 19 апреля 2011

У меня есть одна таблица с миллионами записей в ней. Я удаляю все записи, чтобы начать. Это занимает часы просто удалить все записи.

усеченная таблица xxx ---- не должна занимать больше доли секунды, независимо от размера таблицы.

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

Зависит от процесса, монтирования данных и потребностей. Нет общего ответа. Тем не менее, наличие оборудования уровня не dektop помогает. У меня нет проблем с обработкой 2-5 миллионов строк в операторе удаления за минуты ... на сервере базы данных (то есть не 1-2 диска, а довольно много).

Кроме того, как вы думаете, если бы я поместил всю конвертацию в транзакцию READ UNCOMMITTED, это бы не занять какое-то время, если я отменю процесс?

Нет. Откат занимает время, потому что сервер SQL не оптимизирован для этого и должен откатить все изменения, сделанные до сих пор.

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