Переключение на Главную Страницу Страницы: 1 ОтправитьПечать
Обычная тема Блокировка объектов при выполнении SQL запроса (число прочтений - 2888 )
RomanS
YaBB Newbies
*
Отсутствует


I Love YaBB 2!

Сообщений: 3
Зарегистрирован: 07. Декабря 2006
Блокировка объектов при выполнении SQL запроса
07. Декабря 2006 :: 07:46
Печать  
При выполнении длительного прямого SQL запроса методом "ВыполнитьИнструкцию" происходит блокировка объектов 1С - в основном журнала документов (_1SJOURN)  Печаль
Не подскажите как можно это обойти или исправить?
Запросы формируется по регистрам остатков и движений, изменение БД не происходит, длительность формирования около 1-2 минуты.
В БД около 50 пользователей, одновременно работает 30.
1С 25, SQL 2000 SP3, 1C++ Nightly build 2006-10-25 v 2.5.0.0
  
Наверх
 
IP записан
 
Славко
Senior Member
****
Отсутствует



Сообщений: 467
Местоположение: Украина, г. Днепропетровск
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Блокировка объектов при выполнении SQL запроса
Ответ #1 - 07. Декабря 2006 :: 07:47
Печать  
а ты текст запроса покажи
  

Ламер, самый обычный ламер...    сначала мы ...   а потом мы ...
Наверх
wwwICQ  
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3050
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: Блокировка объектов при выполнении SQL запроса
Ответ #2 - 07. Декабря 2006 :: 08:17
Печать  
_1SJOURN (nolock)
  

1&&2&&3
Наверх
 
IP записан
 
RomanS
YaBB Newbies
*
Отсутствует


I Love YaBB 2!

Сообщений: 3
Зарегистрирован: 07. Декабря 2006
Re: Блокировка объектов при выполнении SQL запроса
Ответ #3 - 07. Декабря 2006 :: 08:47
Печать  
Запрос:
Код
Выбрать все
Select
	Рег.Клиент as [Клиент $Справочник.Контрагенты],
	Рег.Договор as [Договор $Справочник.Договора],
	Рег.КредДокумент as [Докум $Документ],
	Рег.СтавкаНДС as [НДС $Справочник.СтавкиНДС],
	-(Рег.ДолгОстаток) as Долг,
	Cast(Left(Жур.Date_Time_IdDoc,8) as DateTime) as Дата,
	$СпрД.Вид as [ВидДоговора $Перечисление.ВидыДоговоров],
	ДокР.Удаление as Удаление,
	Жур.IdDocDef as Док_вид
From
	$РегистрОстатки.Платежи(:НачДата,,,
	(Клиент,Договор,КредДокумент,СтавкаНДС),
					(Долг)) as Рег
Inner Join
	$Справочник.Договора as СпрД On СпрД.ID = Рег.Договор
Inner Join
	(Select
		0 as Удаление,
		$ВидДокумента36.Взаиморасчет as ВидДок,
		ДокВзаиморасчет.IdDoc as ДокумДвижения
	From
		$Документ.Взаиморасчет As ДокВзаиморасчет

	Union all
....
	Union all
	Select
		1 as Удаление,
		$ВидДокумента36.РасходнаяВино as ВидДок,
		ДокРасходнаяВино.IdDoc as ДокумДвижения
	From
		$Документ.РасходнаяВино As ДокРасходнаяВино
	Where
	     $ДокРасходнаяВино.ПризнакНакладной = $Перечисление.ПризнРасхНакл.ВнутреннееПеремещение
) as ДокР On ДокР.ДокумДвижения = Right(Рег.КредДокумент,9)

Inner Join
	_1Sjourn as Жур On Жур.IdDoc = Right(Рег.КредДокумент,9)
					and Жур.Date_Time_IdDoc < :НачДата
					and Жур.Closed & 1 = 1
Where
	(Рег.ДолгОстаток != 0)
	and (Клиент in (Select Val From #СписокКлиентов))

Union All
Select
	$Рег.Клиент as [Клиент $Справочник.Контрагенты],
	$Рег.Договор as [Договор $Справочник.Договора],
	ДокР.ВидДок + Рег.IdDoc as [Докум $Документ],
	$Рег.СтавкаНДС as [НДС $Справочник.СтавкиНДС],
	$Рег.Долг as Долг,
	Cast(Left(Жур1.Date_Time_IdDoc,8) as DateTime) as Дата,
	$СпрД.Вид as [ВидДоговора $Перечисление.ВидыДоговоров],
	ДокР.Удаление as Удаление,
	Жур1.IdDocDef as Док_вид

From
	$Регистр.Взаиморасчеты as Рег

Inner Join
	$Справочник.Договора as СпрД On СпрД.ID = $Рег.Договор
Inner Join
	(Select
		0 as Удаление,
		$ВидДокумента36.Взаиморасчет as ВидДок,
		ДокВзаиморасчет.IdDoc as ДокумДвижения
	From
		$Документ.Взаиморасчет As ДокВзаиморасчет
	Union all
....
	Union all
	Select
		1 as Удаление,
		$ВидДокумента36.РасходнаяНакладная as ВидДок,
		ДокРасходнаяНакладная.IdDoc as ДокумДвижения
	From
		$Документ.РасходнаяНакладная As ДокРасходнаяНакладная
	Where
	     $ДокРасходнаяНакладная.ПризнакНакладной = $Перечисление.ПризнРасхНакл.ВнутреннееПеремещение
) as ДокР On ДокР.ДокумДвижения = Рег.IdDoc
Inner Join
	_1Sjourn as Жур1 On Жур1.IdDoc = Рег.IdDoc
					and (Жур1.IdDoc = ДокР.ДокумДвижения)
					and (Жур1.Date_Time_IdDoc Between :НачДата and :КонДата~)
					and (Жур1.Closed & 1 = 1)
Where
	($Рег.Долг != 0)
	and (Рег.Date_Time_IdDoc between :НачДата and :КонДата~)
	and (Рег.Debkred = 1)
	and ($Рег.Клиент in (Select Val From #СписокКлиентов))
 

  
Наверх
 
IP записан
 
Славко
Senior Member
****
Отсутствует



Сообщений: 467
Местоположение: Украина, г. Днепропетровск
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Блокировка объектов при выполнении SQL запроса
Ответ #4 - 07. Декабря 2006 :: 10:16
Печать  
что и требовалось доказать...
как сказал trad, примени (nolock) для всех таблиц, а то у тебя боликируются все объекты, а не только в основном журнала документов...
  

Ламер, самый обычный ламер...    сначала мы ...   а потом мы ...
Наверх
wwwICQ  
IP записан
 
RomanS
YaBB Newbies
*
Отсутствует


I Love YaBB 2!

Сообщений: 3
Зарегистрирован: 07. Декабря 2006
Re: Блокировка объектов при выполнении SQL запроса
Ответ #5 - 07. Декабря 2006 :: 11:47
Печать  
спасибо! заработало  Очень довольный
  
Наверх
 
IP записан
 
villy
Senior Member
****
Отсутствует



Сообщений: 287
Зарегистрирован: 24. Мая 2006
Пол: Мужской
Re: Блокировка объектов при выполнении SQL запроса
Ответ #6 - 11. Декабря 2006 :: 09:55
Печать  
еще, имхо, можно в начале запроса прописать "set transaction isolation level read uncommitted" и не проставлять nolock по всем таблицам
  
Наверх
IP записан
 
Переключение на Главную Страницу Страницы: 1
ОтправитьПечать