Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Вопрос про блокировки  [new]
HiMik2004
Member

Откуда: Кишинёв
Сообщений: 327
MS SQL 2000 EE SP4
Есть таблица, в которую порциями по несколько тысяч сервис (C#) вставляет записи. Хочу попробовать делать это в одной транзакции (используя SqlTransaction), т.е. без AutoCommit'a, чтобы увеличить производительность.
Есть job, который обнаруживает новые записи, обрабатывает и помечает их.
Будет ли такая вставка целым блоком сильно мешать обработке? Видит ли читающий процесс втавляемые записи до их полного комитта и ожидает ли освобождения блокировки или пока нет комита всего блока записей читающий процесс не догадывается об их существовании (и следовательно не тормозится)?
26 май 11, 13:20    [10712579]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос про блокировки  [new]
Гадя Петрович
Member

Откуда: планета Плюк, 215 в тентуре, галактика Кин-дза-дза в Спирали
Сообщений: 52912
читайте про уровни изоляции транзакций
26 май 11, 13:22    [10712589]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос про блокировки  [new]
HiMik2004
Member

Откуда: Кишинёв
Сообщений: 327
Гадя Петрович,

спасибо, я знаю что по-умолчанию используется уровень readcommited, который не допускает грязное чтение. Вопрос, как именно не допускает, блокирует чтение до освобождения записей или просто пропускает незакомиченые записи.
26 май 11, 13:27    [10712638]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос про блокировки  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
HiMik2004
Гадя Петрович,

спасибо, я знаю что по-умолчанию используется уровень readcommited, который не допускает грязное чтение. Вопрос, как именно не допускает, блокирует чтение до освобождения записей или просто пропускает незакомиченые записи.
26 май 11, 13:31    [10712696]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос про блокировки  [new]
jsmirnoww
Member

Откуда: Москва
Сообщений: 132
HiMik2004
Гадя Петрович,

спасибо, я знаю что по-умолчанию используется уровень readcommited, который не допускает грязное чтение. Вопрос, как именно не допускает, блокирует чтение до освобождения записей или просто пропускает незакомиченые записи.


Ждёт окончания блокирующей транзакции до истечения таймаута.
27 май 11, 10:06    [10717416]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос про блокировки  [new]
HiMik2004
Member

Откуда: Кишинёв
Сообщений: 327
Правильно ли я понял, что когда есть процесс, который почти непрерывно вставляет записи в таблицу и процесс, который эти записи должен как минимум читать, чтобы они не мешали друг другу, можно использовать хинт READPAST при чтении? Или эти процессы не будут мешать друг другу?
27 май 11, 12:36    [10718776]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос про блокировки  [new]
iljy
Member

Откуда:
Сообщений: 8711
HiMik2004
Правильно ли я понял, что когда есть процесс, который почти непрерывно вставляет записи в таблицу и процесс, который эти записи должен как минимум читать, чтобы они не мешали друг другу, можно использовать хинт READPAST при чтении? Или эти процессы не будут мешать друг другу?

У вас действительно серьезная конкуренция у читателей и писателей, или вы теоретизируете? READPAST вообще говоря не для этого предназначен. Можно попробовать READ_COMMITTED_SNAPSHOT.
27 май 11, 12:38    [10718804]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос про блокировки  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
iljy
Можно попробовать READ_COMMITTED_SNAPSHOT.

HiMik2004
MS SQL 2000 EE SP4
27 май 11, 12:40    [10718830]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос про блокировки  [new]
iljy
Member

Откуда:
Сообщений: 8711
Гавриленко Сергей Алексеевич
iljy
Можно попробовать READ_COMMITTED_SNAPSHOT.

HiMik2004
MS SQL 2000 EE SP4

Пардон, пропустил.

HiMik2004,

тогда вставляйте записи в промежуточную таблицу, а потом перегоняйте в основную одной операцией. Будет заведомо быстрее, соответственно время блокировки основной таблицы уменьшится.
27 май 11, 12:45    [10718880]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос про блокировки  [new]
HiMik2004
Member

Откуда: Кишинёв
Сообщений: 327
iljy,

Один процесс вставляет записи периодически (10 сек. вставка, потом 5 сек. пауза).
Job работает непрерывно, читая новые записи, копирует в другю БД, помечает как обработанные.
Записи должны обрабатываться быстро, без значительных задержек.
27 май 11, 12:56    [10719010]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос про блокировки  [new]
iljy
Member

Откуда:
Сообщений: 8711
HiMik2004
iljy,

Один процесс вставляет записи периодически (10 сек. вставка, потом 5 сек. пауза).
Job работает непрерывно, читая новые записи, копирует в другю БД, помечает как обработанные.
Записи должны обрабатываться быстро, без значительных задержек.

И? 10 секунд вставляйте в промежуточную таблицу, по окончании запускайте процедуру копирования.
27 май 11, 12:57    [10719024]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос про блокировки  [new]
HiMik2004
Member

Откуда: Кишинёв
Сообщений: 327
iljy,

А READPAST мне не поможет? Чтобы пропускать при чтении те записи которые вставляются, но ещё не зафиксированы?
27 май 11, 13:00    [10719044]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос про блокировки  [new]
iljy
Member

Откуда:
Сообщений: 8711
HiMik2004
iljy,

А READPAST мне не поможет? Чтобы пропускать при чтении те записи которые вставляются, но ещё не зафиксированы?

Вы же сами переживали, что нельзя больших задержек! Если вас устроит пропуск записей - дело ваше.
27 май 11, 13:01    [10719059]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос про блокировки  [new]
HiMik2004
Member

Откуда: Кишинёв
Сообщений: 327
iljy,

я рассуждаю так. Ничего страшного если запись будет пропущена, ведь она всё равно ещё не зафиксирована, зачем её ждать и терять время. Будет обработана чуть позже, главное, чтобы уже имеющиеся и зафиксированные записи обрабатывались сразу.
27 май 11, 13:15    [10719176]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить