Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 Возникают ли избыточные блокировки при чтении?  [new]
Raskolnikov
Member

Откуда:
Сообщений: 52
Привет!

Один товарищ из интернета говорит следующее:

[img]http://www.valar.ru/gallery/0813/1377978255_.png[/img]

В связи с этим есть пара вопросов:
1) если происходит сканирование таблицы, то в ней нельзя не обновить, не добавить записи?
2) это происходит при любом уровне изоляции транзакций или при каких-то конкретных?
31 авг 13, 23:39    [14780519]     Ответить | Цитировать Сообщить модератору
 Re: Возникают ли избыточные блокировки при чтении?  [new]
Гость333
Member

Откуда:
Сообщений: 3683
Raskolnikov
Один товарищ из интернета говорит следующее:

Странный источник информации по MSSQL -- "товарищ из интернета" (с фэнтези форума?!), который даже не в состоянии изложить свои мысли грамотным русским языком.

Raskolnikov
1) если происходит сканирование таблицы, то в ней нельзя не обновить, не добавить записи?

Не обязательно.

Raskolnikov
2) это происходит при любом уровне изоляции транзакций

Не при любом.
1 сен 13, 00:35    [14780565]     Ответить | Цитировать Сообщить модератору
 Re: Возникают ли избыточные блокировки при чтении?  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6724
Raskolnikov
Один товарищ из интернета говорит следующее:
Картинка с другого сайта.
Этот что ли?
1 сен 13, 02:14    [14780619]     Ответить | Цитировать Сообщить модератору
 Re: Возникают ли избыточные блокировки при чтении?  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6724
Шамиладзе Тимур (infotimik), 8 января, 2011
Необходимые и избыточные блокировки

          Блокировка – это не ошибка. В большинстве случаев, блокировка это абсолютно необходимый защитный механизм без которого система бы не смогла правильно работать. Люди, которые, с этим не очень знакомы или знакомы поверхностно пишут на форумах или где-то: "У меня пользователи получают сообщения о блокировках. Где отключается блокировки?" У них есть ощущения, что где-то есть настройка, галочка, которая выключит все блокировки и дальше блокировок не будет и все будет хорошо. Понятно, что это заблуждение. Блокировки выключить нельзя. Если мы выключим блокировки, мы начнем ломать данные друг друга, и в итоге не решим задачи, которые перед системой стоят.

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

          Простейший пример избыточной блокировки - это сканирования таблиц. У нас слетел план запроса и мы просканировали таблицу, для того чтобы выбрать одну запись. Мы вместо того, чтобы заблокировать одну запись, которая нам нужна, заблокировали всю таблицу, и ни кому не даем этими данными пользоваться. Т.е. это совершенно не правильно, это лишнее избыточная блокировка, которую можно и нужно устранить.
Посыл простой, но совершенно мучительный для гуманитариев - надо учитывать всё.

А вот infotimik ошибся тем что вводит симулякры, на которые гуманитарии так падки.
Ну на прилагательные ...

Дело не в блокировках, а в том что иногда сканирование излишне, и не важно что оно что-то может заблокировать или зря сожрать кучу ресурсов (IO). Но и само сканирование не зло, оно иногда очень даже необходимо.
Чё, сложновато?!
1 сен 13, 02:30    [14780626]     Ответить | Цитировать Сообщить модератору
 Re: Возникают ли избыточные блокировки при чтении?  [new]
Raskolnikov
Member

Откуда:
Сообщений: 52
Гость333
Не обязательно.

В каких случаях это происходит, а в каких нет?

Гость333
Не при любом.

А при каком?

Mnior
Этот что ли?

Этот.

Mnior
Дело не в блокировках, а в том что иногда сканирование излишне, и не важно что оно что-то может заблокировать или зря сожрать кучу ресурсов (IO). Но и само сканирование не зло, оно иногда очень даже необходимо.

Ну т.е. при сканировании таблица никаких блокировок не возникает?

Mnior
Чё, сложновато?!

Не сложновать, а непонятно.
1 сен 13, 13:28    [14780931]     Ответить | Цитировать Сообщить модератору
 Re: Возникают ли избыточные блокировки при чтении?  [new]
МуМу
Member

Откуда:
Сообщений: 1134
(0) Думаю вам стоит для начала почитать пару авторитетных статей, прежде чем слушать "товарищей из интернета":)
Слишком много вопросов показывающих низкий уровень знаний по этому вопросу. Хотя может кто ни будь и разжует.
1 сен 13, 14:27    [14781020]     Ответить | Цитировать Сообщить модератору
 Re: Возникают ли избыточные блокировки при чтении?  [new]
Raskolnikov
Member

Откуда:
Сообщений: 52
МуМу, я почему задал этот вопрос... Потому что услышал такое первый раз. Вот и хочу уточнить для себя: либо "товарищ из интернета" говорить неправду, либо я до этого понимал все не так, как оно на самом деле.
1 сен 13, 14:35    [14781029]     Ответить | Цитировать Сообщить модератору
 Re: Возникают ли избыточные блокировки при чтении?  [new]
МуМу
Member

Откуда:
Сообщений: 1134
Ну это смотря в каком контексте сказано и какой смысл вы в это вкладываете. Создайте таблицу из миллиона записей и не повесьте на нее ни один индекс. А затем считайте одну запись(пускай уникальную) у вас будет сканироваться вся таблица. Какой из этого вывод? - Да ровно никакого! Это нормально. Иногда сканирование - хорошо, иногда плохо. Вешать внутренний доп. индекс?(на какое поле?) Нужно понимать как работает движок SQL хотя бы основы. Так что пост ни о чем. Прочтите основы , затем задавайте вопросы по существу.
1 сен 13, 15:08    [14781058]     Ответить | Цитировать Сообщить модератору
 Re: Возникают ли избыточные блокировки при чтении?  [new]
Raskolnikov
Member

Откуда:
Сообщений: 52
МуМу, до того, как задать вопрос, я сделал примерно так, как вы выше сказали. Сделал простенькую таблицу без индексов, добавил туда 200 000 записей. В разных соединениях где-то с интервалом 1-2 сек. запустил запрос выборки всех данных оттуда. В итоге время выполнения обоих запросов было одинаковое. Т.е. никто никого не ждал. Вот после этого я задал вопрос здесь, т.к. вроде как ничего не блокируется, но, думаю, хз, может в каком-то случае блокируется...
1 сен 13, 15:36    [14781088]     Ответить | Цитировать Сообщить модератору
 Re: Возникают ли избыточные блокировки при чтении?  [new]
Raskolnikov
Member

Откуда:
Сообщений: 52
Raskolnikov
В разных соединениях где-то с интервалом 1-2 сек. запустил запрос выборки всех данных оттуда

Сами запросы выполняются секунд 8-9.
1 сен 13, 15:37    [14781089]     Ответить | Цитировать Сообщить модератору
 Re: Возникают ли избыточные блокировки при чтении?  [new]
Glory
Member

Откуда:
Сообщений: 104751
Raskolnikov
В разных соединениях где-то с интервалом 1-2 сек. запустил запрос выборки всех данных оттуда.

А почему вы решили, что в приведенной вами цитате речь идет о select-ах ?
1 сен 13, 16:00    [14781103]     Ответить | Цитировать Сообщить модератору
 Re: Возникают ли избыточные блокировки при чтении?  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74930
Raskolnikov
В итоге время выполнения обоих запросов было одинаковое. Т.е. никто никого не ждал. Вот после этого я задал вопрос здесь, т.к. вроде как ничего не блокируется, но, думаю, хз, может в каком-то случае блокируется...


Почитайте уже документацию. Про блокировки, про их совместимость. Про версионность тоже полезно будет почитать.
1 сен 13, 16:02    [14781106]     Ответить | Цитировать Сообщить модератору
 Re: Возникают ли избыточные блокировки при чтении?  [new]
invm
Member

Откуда: Москва
Сообщений: 9830
"Товарищ из интернета" написал чушь. Хотя бы потому, что читатели не блокируют других читателей (особые случаи не будем принимать во внимание).
1 сен 13, 16:10    [14781113]     Ответить | Цитировать Сообщить модератору
 Re: Возникают ли избыточные блокировки при чтении?  [new]
Raskolnikov
Member

Откуда:
Сообщений: 52
Glory
А почему вы решили, что в приведенной вами цитате речь идет о select-ах ?

Вот это, наверное, ключевой для меня вопрос в этой теме. Почему так решил - в силу своей неопытности.

Хорошо, отставить выборку данных. Делаем UPDATE, который сканирует таблицу. Разве он заблокирует всю таблицу? А не будет блокировать конкретные записи на время проверки условия WHERE? И если по условию запись проходит, тогда блокировка остается, а если не проходит, тогда снимает блокироку.

invm
"Товарищ из интернета" написал чушь. Хотя бы потому, что читатели не блокируют других читателей (особые случаи не будем принимать во внимание).

Может быть не чушь, может быть я не правильно понял. Может "товарищ из интернета", как правильно заметил Glory, не имел ввиду именно select, а я просто по незнанию так подумал. Но в таком случае у меня возникает вопрос с UPDATE-ом, который я выше озвучил.
1 сен 13, 16:46    [14781176]     Ответить | Цитировать Сообщить модератору
 Re: Возникают ли избыточные блокировки при чтении?  [new]
Exproment
Member

Откуда:
Сообщений: 416
Товарищ из интернета говорит не бред, а слишком абстрактно.

Если у вас установлен уровень изоляции repeatable read или serializable, то действительно при сканировании будет заблокирована вся таблица(или индекс, который сканировался). Вы можете это увидеть выполнив такой запрос:

use AdventureWorks2008R2

begin tran
set transaction isolation level repeatable read

select	count(P.ProductID)
from	Production.Product P


select	*
from	sys.dm_tran_locks DMTL
where	DMTL.resource_database_id = DB_ID()
		and resource_type != 'DATABASE'


Однако если выставлен уровень изоляции read commited, то S-блокировки будут навешиваться, только на момент самого чтения, а не жизни транзакции => весь индекс(таблица) заблокированы не будут. А страницы будут последовательно блокироваться и освобождаться. Если уровень изоляции еще ниже, то там вообще S блокировки не навешиваются насколько могу понмить.
1 сен 13, 18:47    [14781311]     Ответить | Цитировать Сообщить модератору
 Re: Возникают ли избыточные блокировки при чтении?  [new]
Raskolnikov
Member

Откуда:
Сообщений: 52
В общем, благодаря, наводящему вопросу Glory и очень в тему ответу invm в соседней теме msg=14781098] у меня немного данный вопрос прояснился. Так же определенную ясность внес ответ Exproment, в т.ч. фраза
Exproment
Товарищ из интернета говорит не бред, а слишком абстрактно.


Спасибо всем за ответы! Особое спасибо invm, Glory и Exproment!

ПС. если у кого-то ещё будет, что сказать по теме - с удовольствием выслушаю.
2 сен 13, 21:26    [14786744]     Ответить | Цитировать Сообщить модератору
 Re: Возникают ли избыточные блокировки при чтении?  [new]
Гость333
Member

Откуда:
Сообщений: 3683
Raskolnikov
ПС. если у кого-то ещё будет, что сказать по теме - с удовольствием выслушаю.

Ну, например, если при обработке запроса случится Lock Escalation (Укрупнение блокировки), то будет заблокирована вся таблица целиком (либо, как вариант, целиком секция в секционированной таблице).
3 сен 13, 09:16    [14787616]     Ответить | Цитировать Сообщить модератору
 Re: Возникают ли избыточные блокировки при чтении?  [new]
softmaker
Member

Откуда: оттуда
Сообщений: 1088
Raskolnikov
Хорошо, отставить выборку данных. Делаем UPDATE, который сканирует таблицу. Разве он заблокирует всю таблицу? А не будет блокировать конкретные записи на время проверки условия WHERE? И если по условию запись проходит, тогда блокировка остается, а если не проходит, тогда снимает блокироку.

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

Почитайте внимательно ответы в теме. И, да, почитайте уже документацию. Ключевое слово "транзакция". Ни один update ничего и никогда не блокирует, в том числе select, delete, insert и прочие drop.
3 сен 13, 10:48    [14788106]     Ответить | Цитировать Сообщить модератору
 Re: Возникают ли избыточные блокировки при чтении?  [new]
Exproment
Member

Откуда:
Сообщений: 416
softmaker
Ни один update ничего и никогда не блокирует, в том числе select, delete, insert и прочие drop.


softmaker, я видимо неправильно понял ваше сообщение, но вроде вы утверждаете что update не накладывает блокировки ? Я-то всегда думал, что update накладывает целый спектр блокировок: S,U,X. Причем последняя живет до конца транзакции.

+ intent locks + если сериализуемый уровень, то возможны Range Locks.

Как прикажете вас понимать ?
3 сен 13, 13:31    [14789163]     Ответить | Цитировать Сообщить модератору
 Re: Возникают ли избыточные блокировки при чтении?  [new]
Гость333
Member

Откуда:
Сообщений: 3683
Exproment
Я-то всегда думал, что update накладывает целый спектр блокировок: S,U,X.

Уточнение: update не накладывает S-блокировок.
BOL -> Lock Modes
Lock mode Description
Shared (S) Used for read operations that do not change or update data such as a SELECT statement.
3 сен 13, 13:48    [14789268]     Ответить | Цитировать Сообщить модератору
 Re: Возникают ли избыточные блокировки при чтении?  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
softmaker
Ни один update ничего и никогда не блокирует, в том числе select, delete, insert и прочие drop.
Если коротко - чушь несусветная.

use tempdb
go
if object_id('dbo.TestLocks') is not null
    drop table dbo.TestLocks
    
create table dbo.TestLocks (    
    id      int             not null    primary key clustered
    , name  varchar (50)    not null
)
go
insert dbo.TestLocks (
    id
    , name
)
select
    1
    , 'Нихт!'
go

update a set
    a.name = 'Ахтунг!'
from    dbo.TestLocks a
where
    a.id = 1
go    


Результат в следующем посте.

Сообщение было отредактировано: 3 сен 13, 14:05
3 сен 13, 14:03    [14789354]     Ответить | Цитировать Сообщить модератору
 Re: Возникают ли избыточные блокировки при чтении?  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254


К сообщению приложен файл. Размер - 15Kb
3 сен 13, 14:05    [14789369]     Ответить | Цитировать Сообщить модератору
 Re: Возникают ли избыточные блокировки при чтении?  [new]
Exproment
Member

Откуда:
Сообщений: 416
Гость333
Уточнение: update не накладывает S-блокировок.
BOL -> Lock Modes
Lock mode Description
Shared (S) Used for read operations that do not change or update data such as a SELECT statement.


перед непосредственно update'ом выполняется выборка данных. Вот только я не помню - сразу накладывается U или сначала S, которая потом преобразуется в U. Надо поиграть с разными изоляциями.
3 сен 13, 14:13    [14789405]     Ответить | Цитировать Сообщить модератору
 Re: Возникают ли избыточные блокировки при чтении?  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
Exproment
Гость333
Уточнение: update не накладывает S-блокировок.
пропущено...


перед непосредственно update'ом выполняется выборка данных. Вот только я не помню - сразу накладывается U или сначала S, которая потом преобразуется в U. Надо поиграть с разными изоляциями.
Вот добился RangeS-U блокировка. Можно ее считать за S?

use tempdb
go
if object_id('dbo.TestLocks') is not null
    drop table dbo.TestLocks
    
create table dbo.TestLocks (    
    id      int             not null    --primary key clustered
    , name  varchar (50)    not null
    , primary key (
        id
        , name
    )
)
go
insert dbo.TestLocks (
    id
    , name
)
select
    1
    , 'Нихт!'
union all  select
    2
    , 'Алес!'    
go

update a set
    a.name = 'Ахтунг!'
from    dbo.TestLocks a with ( holdlock )
where
    a.id > 1
go    


К сообщению приложен файл. Размер - 42Kb
3 сен 13, 14:22    [14789464]     Ответить | Цитировать Сообщить модератору
 Re: Возникают ли избыточные блокировки при чтении?  [new]
Exproment
Member

Откуда:
Сообщений: 416
Гавриленко Сергей Алексеевич
Вот добился RangeS-U блокировка. Можно ее считать за S?

с чего это ? RangeS-S можно назвать S-блокировкой диапазона, а RangeS-U - есть U-блокировка диапазона(вроде так). Значит и правда при выбоке данных для update'а сразу накладывается U Блокировка. Спасибо!
3 сен 13, 14:27    [14789495]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить