tengiz wrote:zVlad,
Позволю себе оставить без комментариев большую часть Ваших замечаний. Повторяться мне не хотелось бы. Насчёт остального:
- Полноценный RLL (row level locking) в SQL Server появился в версии 7 (1998), после того, как размер страницы стал 8K (был 2K), а в версии 6.5 (1995) был ограниченный вариант - insert row level locking.
- Честное слово, неудобно задавать этот вопрос, но, теме не менее - что такое, по-Вашему, deadlock detection?
- когда в CS курсор сходит со строки - может ли она быть изменена другими транзакциями? Дополнительный вопрос - зачен нужен курсор, если читается ровно одна строка?
- наличие или отсутствие эскалации блокировок никого по большому счёту не интересует. Главный вопрос в том, заткнётся ли сервер от недостатка ресурсов если почему-то понадобится наложить очень много блокировок? И здесь нет однозначного ответа, какой сервер лучше. Во-первых, ORACLE накладывает только X блокировки, в отличие от DB2. Во-вторых, у ORACLE действительно есть ограничение на максимальное количество транзакций, интересующихся строками в одной и той же странице. Но зато отсутствуют физические ограничения на общее количество X блокировок. У DB2 - всё наоборот: есть физической ограничение на общее количество блокировок, причём любых видов, а не только X, но нет никаких ограничений страничного уровня. И что по-Вашему лучше? Автор намекет, что DB2, разумеется лучше - вот это и есть поверхностный халтурный анализ.
Насчёт 4 страниц из 80 с лишним - да я на самом деле внимательно прочитал только эти 4, просто потому что остальное лично мне уже мало интересно. Как Вы думате, концентрация ляпов на оставшихся страницах намного ниже или мне просто невероятно повезло нарваться на самый смак?
Что такое deadlock detection ф толком не знаю. Т.е. внешнее описание как это работает, но как это реализованно, да еще в разных БД - ни малейшего понятия. Вы тут с vc на эту тему обменивались. Я толко понял, что Вы Tengiz подсвечивали какие-то слабые стороны Оракл, а vc (в вашей с ним последней дискуссии) поддел Вас. Кстати, а почем получается deadlock когда RR? Вроде бы не должно быть?
"Когда в CS курсор сходит со строки - она быть изменена другими транзакциями". Так определен этот уровень изоляции в DB2 и поверьте мне он широко и эффективно используется.
Насчет эскалации уровня блокирования я хотел бы с Вами согласиться, если бы не те обстоятельства, что в DB2 есть контроль за количеством замков запрошенным одним юзером - при превышении - смерть. Также есть контроль за количеством замков наложенных на одну таблицу - при превышении - эскалация уровня - вот тут мои подзащитные прокололись - совершенно не имеющая смысла в Оракловском подходе. Иными словами до того как общий ресурс под замки будет исчерпан DB2 много что попытается сделать. В Оракле же тупое обновление одной и той же записи, но большим количеством транзакций, может выйти боком. Таким образом у DB2 одно узкое место (которое насамом деле весьма широко) - общая память под все замки, у Оракла же узких мест столько сколько страниц в базе, но очень узких.
Если говорить не о количестве, а о значении выявленных Вами ляпов, то я бы сказал, что эти ляпы (и другие возможные) на цели и задачи стоявшие перед статьей не оказывают особого влияния. Перевод в любом случае предмет не теоритических рассуждений , а практического воплощения. И в этом смысле статья полезная и правильная.