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

Откуда:
Сообщений: 122
имеется таблица только для чтения. можно ли установить для таблицы правило, по которому все запросы к ней будут работать с уровнем изоляции read uncommitted, вне зависимости от хинтов в этих запросах?
ситуация: очень интенсивно считываются строки из таблицы. таблица только для чтения. опытным путём установлено, что если в запросы к таблице добавить хинт with(nolock), то это уменьшает время выполнения. (не очень сильно, но битва идёт за миллисекунды).
то что есть:
select * from tb where a = 1
то что надо:
select * from tb with(nolock) where a = 1
к сожалению, нет возможности изменить запросы, они генерируются на клиенте автоматически.
необходимо на стороне сервера установить запрет на блокировки.
MS SQL Server 2008 R2
9 окт 11, 14:20    [11409034]     Ответить | Цитировать Сообщить модератору
 Re: постоянный (nolock) для таблицы  [new]
ТРОЛОЛОЛО
Guest
Индекс на поле a то есть?
9 окт 11, 14:27    [11409051]     Ответить | Цитировать Сообщить модератору
 Re: постоянный (nolock) для таблицы  [new]
Ray D
Member

Откуда: from the middle of nowhere
Сообщений: 3598
Блог
если таблица совсем прям для чтения, то положите ее на read only filegroup, получите то, что хотите.
9 окт 11, 14:27    [11409052]     Ответить | Цитировать Сообщить модератору
 Re: постоянный (nolock) для таблицы  [new]
iljy
Member

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

можно таблицу на вьюху заменить например. А можно запретить для таблицы блокировку строк и страниц, тогда всегда будет накладываться tablock, это будет быстрее.
9 окт 11, 14:33    [11409060]     Ответить | Цитировать Сообщить модератору
 Re: постоянный (nolock) для таблицы  [new]
valv
Member

Откуда:
Сообщений: 122
Ray D,

Ray D
если таблица совсем прям для чтения

увы, нет, перед рабочим днём её заполняем. только для чтения она только в процессе работы.
Ray D
то положите ее на read only filegroup, получите то, что хотите

большое спасибо, это выход! если не найдётся другой способ, будем после заполнения таблицы менять filegroup на read only.
9 окт 11, 14:41    [11409072]     Ответить | Цитировать Сообщить модератору
 Re: постоянный (nolock) для таблицы  [new]
valv
Member

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

iljy
можно таблицу на вьюху заменить например.

а как заменить, чтобы не было блокировок?
create view vw as select * from tb
при чтении из
select * from vw where a = 1
всё равно создаются блокировки на таблицу [tb].
iljy
А можно запретить для таблицы блокировку строк и страниц, тогда всегда будет накладываться tablock, это будет быстрее.

но всё равно жаль терять время на абсолютно ненужную блокировку.
9 окт 11, 14:47    [11409081]     Ответить | Цитировать Сообщить модератору
 Re: постоянный (nolock) для таблицы  [new]
iljy
Member

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

iljy
можно таблицу на вьюху заменить например.

а как заменить, чтобы не было блокировок?
create view vw as select * from tb
при чтении из
select * from vw where a = 1
всё равно создаются блокировки на таблицу [tb].

Естественно указав в определении представления NOLOCK.

valv
iljy
А можно запретить для таблицы блокировку строк и страниц, тогда всегда будет накладываться tablock, это будет быстрее.

но всё равно жаль терять время на абсолютно ненужную блокировку.

Блокировка безусловно нужная, поскольку дает гарантию, что таблица не поменяется. Использование NOLOCK - это в принципе крайняя крайность, поскольку потенциальный гемор существенно превосходит микросекундный выигрышь. На вьюху кстати все равно будет накладываться IS.
9 окт 11, 14:56    [11409096]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить