27.08.2008, 15:00 | #1 |
Участник
|
вопрос к опытным оптимизаторам производительности Nav:
Имеем клиента Nav 4.0 SP3 и БД на MS SQL 2000, страдаем от эскалации блокировок и следующих за ней дедлоков. Терпимо, но неприятно Начиная с Nav 4.0 SP2, MS добавил в таблицу $ndo$dbproperty поле hardrowlock (в интерфейсе клиента доступно через Файл->База Данных->Изменить, закладка Дополнительно, флажок "Блокировка строк - всегда"). В хелпе сказано Цитата:
Блокировка строк — всегда: этот параметр позволяет указать, чтобы в Navision всегда использовалась блокировка на уровне строк, а не блокировка на уровне страниц и таблиц
Флажок я поставил, perfmon'ом смотрю счетчики SQLServer:MemoryManager:Lock Memory(KB) (вырос после установки флажка) и SQLServer:Locks:Number of Deadlocks/sec (вроде упал, но т.к. наблюдаю с сегодняшнего утра, выводы делать рано). Кто-нибудь имеет положительный опыт от установки данного флажка при использовании MS SQL 2000? |
|
28.08.2008, 02:43 | #2 |
Administrator
|
далеко не весь функционал Nav блокирует таблицы при работе. найдите проблемные участки и попробуйте их разнести либо организационно, либо на уровне системы.
|
|
28.08.2008, 10:08 | #3 |
Участник
|
Цитата:
Общей информации по борьбе с блокировками/дедлоками на этом форуме достаточно. |
|
29.08.2008, 11:17 | #4 |
Участник
|
Счетчики - это, конечно, хорошо.. А что говорят пользователи? Как там одновременный учет документов разными юзерами?
Цитата:
Еще для всех индексов принудительно ставится флаг AllowRowLocks = TRUE. Этот флаг принуждает оптимизатор SQL сервера ВСЕГДА использовать блокировку на уровне строк в обход других блокировок. Вообще говоря, обход оптимизатора делать не рекомендуют, так как в разных случаях доступа к данным таблицы может использоваться РАЗНЫЙ механизм блокировок. Таким образом, в одном случае Вас спасет флаг, а в других сделает только хуже. Например, блокировка на уровне строк может крайне плачевно сказаться на отчетности.
__________________
"И лишь патологоанатом не берет работу на дом" (с) Вишневский |
|
29.08.2008, 14:36 | #5 |
Участник
|
Цитата:
Сообщение от FoxSoft2005
Счетчики - это, конечно, хорошо.. А что говорят пользователи? Как там одновременный учет документов разными юзерами?
Данная галка всего-лишь добавляет хинт ROWLOCK к некоторым запросам. Еще для всех индексов принудительно ставится флаг AllowRowLocks = TRUE. Этот флаг принуждает оптимизатор SQL сервера ВСЕГДА использовать блокировку на уровне строк в обход других блокировок. Вообще говоря, обход оптимизатора делать не рекомендуют, так как в разных случаях доступа к данным таблицы может использоваться РАЗНЫЙ механизм блокировок. Таким образом, в одном случае Вас спасет флаг, а в других сделает только хуже. Например, блокировка на уровне строк может крайне плачевно сказаться на отчетности. А что могут говорить пользователи, кроме как "ничивонеработаит" даже тогда, когда система летает? Одновременный учет идет не хуже чем до установки галки, но в час пик все равно проскакивают единичные дедлоки (вижу сам на соседнем мониторе с перфмоном, он постоянно перед глазами). В целом система работает вполне удовлетворительно, но с появлением свободного времени сделаю следующее (в порядке убывания приоритета): 1. апгрейд на SQL 2005 и на некоторых таблицах ALTER INDEX...SET(ALLOW_PAGE_LOCKS=OFF) 2. внимательный анализ кода, изменяющего таблицы, на которых рубятся дедлоки. Есть подозрение, что где-то блокируется больший набор записей, чем нужно для текущей транзакции. 3. применю методики, описанные в этой статье: http://dynamicsuser.net/blogs/stryk/archiv...sql-server.aspx |
|
03.09.2008, 13:04 | #6 |
Участник
|
Цитата:
1. апгрейд на SQL 2005 и на некоторых таблицах ALTER INDEX...SET(ALLOW_PAGE_LOCKS=OFF)
Цитата:
2. внимательный анализ кода, изменяющего таблицы, на которых рубятся дедлоки. Есть подозрение, что где-то блокируется больший набор записей, чем нужно для текущей транзакции.
Цитата:
3. применю методики, описанные в этой статье:
http://dynamicsuser.net/blogs/stryk/archiv...sql-server.aspx
__________________
"И лишь патологоанатом не берет работу на дом" (с) Вишневский |
|