Переключение на Главную Страницу Страницы: [1]  ОтправитьПечать
Очень популярная тема (более 25 ответов) Блокировки (число прочтений - 8190 )
sml
Full Member
***
Отсутствует


I Love 1С++!

Сообщений: 186
Зарегистрирован: 28. Февраля 2008
Блокировки
03. Апреля 2008 :: 06:26
Печать  
После того, как я переделал форму списка справочника Номенклатура на прямые параметризированные запросы (с хинтом nolock), увеличилось количество блокировок пользователей 1С.
Может быть кто-то уже боролся с такой ситуевиной? Помогите, пожалуйста!!!  Плачущий
  
Наверх
 
IP записан
 
vip
1c++ power user
Отсутствует



Сообщений: 1570
Зарегистрирован: 19. Мая 2006
Re: Блокировки
Ответ #1 - 03. Апреля 2008 :: 06:34
Печать  
sml писал(а) 03. Апреля 2008 :: 06:26:
После того, как я переделал форму списка справочника Номенклатура на прямые параметризированные запросы (с хинтом nolock), увеличилось количество блокировок пользователей 1С.
Может быть кто-то уже боролся с такой ситуевиной? Помогите, пожалуйста!!!  Плачущий

Знать бы еще, как ты переделал.
Вопрос в стиле Мисты.
  
Наверх
ICQ  
IP записан
 
sml
Full Member
***
Отсутствует


I Love 1С++!

Сообщений: 186
Зарегистрирован: 28. Февраля 2008
Re: Блокировки
Ответ #2 - 03. Апреля 2008 :: 06:36
Печать  
vip писал(а) 03. Апреля 2008 :: 06:34:
Знать бы еще, как ты переделал.
Вопрос в стиле Мисты.


http://www.1cpp.ru/forum/YaBB.pl?num=1206686989/6#6
  
Наверх
 
IP записан
 
kiruha
1c++ power user
Отсутствует



Сообщений: 1249
Зарегистрирован: 11. Апреля 2007
Re: Блокировки
Ответ #3 - 03. Апреля 2008 :: 06:38
Печать  
ПоследнееЗначение - как реализовано в 1С++ ?
Случаем не хранимая процедура?
  
Наверх
 
IP записан
 
sml
Full Member
***
Отсутствует


I Love 1С++!

Сообщений: 186
Зарегистрирован: 28. Февраля 2008
Re: Блокировки
Ответ #4 - 03. Апреля 2008 :: 06:43
Печать  
kiruha писал(а) 03. Апреля 2008 :: 06:38:
ПоследнееЗначение - как реализовано в 1С++ ?
Случаем не хранимая процедура?

нет, вложенный запрос. Я в профайлере смотрел, от этих запросов нет блокировок. Но возрасла нагрузка на проц сервака 80-100% загрузки. Может в этом фича?
  
Наверх
 
IP записан
 
Nick
God Member
*****
Отсутствует



Сообщений: 1599
Местоположение: г.Новокузнецк
Зарегистрирован: 21. Февраля 2007
Пол: Мужской
Re: Блокировки
Ответ #5 - 03. Апреля 2008 :: 06:48
Печать  
sml писал(а) 03. Апреля 2008 :: 06:43:
kiruha писал(а) 03. Апреля 2008 :: 06:38:
ПоследнееЗначение - как реализовано в 1С++ ?
Случаем не хранимая процедура?

нет, вложенный запрос. Я в профайлере смотрел, от этих запросов нет блокировок. Но возрасла нагрузка на проц сервака 80-100% загрузки. Может в этом фича?

Конечно у тебя время реакции на запрос возрастет с такой загрузкой
  
Наверх
ICQ  
IP записан
 
kiruha
1c++ power user
Отсутствует



Сообщений: 1249
Зарегистрирован: 11. Апреля 2007
Re: Блокировки
Ответ #6 - 03. Апреля 2008 :: 06:50
Печать  
У тебя в запросе нет наименований.
Я в табличном поле показываю только наименования и числа - иначе чтобы получить
представление нужно каждый раз производить подзапрос
при отображении .

