AXForum  
Вернуться   AXForum > Microsoft Dynamics NAV > NAV: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 27.09.2005, 15:22   #1  
DeSp is offline
DeSp
Участник
 
41 / 10 (1) +
Регистрация: 27.09.2005
Две сессии намертво лочат друг друга, при этом клиенты повисают пока принудительно вручную не убивается одна из сессий.
Используется SQL Server 2k и LOCKTABLE(true,false).

В чем может быть проблема?
Старый 27.09.2005, 16:16   #2  
Wizard_imported is offline
Wizard_imported
Участник
 
157 / 10 (1) +
Регистрация: 25.11.2004
описан не дедлок. Когда действительно мертвая блокировка, SQL сам отрубает одну из транзакций, в результате чего пользователь получает сообщение типа "Ваше действие было заблокировано другим пользователем", в английской версии этого сообщения явно упоминается слово Deadlock.

Кто параметры к LOCKTABLE написал? попробуйте убрать
пусть будет просто LOCKTABLE;
Старый 27.09.2005, 16:28   #3  
DeSp is offline
DeSp
Участник
 
41 / 10 (1) +
Регистрация: 27.09.2005
Если это не деадлок, то что?
Старый 27.09.2005, 16:48   #4  
Wizard_imported is offline
Wizard_imported
Участник
 
157 / 10 (1) +
Регистрация: 25.11.2004
просто лок, не дед...
возможно, конечно, что у вас как-то время ожидания в SQL настроено так, что в ситуацию долго не вмешивается сервер. К сожалению, я плох в администрировании SQL, может кто ещё подскажет...
Старый 27.09.2005, 17:39   #5  
DeSp is offline
DeSp
Участник
 
41 / 10 (1) +
Регистрация: 27.09.2005
Я тоже не силен в администрировании SQL Server.
Как можно узнать время ожидания сервера перед принудительным отключением клиентов для разрешения дедлока?
В моем случае сервер не вмешивается в ситуацию на протяжении 15 минут, а дальше неизвестно, так как уже в ручную отключаются клиенты.
Старый 28.09.2005, 10:05   #6  
Alterant is offline
Alterant
Участник
 
378 / 10 (1) +
Регистрация: 31.03.2004
Функциональность стандартная (какая?) или своя?
Старый 28.09.2005, 13:17   #7  
DeSp is offline
DeSp
Участник
 
41 / 10 (1) +
Регистрация: 27.09.2005
Функциональность - управление складом: стандартная и самописная (складской контроль).

И все-таки есть ли параметр, отвечающий за время, через которое сервер отключит один из блокируемых процессов автоматически?
Старый 28.09.2005, 17:28   #8  
Константин! is offline
Константин!
Участник
 
180 / 10 (1) +
Регистрация: 13.04.2005
Адрес: Казань
Кажется для SQL Servera

SET LOCK_TIMEOUT время в мили сек

посмотри здесь http://rsdn.ru/article/db/mssqllocks.xml?print

А вобще Microsoft советует дождатся 4.1 там многие проблемы связаные с SQL говорят будут решены
Старый 28.09.2005, 18:12   #9  
Alterant is offline
Alterant
Участник
 
378 / 10 (1) +
Регистрация: 31.03.2004
Цитата:
Сообщение от DeSp
Функциональность - управление складом: стандартная и самописная (складской контроль).

И все-таки есть ли параметр, отвечающий за время, через которое сервер отключит один из блокируемых процессов автоматически?
Рекомендую Вам прочитать документы:
Performance Troubleshooting Guide for Microsoft® Business Solutions–Navision (есть на Tools CD)
Microsoft Business Solutions–Navision SQL Server Option Resource Kit (есть на Tools CD 4.0)

Там описаны рекомендации по программированию для избежания дедлоков и описание методики диагностики дедлоков.
Старый 29.09.2005, 09:19   #10  
DeSp is offline
DeSp
Участник
 
