![]() |
#14 |
Участник
|
Цитата:
Сообщение от Logger
Torin, мне кажется что вы невнимательно прочитали вопрос. Подобная проблема по идее должна возникать и в SQL2000
Движок базы данных не важен. Если перебор идет по номерам строк, а товары набивались в разном порядке то в заказе 1 номенклатуры могут перебираться так Номенклатура1 затем Номенклатура2 а в заказе 2 : Номенклатура2 затем Номенклатура1 Очевидно что независимо от базы данных при интенсивной работе вероятность мертвой блокировки высока. А если при переборе строк сортировать по ItemId то мертвой блокировки возникнуть не может. Вопрос в том почему в Аксапте стоит сортировка по LineNum. Из соображений оптимизации производительности напрашивается сортировка по ItemId. 1) Реализация оптимизаторов настолько разная, что лучьше разбираться отдельно, и не держать " в уме" 2) Обход SalesLine по LineNum, кстати, очень логичен ;-) - все транзации движуться в одном направлении. 3) Вопрос в том, каким должен быть обход InventSum - очевидно, совсем другим ;-), как правильно замечено по аналитикам. Тут, конечно, сразу предполагаем, что а) Блокируються и индексы и страницы данных поразному б) Какие индексы, собственно, есть, потому что блокируються все (или нет - зависит от базы) в) Каков план доступа к записи (если неправильный индекс, то дольше транзация и меньше параллелизм) Например, у меня в InventSum есть индекс DATAAREAID (ASC), ITEMID (ASC), INVENTDIMID (ASC) Используется ли он ? Я не знаю. кластерного нет, хинтов нет, значит решает оптимизатор. Какой он выбрал ?. Какие еще индексы заблокируються ? Что именно заблокировано ? Последний, вопрос, кстати, самый важный - на чем дедлок ловиться. Посмотрите - подумаем дальше. |
|