| 
			
			 | 
		#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?  | 
| 
	
 | 
| 
			
			 | 
		#2 | 
| 
			
			 Administrator 
		
			
	 | 
	
	
	
		
		
		
		 
			
			далеко не весь функционал Nav блокирует таблицы при работе. найдите проблемные участки и попробуйте их разнести либо организационно, либо на уровне системы.
		 
		
		
		
		
		
		
		
	 | 
| 
	
 | 
| 
			
			 | 
		#3 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 Цитата: 
	
Общей информации по борьбе с блокировками/дедлоками на этом форуме достаточно.  | 
| 
	
 | 
| 
			
			 | 
		#4 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Счетчики - это, конечно, хорошо.. А что говорят пользователи? Как там одновременный учет документов разными юзерами? 
		
		
		
		
		
		
			Цитата: 
	
Еще для всех индексов принудительно ставится флаг AllowRowLocks = TRUE. Этот флаг принуждает оптимизатор SQL сервера ВСЕГДА использовать блокировку на уровне строк в обход других блокировок. Вообще говоря, обход оптимизатора делать не рекомендуют, так как в разных случаях доступа к данным таблицы может использоваться РАЗНЫЙ механизм блокировок. Таким образом, в одном случае Вас спасет флаг, а в других сделает только хуже. Например, блокировка на уровне строк может крайне плачевно сказаться на отчетности. 
				__________________ 
		
		
		
		
	"И лишь патологоанатом не берет работу на дом" (с) Вишневский  | 
| 
	
 | 
| 
			
			 | 
		#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  | 
| 
	
 | 
| 
			
			 | 
		#6 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 Цитата: 
	
		
			1. апгрейд на SQL 2005 и на некоторых таблицах ALTER INDEX...SET(ALLOW_PAGE_LOCKS=OFF)
		
	 
Цитата: 
	
		
			2. внимательный анализ кода, изменяющего таблицы, на которых рубятся дедлоки. Есть подозрение, что где-то блокируется больший набор записей, чем нужно для текущей транзакции.
		
	 
 . Именно внимательный анализ кода. Иначе будет риск задвоения чего либо важного  .Цитата: 
	
		
			3. применю методики, описанные в этой статье: 
http://dynamicsuser.net/blogs/stryk/archiv...sql-server.aspx 
				__________________ 
		
		
		
		
	"И лишь патологоанатом не берет работу на дом" (с) Вишневский  | 
| 
	
 |