41 / 10 (1) +
Регистрация: 27.09.2005
Да, спасибо за рекомендации, эти документы я уже читал и методикой воспользовался. Дедлоки обнаружены, они возникают при одновременном запуске одной операции разными клиентами. Порядок блокировок при этом должен быть одинаковый раз операция одна и та же, но выполнение приводит к дедлоку, непонятно почему.
Старый 29.09.2005, 09:53   #11  
Wizard_imported is offline
Wizard_imported
Участник
 
157 / 10 (1) +
Регистрация: 25.11.2004
Какая операция?
Вам удается дедлок воспроизвести?
Старый 29.09.2005, 10:12   #12  
DeSp is offline
DeSp
Участник
 
41 / 10 (1) +
Регистрация: 27.09.2005
Да, дедлок удается воспроизвести.
Клиентами одновременно выполняется операция регистрации складского контроля. При этом возникают дедлоки по 3-м таблицам.
Старый 29.09.2005, 11:27   #13  
Wizard_imported is offline
Wizard_imported
Участник
 
157 / 10 (1) +
Регистрация: 25.11.2004
Цитата:
Сообщение от DeSp
Две сессии намертво лочат друг друга,
всё таки как вы это определяете?
маловероятно возникновение дедлока при параллельной работе одной и той же функции.
Кода много в этом складском контроле? мож глянуть...
Если неодновременно - функция быстро выполняется?
Старый 29.09.2005, 12:35   #14  
DeSp is offline
DeSp
Участник
 
41 / 10 (1) +
Регистрация: 27.09.2005
Определяется это просто - клиенты висят по 15 минут, пока вручную не обрубается один из них.
Операции регистрации могут быть длительными, но в разумных пределах - это явно не десятки минут.
Кода много.
Если неодновременно, то выполняется относительно быстро.
Я понимаю что это маловероятно, но это происходит слишком часто.
Старый 29.09.2005, 12:49   #15  
rmv is offline
rmv
Участник
 
481 / 11 (1) +
Регистрация: 15.02.2005
Какие именно таблицы блокируются?
Возможно из-за различного порядка блокировки таблиц в содеюнитах учета складских документов и в 80,90 кодеюните?
Старый 29.09.2005, 14:39   #16  
DeSp is offline
DeSp
Участник
 
41 / 10 (1) +
Регистрация: 27.09.2005
Таблицы:
Резервирование Операция
Склад Операция Строка
Склад Операция Заголовок

Так как выполняется одна и та же операция, но разными клиентами, порядок блокировок таблиц должен быть одинаковым.
Старый 29.09.2005, 15:39   #17  
Alterant is offline
Alterant
Участник
 
378 / 10 (1) +
Регистрация: 31.03.2004
Цитата:
Сообщение от DeSp
Таблицы:
Резервирование Операция
Склад Операция Строка
Склад Операция Заголовок

Так как выполняется одна и та же операция, но разными клиентами, порядок блокировок таблиц должен быть одинаковым.
А нет ли где в коде COMMITов, снимающих блокировки и затем опять LOCKов?
Старый 29.09.2005, 15:55   #18  
rmv is offline
rmv
Участник
 
481 / 11 (1) +
Регистрация: 15.02.2005
Транзакция A заблокировала таблицу 1 и пытается прочитать данные из таблицы 2. Одновремено тразнакция B заблокировала таблицу 2 и пытается прочитать данные из таблицы 1. Здесь и возникает deadlock.

DeSp - и не факт что в разных участках кода порядок блокировок таблиц не может поменяться .

Обратите внимание на commit в 5763 кодеюинте.
Старый 30.09.2005, 13:32   #19  
DeSp is offline
DeSp
Участник
 
41 / 10 (1) +
Регистрация: 27.09.2005
Ничего другого, как тщательно перелопатить весь код видимо не остается. А кода реально много и писал его не я.
Старый 30.09.2005, 13:51   #20  
rmv is offline
rmv
Участник
 
481 / 11 (1) +
Регистрация: 15.02.2005
Как вариант могу предложить все учитываемые документы ставить в очередь и учет текущего док-та проводить только после учета предыдущих.
 


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 12:56.