Показать сообщение отдельно
Старый 10.02.2015, 14:30   #13  
gl00mie is offline
gl00mie
Участник
MCBMSS
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,684 / 5788 (200) ++++++++++
Регистрация: 28.11.2005
Адрес: Москва
Записей в блоге: 3
Цитата:
Сообщение от Kabardian Посмотреть сообщение
На виртуальной машине (5GB оперативной) установлена AX 2012 R3 CU8, компиляция длилась около 9-10 часов с 6 сессиями
Памяти маловато для 2012 R3, те же перекрестные ссылки, думаю, могут вообще не построиться.
Цитата:
Сообщение от Kabardian Посмотреть сообщение
последние 1-2 часа компиляция шла крайне медленно и загрузка CPU снизилась до 0, только SQL грузил процессор на 25%. В итоге, на 4-м проходе, в одной из сессий появилась ошибка: Cannot execute a stored procedure. Deadlock, where one or more users have simultaneously locked the whoe table or part of it.
Надо оптимизировать использование памяти. Во-первых, может, это и очевидно, но все же: на время компиляции с использованием AXBuild имеет смысл останавливать службу AOS. Она для мгногопоточной компиляции абсолютно не нужна - только память впустую отжирает. Затем надо умерить аппетиты SQL Server, выставив ему maximum server memory в какое-нить вменяемое значение (скажем, 1 Гб), и, вероятно, отключить эскалацию блокировок. Это - опасный шаг, который может приводить к ошибкам при выполнении запросов, если окажется, что для запроса нужна блокировка, а памяти на нее у SQL Server уже не осталось, но в данном случае стоит рискнуть. См. также
SQL Server Trace Flags for Dynamics AX
SQL Server Lock Escalation and Blocking
В-третьих, надо очень аккуратно рассчитывать число потоков компиляции исходя из доступной памяти. По моим наблюдениям, на 2-м проходе AOS'ы, выполняющие компиляцию, отъедают чуть больше 0.5 Гб private working set, причем чем их меньше, тем больше памяти потребляет каждый. Таким образом, для 6-и потоков должно быть доступно как минимум 3 Гб, а если на виртуалку отведено всего 5, при этом их делят винды, SQL Server и AOS'ы, то нужно явно ограничивать хотелки SQL Server, чтобы 6 AOS'ов могли нормально доработать. Иначе они начнут отваливаться из-за недостатка памяти, AXBuild начнет ругаться, что у него отваливаются "ноги" (legs) и в итоге компиляция преждевременно завершится с ошибкой.
В общем, я бы лично попробовал выделить виртуалке, скажем, 6-6.5 Гб из 8-и доступных (если компиляция идет на ноуте с 8 Гб памяти) - хотя бы на время компиляции.
За это сообщение автора поблагодарили: Logger (3), alex55 (1), Kabardian (2).