Хотя это нужно уточнить у авторов табличного поля- ?
  
Наверх
 
IP записан
 
kiruha
1c++ power user
Отсутствует



Сообщений: 1249
Зарегистрирован: 11. Апреля 2007
Re: Блокировки
Ответ #7 - 03. Апреля 2008 :: 07:19
Печать  
И используется ли быстрый поиск -  по наименованию или по артикулу?
Сколько при этом генерится запросов?
И при прокуртке колесом  мыши?
  
Наверх
 
IP записан
 
sml
Full Member
***
Отсутствует


I Love 1С++!

Сообщений: 186
Зарегистрирован: 28. Февраля 2008
Re: Блокировки
Ответ #8 - 03. Апреля 2008 :: 07:22
Печать  
kiruha писал(а) 03. Апреля 2008 :: 06:50:
У тебя в запросе нет наименований.
Я в табличном поле показываю только наименования и числа - иначе чтобы получить
представление нужно каждый раз производить подзапрос
при отображении .

Хотя это нужно уточнить у авторов табличного поля- ?


у меня заполняется не табличное поле, а 1Сная таблица значений. Наименование в ней вытаскивается из поля descr, но сам объект присутствует в таблице, но это поле сделано невидимым. Может быть, с этим связано.
  
Наверх
 
IP записан
 
Вадимко
God Member
*****
Отсутствует


Нам бы чего про ОдноЦэ...

Сообщений: 1048
Местоположение: Минск
Зарегистрирован: 24. Мая 2006
Пол: Мужской
Re: Блокировки
Ответ #9 - 03. Апреля 2008 :: 08:07
Печать  
kiruha писал(а) 03. Апреля 2008 :: 07:19:
И используется ли быстрый поиск -  по наименованию или по артикулу?
Сколько при этом генерится запросов?
И при прокуртке колесом  мыши?

Позырь пример тут, есть поиск
  

Кампутер, кофе и сигареты - это очень плохо для моего здоровья...
Наверх
IP записан
 
Вадимко
God Member
*****
Отсутствует


Нам бы чего про ОдноЦэ...

Сообщений: 1048
Местоположение: Минск
Зарегистрирован: 24. Мая 2006
Пол: Мужской
Re: Блокировки
Ответ #10 - 03. Апреля 2008 :: 08:09
Печать  
sml писал(а) 03. Апреля 2008 :: 07:22:
у меня заполняется не табличное поле, а 1Сная таблица значений.


Ну так что ты хочешь Улыбка
Выбирается ВСЕ а не "видимая" часть, кроме того львиная доля времени уходит не на запрос а на заполнение ТЗ (если там несколько тысяч строк)
  

Кампутер, кофе и сигареты - это очень плохо для моего здоровья...
Наверх
IP записан
 
kiruha
1c++ power user
Отсутствует



Сообщений: 1249
Зарегистрирован: 11. Апреля 2007
Re: Блокировки
Ответ #11 - 03. Апреля 2008 :: 08:34
Печать  
Цитата:
kiruha писал(а) 03. Апреля 2008 :: 07:19:
И используется ли быстрый поиск -  по наименованию или по артикулу?
Сколько при этом генерится запросов?
И при прокуртке колесом  мыши?

Позырь пример тут, есть поиск


У него родная форма списка, а видимо на функцию на форме -  повешан вывод ТЗ по параметру ТекущийЭлемент().
(пришлось перечитать соседний топик  Подмигивание  http://www.1cpp.ru/forum/YaBB.pl?num=1206686989/6#6 )
Ну и при быстом поиске или прокрутке бомбардируется сервер запросами, каждый из которых отрывает
Цитата:
возрасла нагрузка на проц сервака 80-100%
  
Наверх
 
IP записан
 
sml
Full Member
***
Отсутствует


I Love 1С++!

Сообщений: 186
Зарегистрирован: 28. Февраля 2008
Re: Блокировки
Ответ #12 - 03. Апреля 2008 :: 13:41
Печать  
пришлось откатить модуль формы списка справочника на неоптимизированный прямыми запросами.  Плачущий

Нагрузка на проц снизилась на 20%

Блокировки стали реже, но до конца не рассосались. За 2 дня у юзверей накопилось много документов, которые надо проводить.

Кстати, анализируя блокировки, обнаружил, что большинство из них - это прямые запросы к остаткам в режиме проведения документа. Есть ли риск получить кривые остатки, используя хинты nolock для регистров?
Я пока не рискнул.
  
Наверх
 
IP записан
 
leshik
1c++ donor
Отсутствует



Сообщений: 820
Местоположение: Пятигорск
Зарегистрирован: 22. Апреля 2007
Пол: Мужской
Re: Блокировки
Ответ #13 - 03. Апреля 2008 :: 13:46
Печать  
риск есть и очень большой Улыбка
  
Наверх
IP записан
 
vip
1c++ power user
Отсутствует



Сообщений: 1570
Зарегистрирован: 19. Мая 2006
Re: Блокировки
Ответ #14 - 03. Апреля 2008 :: 14:08
Печать  
sml
Ты постоянно употребляешь слово "блокировки".
Что ты вообще имеешь ввиду?
  
Наверх
ICQ  
IP записан
 
Вадимко
God Member
*****
Отсутствует


Нам бы чего про ОдноЦэ...

Сообщений: 1048
Местоположение: Минск
Зарегистрирован: 24. Мая 2006
Пол: Мужской
Re: Блокировки
Ответ #15 - 03. Апреля 2008 :: 14:30
Печать  
sml писал(а) 03. Апреля 2008 :: 13:41:
большинство из них - это прямые запросы к остаткам в режиме проведения документа. Есть ли риск получить кривые остатки, используя хинты nolock для регистров?
Я пока не рискнул.


Ты же не заменял блокировки журнала и т.п. на построчные и т.п.?
Все нормально
Проведение происходит в транзакции с установленными блокировками на нужные таблицы, другим документом остатки в этот момент изменить невозможно
  

Кампутер, кофе и сигареты - это очень плохо для моего здоровья...
Наверх
IP записан
 
sml
Full Member
***
Отсутствует


I Love 1С++!

Сообщений: 186
Зарегистрирован: 28. Февраля 2008
Re: Блокировки
Ответ #16 - 04. Апреля 2008 :: 05:10
Печать  
vip писал(а) 03. Апреля 2008 :: 14:08:
sml
Ты постоянно употребляешь слово "блокировки".
Что ты вообще имеешь ввиду?

это когда юзвери блокируют друг друга, например, кто-то заблокировал журнал документов или регистр (даже на чтение). Я за вчера наблюдал за работой сервака и пришел к неутешительному выводу - запросы на серв лезут оч. неоптимальными. Большое количество (55 в сек) полных сканов (есть такой счетчик у скуля), а средняя очередь к диску, когда блокировка от 8 до 11. А знатоки говорят, что должна быть < 3.

Думаю одна из засад в этом запросе, скорее всего, он не оптимален:

Код
Выбрать все
"SELECT
|     $РегП.Фирма as [Фирма $Справочник.Фирмы],
|     $РегП.Товар AS [Товар $Справочник.Номенклатура],
|     $РегП.ПрихДокумент as [ПрихДокумент $Документ],
|     $РегП.Статус as Статус,
|     $РегП.Контрагент as [Контрагент $Справочник.Контрагенты],
|     $РегП.Поставщик as [Поставщик $Справочник.Контрагенты],
|     $РегП.Поставка as [Поставка $Документ],
|     $РегП.ОстатокТовара  AS ОстатокТовара,
|     $РегП.Стоимость  AS Стоимость,
|     $РегП.ПродСтоимость  AS ПродСтоимость,
|     $РегП.НДС  AS НДС,
|     $РегП.СтоимостьНП  AS СтоимостьНП,
|	  (CASE J.IDDocDef
|			WHEN $ВидДокумента.Перемещение THEN 'Перемещение'
|			WHEN $ВидДокумента.ВводОстатковТМЦ THEN 'ВводОстатковТМЦ'
|			WHEN $ВидДокумента.ПриходнаяНакладная THEN 'ПриходнаяНакладная'
|			WHEN $ВидДокумента.ВводОстатковРеализации THEN 'ВводОстатковРеализации'
|			WHEN $ВидДокумента.ВводПартийТоваров THEN 'ВводПартийТоваров'
|			WHEN $ВидДокумента.ВводОстатковВМагазинах THEN 'ВводОстатковВМагазинах'
|			WHEN $ВидДокумента.ПриходнаяРеализатора THEN 'ПриходнаяРеализатора'
|			WHEN $ВидДокумента.ОприходованиеИзлишков THEN 'ОприходованиеИзлишков'
|		ELSE ''
|		END)as ДокП_вид,
|	  J.DATE_TIME_IDDOC as ПозицияПартии
|  FROM
|     $РегистрИтоги.ПартииТоваров as РегП
|
|	LEFT JOIN _1sjourn J (NOLOCK) ON J.IDDOC = right($РегП.ПрихДокумент, 9)
| WHERE $РегП.ОстатокТовара >0
|			"+стрСтат+"
|			AND $РегП.Товар in (SELECT val from #STov)
|			AND Period = :ПредМесяц
| ORDER BY $РегП.Товар, J.DATE_TIME_IDDOC, $РегП.ПрихДокумент 

  
Наверх
 
IP записан
 
sml
Full Member
***
Отсутствует


I Love 1С++!

Сообщений: 186
Зарегистрирован: 28. Февраля 2008
Re: Блокировки
Ответ #17 - 04. Апреля 2008 :: 07:13
Печать  
вот план запроса. Академики, подкиньте, пожалуйста, идейку, где копать???

Код
Выбрать все
		|--Bookmark Lookup(BOOKMARK: ([Bmk1001]), OBJECT: ([TorgSB_N].[dbo].[_1SJOURN] AS [J]))	1	4	3	Bookmark Lookup	Bookmark Lookup	BOOKMARK: ([Bmk1001]), OBJECT: ([TorgSB_N].[dbo].[_1SJOURN] AS [J])	[J].[IDDOCDEF], [J].[DATE_TIME_IDDOC]	1.0	6.2500001E-3	0.0000011	300	0.03251927	[RegP].[SP2654], [RegP].[SP1131], [RegP].[SP1132], [RegP].[SP2706], [RegP].[SP2707], [RegP].[SP3597], [RegP].[SP3601], [RegP].[SP1133], [RegP].[SP2655], [RegP].[SP2799], [RegP].[SP3286], [RegP].[SP3665], [J].[IDDOCDEF], [J].[DATE_TIME_IDDOC]	[NULL]	PLAN_ROW	0	1.0
		     |--Nested Loops(Left Outer Join, OUTER REFERENCES: ([RegP].[SP1132]))	1	5	4	Nested Loops	Left Outer Join	OUTER REFERENCES: ([RegP].[SP1132])	[NULL]	1.0	0.0	0.00001254	205	2.6268167E-2	[RegP].[SP2654], [RegP].[SP1131], [RegP].[SP1132], [RegP].[SP2706], [RegP].[SP2707], [RegP].[SP3597], [RegP].[SP3601], [RegP].[SP1133], [RegP].[SP2655], [RegP].[SP2799], [RegP].[SP3286], [RegP].[SP3665], [Bmk1001]	[NULL]	PLAN_ROW	0	1.0
			    |--Nested Loops(Left Semi Join, WHERE: ([RegP].[SP1131]=[Doc].[SP249]))	1	6	5	Nested Loops	Left Semi Join	WHERE: ([RegP].[SP1131]=[Doc].[SP249])	[NULL]	1.0	0.0	2.7815544E-4	175	0.01335981	[RegP].[SP2654], [RegP].[SP1131], [RegP].[SP1132], [RegP].[SP2706], [RegP].[SP2707], [RegP].[SP3597], [RegP].[SP3601], [RegP].[SP1133], [RegP].[SP2655], [RegP].[SP2799], [RegP].[SP3286], [RegP].[SP3665]	[NULL]	PLAN_ROW	0	1.0
			    |    |--Clustered Index Seek(OBJECT: ([TorgSB_N].[dbo].[RG1130].[PK_RG1130] AS [RegP]), SEEK: ([RegP].[PERIOD]='Apr  1 2008 12:00AM'),  WHERE: ([RegP].[SP1133]>0.00000) ORDERED FORWARD)	1	7	6	Clustered Index Seek	Clustered Index Seek	OBJECT: ([TorgSB_N].[dbo].[RG1130].[PK_RG1130] AS [RegP]), SEEK: ([RegP].[PERIOD]='Apr  1 2008 12:00AM'),  WHERE: ([RegP].[SP1133]>0.00000) ORDERED FORWARD	[RegP].[SP2654], [RegP].[SP1131], [RegP].[SP1132], [RegP].[SP2706], [RegP].[SP2707], [RegP].[SP3597], [RegP].[SP3601], [RegP].[SP1133], [RegP].[SP2655], [RegP].[SP2799], [RegP].[SP3286], [RegP].[SP3665]	1.0	6.3284999E-3	8.0320715E-5	175	6.4088209E-3	[RegP].[SP2654], [RegP].[SP1131], [RegP].[SP1132], [RegP].[SP2706], [RegP].[SP2707], [RegP].[SP3597], [RegP].[SP3601], [RegP].[SP1133], [RegP].[SP2655], [RegP].[SP2799], [RegP].[SP3286], [RegP].[SP3665]	[NULL]	PLAN_ROW	0	1.0
			    |    |--Clustered Index Seek(OBJECT: ([TorgSB_N].[dbo].[DT239].[PK_DT239] AS [Doc]), SEEK: ([Doc].[IDDOC]='  D4D2CEE') ORDERED FORWARD)	1	8	6	Clustered Index Seek	Clustered Index Seek	OBJECT: ([TorgSB_N].[dbo].[DT239].[PK_DT239] AS [Doc]), SEEK: ([Doc].[IDDOC]='  D4D2CEE') ORDERED FORWARD	[Doc].[SP249]	26.617744	6.3284999E-3	1.0785937E-4	62	6.6520781E-3	[Doc].[SP249]	[NULL]	PLAN_ROW	0	3.0
			    |--Index Seek(OBJECT: ([TorgSB_N].[dbo].[_1SJOURN].[IDDOC] AS [J]), SEEK: ([J].[IDDOC]=right(Convert([RegP].[SP1132]), 9)) ORDERED FORWARD)	1	12	5	Index Seek	Index Seek	OBJECT: ([TorgSB_N].[dbo].[_1SJOURN].[IDDOC] AS [J]), SEEK: ([J].[IDDOC]=right(Convert([RegP].[SP1132]), 9)) ORDERED FORWARD	[Bmk1001]	1.0	6.3284999E-3	7.9605998E-5	38	1.2895818E-2	[Bmk1001]	[NULL]	PLAN_ROW	0	3.0 

  
Наверх
 
IP записан
 
JohnyDeath
1c++ power user
1c++ donor
Отсутствует



Сообщений: 3050
Местоположение: Волгоград
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Блокировки
Ответ #18 - 04. Апреля 2008 :: 07:38
Печать  
Красавчик!  Смех
  
Наверх
 
IP записан
 
sml
Full Member
***
Отсутствует


I Love 1С++!

Сообщений: 186
Зарегистрирован: 28. Февраля 2008
Re: Блокировки
Ответ #19 - 04. Апреля 2008 :: 07:46
Печать  
для ясности - то, что на входе:

Код
Выбрать все
SELECT
	  RegP.sp2654 as Firma,
     RegP.sp1131 AS Tovar,
	  RegP.sp1132 as PrihDoc,
	  RegP.sp2706 as Status,
	  RegP.sp2707 as Contragent,
	  RegP.sp3597 as Postav,
	  RegP.sp3601 as Postavka,
     RegP.sp1133  AS Ostat,
     RegP.sp2655  AS Stoim,
     RegP.sp2799  AS ProdStoim,
     RegP.sp3286  AS NDS,
     RegP.sp3665  AS NP,
	  (CASE J.IDDocDef
			WHEN 239 THEN 'Перемещение'
			WHEN 5598 THEN 'ВводОстатковТМЦ'
			WHEN 434 THEN 'ПриходнаяНакладная'
			WHEN 657 THEN 'ВводОстатковРеализации'
			WHEN 1160 THEN 'ВводПартийТоваров'
			WHEN 6272 THEN 'ВводОстатковВМагазинах'
			WHEN 493 THEN 'ПриходнаяРеализатора'
			WHEN 3831 THEN 'ОприходованиеИзлишков'
		ELSE ''
		END) as VidDoc,
	  J.DATE_TIME_IDDOC as Partia
  FROM
     rg1130 as RegP

	LEFT JOIN _1sjourn J (NOLOCK) ON J.IDDOC = right(RegP.sp1132, 9)
 WHERE RegP.sp1133 >0
			AND RegP.sp1131 in (SELECT Doc.sp249 from dt239 Doc (nolock)
				Where Doc.IDDoc = '  D4D2CEE')
			AND Period = '20080401'
 ORDER BY RegP.sp1131, J.DATE_TIME_IDDOC, RegP.sp1132 

  
Наверх
 
IP записан
 
berezdetsky
1c++ power user
Отсутствует


barba non facit sisadminum

Сообщений: 1986
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Блокировки
Ответ #20 - 04. Апреля 2008 :: 07:55
Печать  
И куда делось
Код
Выбрать все
AND $РегП.Товар in (SELECT val from #STov) 

?
  

пароль как коньяк, чем больше звездочек, тем лучше
Наверх
IP записан
 
sml
Full Member
***
Отсутствует


I Love 1С++!

Сообщений: 186
Зарегистрирован: 28. Февраля 2008
Re: Блокировки
Ответ #21 - 04. Апреля 2008 :: 08:09
Печать  
berezdetsky писал(а) 04. Апреля 2008 :: 07:55:
И куда делось
Код
Выбрать все
AND $РегП.Товар in (SELECT val from #STov) 

?

это я поменял, чтобы план запроса в Артизане построить
  
Наверх
 
IP записан
 
berezdetsky
1c++ power user
Отсутствует


barba non facit sisadminum

Сообщений: 1986
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Блокировки
Ответ #22 - 04. Апреля 2008 :: 08:21
Печать  
Спрятал основной тормоз и теперь ждешь совета?  Круглые глаза Нет слов..

Добавь условия по измерениям, стоящим перед товаром, или включи отбор итогов по товару.
И исправь этот
Код
Выбрать все
RegP.sp1131 in (SELECT Doc.sp249 from dt239 Doc (nolock) Where Doc.IDDoc = '  D4D2CEE') 


- он порождает ненужный join. При том, что этот подзапрос возвращает всего одно значение, которое ты можешь передать непосредственно.
  

пароль как коньяк, чем больше звездочек, тем лучше
Наверх
IP записан
 
sml
Full Member
***
Отсутствует


I Love 1С++!

Сообщений: 186
Зарегистрирован: 28. Февраля 2008
Re: Блокировки
Ответ #23 - 04. Апреля 2008 :: 08:24
Печать  
berezdetsky писал(а) 04. Апреля 2008 :: 08:21:
Спрятал основной тормоз и теперь ждешь совета?  Круглые глаза Нет слов..

Добавь условия по измерениям, стоящим перед товаром, или включи отбор итогов по товару.

отбор итогов по товару у меня включен давно.
Цитата:
И исправь этот
Код
Выбрать все
RegP.sp1131 in (SELECT Doc.sp249 from dt239 Doc (nolock) Where Doc.IDDoc = '  D4D2CEE') 


- он порождает ненужный join. При том, что этот подзапрос возвращает всего одно значение, которое ты можешь передать непосредственно.


это как я непостредственно передам список товаров  Нерешительный?
  
Наверх
 
IP записан
 
berezdetsky
1c++ power user
Отсутствует


barba non facit sisadminum

Сообщений: 1986
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Блокировки
Ответ #24 - 04. Апреля 2008 :: 08:31
Печать  
sml писал(а) 04. Апреля 2008 :: 08:24:
отбор итогов по товару у меня включен давно.

Он не использовался в плане, который ты выкладывал до правки своего поста.

sml писал(а) 04. Апреля 2008 :: 08:24:
это как я непостредственно передам список товаров  Нерешительный?

Смущённый Тут я не прав - перепутал таблицы шапок и строк. Но стоит заменить IN на явный JOIN.
  

пароль как коньяк, чем больше звездочек, тем лучше
Наверх
IP записан
 
sml
Full Member
***
Отсутствует


I Love 1С++!

Сообщений: 186
Зарегистрирован: 28. Февраля 2008
Re: Блокировки
Ответ #25 - 04. Апреля 2008 :: 08:52
Печать  
не могу план запроса  (с JOIN) привести - не влазит, и прикрепл файл почемуто не подцепляется  Нерешительный
  
Наверх
 
IP записан
 
novichek
Экс-Участник


Re: Блокировки
Ответ #26 - 04. Апреля 2008 :: 09:59
Печать  
sml писал(а) 04. Апреля 2008 :: 05:10:
Код
Выбрать все
"SELECT
|     $РегП.Фирма as [Фирма $Справочник.Фирмы],
|     $РегП.Товар AS [Товар $Справочник.Номенклатура],
|     $РегП.ПрихДокумент as [ПрихДокумент $Документ],
|     $РегП.Статус as Статус,
|     $РегП.Контрагент as [Контрагент $Справочник.Контрагенты],
|     $РегП.Поставщик as [Поставщик $Справочник.Контрагенты],
|     $РегП.Поставка as [Поставка $Документ],
|     $РегП.ОстатокТовара  AS ОстатокТовара,
|     $РегП.Стоимость  AS Стоимость,
|     $РегП.ПродСтоимость  AS ПродСтоимость,
|     $РегП.НДС  AS НДС,
|     $РегП.СтоимостьНП  AS СтоимостьНП,
|	  (CASE J.IDDocDef
|			WHEN $ВидДокумента.Перемещение THEN 'Перемещение'
|			WHEN $ВидДокумента.ВводОстатковТМЦ THEN 'ВводОстатковТМЦ'
|			WHEN $ВидДокумента.ПриходнаяНакладная THEN 'ПриходнаяНакладная'
|			WHEN $ВидДокумента.ВводОстатковРеализации THEN 'ВводОстатковРеализации'
|			WHEN $ВидДокумента.ВводПартийТоваров THEN 'ВводПартийТоваров'
|			WHEN $ВидДокумента.ВводОстатковВМагазинах THEN 'ВводОстатковВМагазинах'
|			WHEN $ВидДокумента.ПриходнаяРеализатора THEN 'ПриходнаяРеализатора'
|			WHEN $ВидДокумента.ОприходованиеИзлишков THEN 'ОприходованиеИзлишков'
|		ELSE ''
|		END)as ДокП_вид,
|	  J.DATE_TIME_IDDOC as ПозицияПартии
|  FROM
|     $РегистрИтоги.ПартииТоваров as РегП
|
|	LEFT JOIN _1sjourn J (NOLOCK) ON J.IDDOC = right($РегП.ПрихДокумент, 9)
| WHERE $РегП.ОстатокТовара >0
|			"+стрСтат+"
|			AND $РегП.Товар in (SELECT val from #STov)
|			AND Period = :ПредМесяц
| ORDER BY $РегП.Товар, J.DATE_TIME_IDDOC, $РегП.ПрихДокумент 



Непонятки:
1) как проходит типизация документа,  
|     $РегП.ПрихДокумент as [ПрихДокумент $Документ],
если нет колонки ПрихДокумент_вид?; аналогично и  [Поставка $Документ]
2) зачем надо одновременно CASE, и колонку [ПрихДокумент $Документ]? ИМХО одно из них  лишнее

честно говоря я бы и в строке: $РегистрИтоги.ПартииТоваров as РегП тоже бы (NoLock) добавил
ну и в зависимости от того где и как используется результат запроса можно попытаться избавиться от лишних приведений к типам 1с "справочник" и "документ".
  
Наверх
 
IP записан
 
leshik
1c++ donor
Отсутствует



Сообщений: 820
Местоположение: Пятигорск
Зарегистрирован: 22. Апреля 2007
Пол: Мужской
Re: Блокировки
Ответ #27 - 04. Апреля 2008 :: 10:07
Печать  
Может я что-то упустил - но разве уже не отпала необходимость использовать CASE для определения строкового представления вида документа???
Код
Выбрать все
$ВидДокументПредставление 

  
Наверх
IP записан
 
sml
Full Member
***
Отсутствует


I Love 1С++!

Сообщений: 186
Зарегистрирован: 28. Февраля 2008
Re: Блокировки
Ответ #28 - 04. Апреля 2008 :: 12:24
Печать  
неужели, никто ничего дельного не подскажет.
Я помониторил профайлером реальную базу. Нашел, что запрос (первоначальный вариант с временной таблицей) для документа на 10 строк варился 37,5сек. Сама врем таблица формировалась 93мсек. Так что тормоза не в ней. Скорее всего тормоза связаны с журналом документов.  Смущённый
  
Наверх
 
IP записан
 
spock
1c++ developer
1c++ moderator
Отсутствует



Сообщений: 822
Местоположение: Новосибирск
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Блокировки
Ответ #29 - 04. Апреля 2008 :: 15:03
Печать  
sml писал(а) 04. Апреля 2008 :: 12:24:
неужели, никто ничего дельного не подскажет.

Код
Выбрать все
FROM $РегистрИтоги.ПартииТоваров as РегП 


Вот здесь нет хинта, а это значит, что:
* запросом будут наложены блокировки (скорее всего по индексу, но это тоже долго);
* до конца выполнения запроса НИ КТО не сможет начать проведение, т.к. 1с хочет заблокировать всю таблицу перед проведением, а ей не дают.

А здесь
Код
Выбрать все
LEFT JOIN _1sjourn J (NOLOCK) ON J.IDDOC = right($РегП.ПрихДокумент, 9) 


ты попадаешь на сканирование.
  
Наверх
ICQ  
IP записан
 
sml
Full Member
***
Отсутствует


I Love 1С++!

Сообщений: 186
Зарегистрирован: 28. Февраля 2008
Re: Блокировки
Ответ #30 - 07. Апреля 2008 :: 06:32
Печать  
Код
Выбрать все
FROM $РегистрИтоги.ПартииТоваров as РегП 



вся беда была в том, что слетел индекс по этой таблице (а в ней больше 22,5млн записей), потому и запросы так долго варились (с отключенным кэшем около минуты). В выходные отработал джоб по реиндексации, и в результате - всего 3 блокировки за 1,5 часа работы (каждая менее 10сек) по этой таблице.
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: [1] 
ОтправитьПечать