Dmitry67 wrote:А при каких случаях для rollback вообще надо кого то ждать кроме диска ?
Когда, например, при rollback приходится делать page split.
tengiz wrote:По теперешним временам если что-то всерьёз переделывать, то сразу на страницы переменного размера, а не просто дать возможность выбирать из нескольких фиксированных. И это заметно усложнит код, которые занимается выделением места на дисках, а также и buffer manager. Но оно того будет стоить, с моей точки зрения.
tengiz wrote:Когда, например, при rollback приходится делать page split.
Merle wrote:Хм... А что имеется ввиду под переменым размером?
Но в этом случае уже работают всяческие низкоуровневые latch'и и прочие spin lock'и, которые deadlock-монитором не отслеживаются, и если бы в этом месте был баг, то он вылезал бы не только при rollback'ах, но и в других местах...?
tengiz wrote:Поэтому страница БД умещающаяся на целую дисковую дорожку для специальных случаев, когда делается много последовательных сканов или последовательных записей - вполне реальная идея.
tengiz wrote:Нет это не так. deadlock-монитор на самом деле ослеживает не только собственно блокировки - alex_127 может много про это интересного рассказать.
tengiz wrote:Merle wrote:Хм... А что имеется ввиду под переменым размером?
Переменный - значит меняющийся в течение времени жизни страницы. Разумеется, при этом размер должен быть "хорошим", т.е. кратным размеру дискового кластера. Смысл в том, что для современных дисков записать целую дорожку и записать несколько секторов - в среднем примерно одно и то же по затратам. Поэтому страница БД умещающаяся на целую дисковую дорожку для специальных случаев, когда делается много последовательных сканов или последовательных записей - вполне реальная идея.
.............
YellowMan wrote:Просим, просим ! Deadlocks for dummies, please !
Ведь для того чтобы что-то изменить, надо что-то залочить. И не факт что сервер еще держит необходимые локи на объекте. Значит ему надо будет изменить тип блокировки. Значит теоретически возможен deadlock ?
zVlad wrote:Если транзакция еще не завершилась, то безусловно держит, и раз смог получить значит ситуация дедлока не возникла, и следовательно не возникнет при откате - все нужные для этого ресурсы залочены нужным образом.
tengiz wrote:zVlad wrote:Если транзакция еще не завершилась, то безусловно держит, и раз смог получить значит ситуация дедлока не возникла, и следовательно не возникнет при откате - все нужные для этого ресурсы залочены нужным образом.
Почитайте про системные транзакции и про ARIES - метод журналирования транзакций, придуманный Моханом из IBM в начале 90-х и который используется в DB2 и SQL Server. Там всё написано, в том числе когда и зачем может понадобиться залочить доволнительные ресурсы при откате.
zVlad wrote:Спасибо за совет, Tengiz, но в данном случае я не вижу нужды так глубоко копать. Я лишь поправил соучастника дискуссии в его неверном предположении, что в пределах транзакции модифицированные данные могут быть освобождены...
...и что для отката их понадобится снова лочит а это может вызвать дэдлок.
Да и вообще, мы кажется ждем признаного специалиста для получения авторитетного объяснения. Он не появляется - вот я и внес свои 5 копеек.
tengiz wrote:zVlad wrote:Спасибо за совет, Tengiz, но в данном случае я не вижу нужды так глубоко копать. Я лишь поправил соучастника дискуссии в его неверном предположении, что в пределах транзакции модифицированные данные могут быть освобождены...
Могут.
......
zVlad wrote:Maybe. But this is not a case for DB2.
tengiz wrote:zVlad wrote:Maybe. But this is not a case for DB2.
I doubt it because C.Mohan is one of the top database authorities that happen to work for IBM and he is the one who invented ARIES (among other very clever things that DB/2 has been using for ages.) I would be really surprized if DB/2 doesn't use ARIES algorithm in logging/recovery.
zVlad wrote:Tengiz, кончайте темнить и ссылаться на авторитеты. Если у Вас есть конкретный сценарий - вынимайте и обыграем его, если это возможно.
Я исхожу из того что знаю о транзакции, как это определено в DB2. Я был бы шокирован узнав, что на самом деле DB2 "отпускает" модифицированные данные до окончания транзакции, до оператора COMMIT. Я запускал UPDATE с уровнем изоляции CS для модификации 200-т строк и наблюдал 200 эксклюзивных замков.
tengiz wrote: I would be really surprized if DB/2 doesn't use ARIES algorithm in logging/recovery.
tengiz wrote: Но для дедлока абсолютно всё равно на чём он случится - на ожиданиях на пользовательских логических данных (индексные ключи или строки) или на низкоуровневых физических системых данных.
tengiz wrote:В общем - читайте статью Мохана про ARIES.