Интеграционные услуги и уровень изоляции - PullRequest
2 голосов
/ 22 января 2009

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

По умолчанию SSIS работает с уровнем изоляции Serializable, который является самым высоким уровнем изоляции в SQL 2005.

Пакет служб SSIS только читает данные, но взаимные блокировки создаются из-за размера запросов и блокировок, повышающихся до блокировок страниц, в то время как другие процессы обновляют / вставляют.

Клиенты обычно используют стандартную версию SQL 2005, поэтому это единственная функциональность, которую мы можем использовать.

Кто-нибудь знает, решит ли эти проблемы блокировки изменение IsolationLevel пакета на ReadCommitted (или другой уровень изоляции)? И если это решит их, есть ли побочные эффекты (фантомные чтения, неповторяющиеся чтения и т. Д.)

Спасибо

1 Ответ

1 голос
/ 24 января 2009

Существует большое обсуждение уровней изоляции с фиксацией и повторением-чтением и потенциальными проблемами, которые они могут вызвать:

http://blogs.msdn.com/craigfr/archive/2007/04/25/read-committed-isolation-level.aspx http://blogs.msdn.com/craigfr/archive/2007/05/09/repeatable-read-isolation-level.aspx

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

Если вы только читаете данные, лучшим вариантом может быть изоляция моментальных снимков. SSIS не поддерживает его, но вы можете избежать транзакций SSIS и выполнить BEGIN TRANSACTION в коде SQL.

...