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

Откуда:
Сообщений: 1906
Разница в уровнях изоляции мне понятна. Но встал вопрос а зачем это всё вообще надо?

Почему просто не сделать все транзакции абсолютно изолированными(serializable)?

Не смог найти материала на эту тему.

Дело в перфомансе?
14 окт 15, 18:14    [18279387]     Ответить | Цитировать Сообщить модератору
 Re: Зачем нужны уровни изоляции транзакции?  [new]
0-0
Guest
questioner,

Ну а если вам не критично грязное чтение, а критично ожидание процесса (пока одна транзакция сделает изменение) и вы хотите это ожидание снизить или свести к 0?
14 окт 15, 18:26    [18279450]     Ответить | Цитировать Сообщить модератору
 Re: Зачем нужны уровни изоляции транзакции?  [new]
Glory
Member

Откуда:
Сообщений: 104751
questioner
Дело в перфомансе?

Дело в "законах"
Про ACID слышали ? https://ru.wikipedia.org/wiki/ACID
14 окт 15, 19:06    [18279681]     Ответить | Цитировать Сообщить модератору
 Re: Зачем нужны уровни изоляции транзакции?  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
questioner
Почему просто не сделать все транзакции абсолютно изолированными(serializable)?
Дело в перфомансе?
Дело не в перфомансе, а в доступности данных.
14 окт 15, 19:17    [18279720]     Ответить | Цитировать Сообщить модератору
 Re: Зачем нужны уровни изоляции транзакции?  [new]
questioner
Member

Откуда:
Сообщений: 1906
Glory
questioner
Дело в перфомансе?

Дело в "законах"
Про ACID слышали ? https://ru.wikipedia.org/wiki/ACID


слышал.

После ответа на этот вопрос у меня спросили.

Ну а зачем эти уровни то вообще нужны?

и я подзавис...не отвис до сих пор.
14 окт 15, 19:33    [18279750]     Ответить | Цитировать Сообщить модератору
 Re: Зачем нужны уровни изоляции транзакции?  [new]
questioner
Member

Откуда:
Сообщений: 1906
Гавриленко Сергей Алексеевич
questioner
Почему просто не сделать все транзакции абсолютно изолированными(serializable)?
Дело в перфомансе?
Дело не в перфомансе, а в доступности данных.


Я понял, что дело в доступности данных.

Зачем нужна разная доступность данных?
14 окт 15, 19:52    [18279808]     Ответить | Цитировать Сообщить модератору
 Re: Зачем нужны уровни изоляции транзакции?  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
questioner
Гавриленко Сергей Алексеевич
пропущено...
Дело не в перфомансе, а в доступности данных.


Я понял, что дело в доступности данных.

Зачем нужна разная доступность данных?
Затем, что данные, до которых никогда нельзя достучаться, никому не нужны. Понижение изолированности транзакции позволяет получить доступ к данным, если есть терпимость к артефактам, которые могут появиться из-за понижения уровня.
14 окт 15, 19:58    [18279825]     Ответить | Цитировать Сообщить модератору
 Re: Зачем нужны уровни изоляции транзакции?  [new]
churupaha
Member

Откуда: Краснодар
Сообщений: 1015
questioner
Glory
пропущено...

Дело в "законах"
Про ACID слышали ? https://ru.wikipedia.org/wiki/ACID


слышал.

После ответа на этот вопрос у меня спросили.

Ну а зачем эти уровни то вообще нужны?

и я подзавис...не отвис до сих пор.


растяну свой баян [:||||||||||||||||||||////\\\|||||||||||||||||||||||:]

я б так ответил

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

но наличие нескольких уровней изоляции - это от суровой технической реальности, а не потому, что так надо. скажу не популярно - это костыль. выше уровень изоляции - выше точность результата, выше конкуренция за ресурсы и расходы на поддержание уровня изоляции... ниже уровень изоляции - меньше доверие к результату вычислений, ниже конкуренция, меньше расходы на поддержание уровня изоляции. чтобы у разработчика была возможность найти компромис между корректностью получаемых результатов и конкуренцией/накладными расходами и есть разные уровни изоляции в разных субд.
14 окт 15, 20:07    [18279840]     Ответить | Цитировать Сообщить модератору
 Re: Зачем нужны уровни изоляции транзакции?  [new]
churupaha
Member

Откуда: Краснодар
Сообщений: 1015
+ и этот костыль в виде нескольких уровней изоляции как-то ложится на теорию, где говорится просто об изоляции (буква I в ACID).

Есть одна статья заумная, где какой-то дядька с сединами рассуждает о кошерности существующих реализаций изоляции в разных СУБД с точки зрения сферической теории... насколько эти модели честные. Че-то не гуглится с ходу.
14 окт 15, 20:13    [18279864]     Ответить | Цитировать Сообщить модератору
 Re: Зачем нужны уровни изоляции транзакции?  [new]
Glory
Member

Откуда:
Сообщений: 104751
questioner
Glory
пропущено...

Дело в "законах"
Про ACID слышали ? https://ru.wikipedia.org/wiki/ACID


слышал.

После ответа на этот вопрос у меня спросили.

Ну а зачем эти уровни то вообще нужны?

и я подзавис...не отвис до сих пор.

Зачем вам на дисплее 65млн оттенков цветов, если для передачи изображения достаточно двух ?
14 окт 15, 20:47    [18279955]     Ответить | Цитировать Сообщить модератору
 Re: Зачем нужны уровни изоляции транзакции?  [new]
o-o
Guest
questioner
Разница в уровнях изоляции мне понятна. Но встал вопрос а зачем это всё вообще надо?

The transaction isolation levels provide applications with an option to choose between consistency and concurrency.
The higher the consistency, the lower the concurrency.
questioner
Почему просто не сделать все транзакции абсолютно изолированными(serializable)?

это и будет "истребить concurrency"
serializable будет держать S до конца транзакции.
допустим, это какая-то покупка чего-то
и 2 покупателя одновременно смотрят на один и тот же товар,
собираясь приобрести.
при попытке покупки(изменения этой строки) будет deadlock
т.к. пока один из них не отпустит S, второй не получит X,
но второй сам ждет, пока первый S отпустит --> deadlock
14 окт 15, 23:56    [18280517]     Ответить | Цитировать Сообщить модератору
 Re: Зачем нужны уровни изоляции транзакции?  [new]
questioner
Member

Откуда:
Сообщений: 1906
Glory
questioner
пропущено...


слышал.

После ответа на этот вопрос у меня спросили.

Ну а зачем эти уровни то вообще нужны?

и я подзавис...не отвис до сих пор.

Зачем вам на дисплее 65млн оттенков цветов, если для передачи изображения достаточно двух ?


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

Не вижу аналогии с уровнями изоляции
15 окт 15, 00:17    [18280552]     Ответить | Цитировать Сообщить модератору
 Re: Зачем нужны уровни изоляции транзакции?  [new]
ViPRos
Member

Откуда:
Сообщений: 9944
questioner
Разница в уровнях изоляции мне понятна. Но встал вопрос а зачем это всё вообще надо?

Почему просто не сделать все транзакции абсолютно изолированными(serializable)?

Не смог найти материала на эту тему.

Дело в перфомансе?

ДА!
15 окт 15, 00:18    [18280553]     Ответить | Цитировать Сообщить модератору
 Re: Зачем нужны уровни изоляции транзакции?  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 8805
questioner,
если бы сервер имел бесконечную производительность, то можно было бы забить. Дело в конфликтах блокировок, которые возникают из-за присутствия времени их удержания.
Если подозрение, что Вы не понимаете физического смысла serializable блокировок. Наверное, думаете, что ни идут параллельно и независимо.
15 окт 15, 00:25    [18280565]     Ответить | Цитировать Сообщить модератору
 Re: Зачем нужны уровни изоляции транзакции?  [new]
Glory
Member

Откуда:
Сообщений: 104751
questioner
Glory
пропущено...

Зачем вам на дисплее 65млн оттенков цветов, если для передачи изображения достаточно двух ?


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

Не вижу аналогии с уровнями изоляции

Да что вы говорите ?
Ваш глаз различает все 65 млн оттенков ?
И чем вы мереяте "красивость" ? И что насчет производительности отображения 65 млн проти 2х ?

Сообщение было отредактировано: 15 окт 15, 08:12
15 окт 15, 08:11    [18280874]     Ответить | Цитировать Сообщить модератору
 Re: Зачем нужны уровни изоляции транзакции?  [new]
invm
Member

Откуда: Москва
Сообщений: 9825
Владислав Колосов
Если подозрение, что Вы не понимаете физического смысла serializable блокировок. Наверное, думаете, что ни идут параллельно и независимо.
А что такое "serializable блокировки"?
15 окт 15, 10:37    [18281469]     Ответить | Цитировать Сообщить модератору
 Re: Зачем нужны уровни изоляции транзакции?  [new]
o-o
Guest
invm
Владислав Колосов
Если подозрение, что Вы не понимаете физического смысла serializable блокировок. Наверное, думаете, что ни идут параллельно и независимо.
А что такое "serializable блокировки"?

это блокировки, удерживаемые до конца транзакции и с предотвращением появления возможных фантомов.
а что, хороший укорачивающий термин,
я люблю докопаться до употребления левых слов не по делу, но вроде сейчас все понятно, о чем речь.
но можно и развернуто:
Paul White
SQL Server happens to use a locking implementation of the serializable isolation level,
where physical locks are acquired and held to the end of the transaction
(hence the deprecated table hint HOLDLOCK as a synonym for SERIALIZABLE).

This strategy is not quite enough to provide a technical guarantee of full serializability,
because new or changed data could appear in a range of rows previously processed by the transaction.
This concurrency phenomenon is known as a phantom, and can result in effects which could not have occurred in any serial schedule.

To ensure protection against the phantom concurrency phenomenon,
locks taken by SQL Server at the serializable isolation level may also incorporate key-range locking
to prevent new or changed rows from appearing between previously-examined index key values.
Range locks are not always acquired under the serializable isolation level;
all we can say in general is that SQL Server always acquires sufficient locks
to meet the logical requirements of the serializable isolation level.

Serializable Implementations
15 окт 15, 11:17    [18281691]     Ответить | Цитировать Сообщить модератору
 Re: Зачем нужны уровни изоляции транзакции?  [new]
invm
Member

Откуда: Москва
Сообщений: 9825
o-o
это блокировки, удерживаемые до конца транзакции и с предотвращением появления возможных фантомов.
Не существует специальных serializable-блокировок. Есть TIL serializable, для обеспечения которого применяются различные виды блокировок.
Один и тот же вид блокировки может быть использован для различных TIL и удерживаться до конца транзакции.
И по факту наличия такой блокировки невозможно определить TIL этой транзакции.

И уж тем более нет никаких ограничений для нескольких одновременных serializable транзакций накладывать блокировки на один и тот же ресурс, если эти блокировки совместимы.
15 окт 15, 11:46    [18281888]     Ответить | Цитировать Сообщить модератору
 Re: Зачем нужны уровни изоляции транзакции?  [new]
o-o
Guest
о блин, я где-то говорю что ли,
что это такой "спец. тип"?
это S до конца транзакции + key-range locking,
но если это непонятно, вызывает неоднозначность
или просто не нравится термин-сокращалово,
то не используйте.

когда я говорю: "сервер пишет в лог",
я имею в виду transaction log, а не errorlog,
и покуда это всем ясно из контекста, все ок.
но если разговор происходит в среде чайников или педантов, то да,
крайне необходимо все называть своими именами.
а если спец.термина нет, то употреблять вон ту мою цитату выше
вместо "serializable-блокировки", а то себе дороже.
invm
И уж тем более нет никаких ограничений для нескольких одновременных serializable транзакций накладывать блокировки на один и тот же ресурс, если эти блокировки совместимы.

это что, тоже где-то у меня "между строк" написано?
покажите!
15 окт 15, 12:06    [18282018]     Ответить | Цитировать Сообщить модератору
 Re: Зачем нужны уровни изоляции транзакции?  [new]
invm
Member

Откуда: Москва
Сообщений: 9825
o-o
это S до конца транзакции + key-range locking,
но если это непонятно, вызывает неоднозначность
или просто не нравится термин-сокращалово,
то не используйте.
Ок, берем пример:
use tempdb;
go

create table dbo.t (id int constraint PK_t primary key clustered, v int);
insert into dbo.t values (1, 1);
go

set transaction isolation level serializable;
begin tran;
select * from dbo.t where id = 1;
exec sp_lock @@spid;
commit;
go

set transaction isolation level repeatable read;
begin tran;
select * from dbo.t where id = 1;
exec sp_lock @@spid;
commit;
go

drop table dbo.t;
go
В обоих случаях будем иметь S до конца транзакции на строку с id = 1. И никаких range-locks.
По каким критериям определить, что "S до конца транзакции" однозначно определяет сериализабельность это транзакции?
15 окт 15, 12:32    [18282134]     Ответить | Цитировать Сообщить модератору
 Re: Зачем нужны уровни изоляции транзакции?  [new]
o-o
Guest
"до конца транзакции" это *как минимум* repeatable read.
а про range-locks было написано MAYBE
o-o

locks taken by SQL Server at the serializable isolation level may also incorporate key-range locking
to prevent new or changed rows from appearing between previously-examined index key values.
Range locks are not always acquired under the serializable isolation level;

итого.
есть предложенный Колосовым термин-сокращение
и моя *полная цитата*, к к-ой не прикопаешься.
какого мне больше всех сдалось чужой термин защищать?
мне понятно, о чем товарищ, я на этом успокоюсь.
предлагаю перевести стрелки на автора термина и спорить с ним о некорректности
15 окт 15, 13:31    [18282460]     Ответить | Цитировать Сообщить модератору
 Re: Зачем нужны уровни изоляции транзакции?  [new]
invm
Member

Откуда: Москва
Сообщений: 9825
o-o
"до конца транзакции" это *как минимум* repeatable read.
Ок, переиначим пример:
use tempdb;
go

create table dbo.t (id int constraint PK_t primary key clustered, v int);
insert into dbo.t values (1, 1);
go

set transaction isolation level serializable;
begin tran;
select * from dbo.t with (updlock) where id = 1;
exec sp_lock @@spid;
commit;
go

set transaction isolation level read committed;
begin tran;
select * from dbo.t with (updlock) where id = 1;
exec sp_lock @@spid;
commit;
go

drop table dbo.t;
go

Итого. Serializable-блокировками можно назвать range-блокировки, да и то не все. Только непонятно зачем нужен новый неоднозначный термин.
15 окт 15, 13:51    [18282634]     Ответить | Цитировать Сообщить модератору
 Re: Зачем нужны уровни изоляции транзакции?  [new]
o-o
Guest
invm,
Картинка с другого сайта.
15 окт 15, 14:04    [18282742]     Ответить | Цитировать Сообщить модератору
 Re: Зачем нужны уровни изоляции транзакции?  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 8805
Замечательно, все поняли о чем я написал, но снобизм перевесил. Просто у меня возникло подозрения, что автор serializable поведению приписывает свойства snapshot.
15 окт 15, 14:16    [18282819]     Ответить | Цитировать Сообщить модератору
 Re: Зачем нужны уровни изоляции транзакции?  [new]
o-o
Guest
Владислав Колосов
Замечательно, все поняли о чем я написал, но снобизм перевесил

Может, кому-то тема кажется "сухой" без картинок, а кому-то без кода, вот и освежили
15 окт 15, 14:22    [18282877]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить