Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 update большой реплицируемой таблицы  [new]
Bekzod
Member

Откуда:
Сообщений: 67
Ребята помогите... не могу понять почему виснет система при следующей ситуации?
select @@version
Microsoft SQL Server 2000 - 8.00.2187 (Intel X86) Mar 9 2006 11:38:51 Copyright (c) 1988-2003 Microsoft Corporation Enterprise Edition on Windows NT 5.2 (Build 3790: Service Pack 2)
Ось
Win server 2003 R2 EE sp2

На данный сервак с другого сервака реплицируются таблицы
В одну из этих таблиц(2.717.523 строк), добавил 2 поля пытаюсь их заполнить при помощи хранимки
Почему то при такой хранимке:
CREATE  PROCEDURE _ins_st1 AS
UPDATE tbl_Retsales SET ST1=
 CASE WHEN Stocks = 1 then 
  CASE Prd_ID 
	WHEN 1  THEN 1
	WHEN 6  THEN 1
	WHEN 8  THEN 1
	WHEN 9  THEN 1
	WHEN 11 THEN 1
	WHEN 14 THEN 1
	WHEN 17 THEN 1
	WHEN 18 THEN 1
	WHEN 19 THEN 1
	WHEN 20 THEN 1
	ELSE 0
  END
  ELSE 0
 END
WHERE ID_Visit in (SELECT ID_Visit FROM tbl_Visits WHERE (VisDate > '20100101') AND (VisDate < '20110901'))
GO
все нормально проходит (QA - 16 сек), а при такой
CREATE  PROCEDURE _ins_st1_1 AS
UPDATE tbl_Retsales SET ST1=
 CASE WHEN Stocks = 1 then 
  CASE Prd_ID 
	WHEN 1  THEN 1
	WHEN 6  THEN 1
	WHEN 8  THEN 1
	WHEN 9  THEN 1
	WHEN 11 THEN 1
	WHEN 14 THEN 1
	WHEN 17 THEN 1
	WHEN 18 THEN 1
	WHEN 19 THEN 1
	WHEN 20 THEN 1
	WHEN 24 THEN 1
	WHEN 47 THEN 1
	ELSE 0
  END
  ELSE 0
 END
WHERE ID_Visit in (SELECT ID_Visit FROM tbl_Visits WHERE (VisDate >='20110601') AND (VisDate < '20110901'))
GO
начинает усе зависать... не понимаю, ведь в первом случае временной отрезок больше.
В чем могет быть проблема????
16 июн 11, 14:51    [10822291]     Ответить | Цитировать Сообщить модератору
 Re: update большой реплицируемой таблицы  [new]
tpg
Member

Откуда: Novosibirsk
Сообщений: 23902
Bekzod
...В чем могет быть проблема????
Сравните планы и всё станет ясно.
16 июн 11, 14:53    [10822315]     Ответить | Цитировать Сообщить модератору
 Re: update большой реплицируемой таблицы  [new]
Bekzod
Member

Откуда:
Сообщений: 67
tpg,

млин, шеф подскажите как это сделать? плиззз
16 июн 11, 14:55    [10822336]     Ответить | Цитировать Сообщить модератору
 Re: update большой реплицируемой таблицы  [new]
Bekzod
Member

Откуда:
Сообщений: 67
tpg
Bekzod
...В чем могет быть проблема????
Сравните планы и всё станет ясно.


подскажите куда копать новичку, ссылка быть может...
16 июн 11, 14:58    [10822375]     Ответить | Цитировать Сообщить модератору
 Re: update большой реплицируемой таблицы  [new]
Bekzod
Member

Откуда:
Сообщений: 67
tpg,

и тишина...... никогда не сравнивал ПЛАНЫ, даже не знаю как это гуглить и на форуме искать
16 июн 11, 15:04    [10822435]     Ответить | Цитировать Сообщить модератору
 Re: update большой реплицируемой таблицы  [new]
Bekzod
Member

Откуда:
Сообщений: 67
[img=C:\Documents and Settings\Bek\Мои документы\Мои рисунки\plans.JPG]
16 июн 11, 15:24    [10822602]     Ответить | Цитировать Сообщить модератору
 Re: update большой реплицируемой таблицы  [new]
Ivan Durak
Member

Откуда: Minsk!!!
Сообщений: 3752
Bekzod
[img=C:\Documents and Settings\Bek\Мои документы\Мои рисунки\plans.JPG]

буга-га.....
походу тебе попался хор-р-р-роший план!!!
16 июн 11, 15:27    [10822638]     Ответить | Цитировать Сообщить модератору
 Re: update большой реплицируемой таблицы  [new]
Bekzod
Member

Откуда:
Сообщений: 67
Ivan Durak
Bekzod
[img=C:\Documents and Settings\Bek\Мои документы\Мои рисунки\plans.JPG]

буга-га.....
походу тебе попался хор-р-р-роший план!!!


ну да... нессслабый
[url=]http://imageshack.us/photo/my-images/708/plansy.jpg/[/url]
16 июн 11, 15:32    [10822675]     Ответить | Цитировать Сообщить модератору
 Re: update большой реплицируемой таблицы  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
Специально для любителей веселых картинок - https://www.sql.ru/faq/faq_topic.aspx?fid=393
16 июн 11, 15:33    [10822684]     Ответить | Цитировать Сообщить модератору
 Re: update большой реплицируемой таблицы  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6724
Bekzod
imageshack.us
Боже, он ещё это кудато заливал.
16 июн 11, 15:35    [10822708]     Ответить | Цитировать Сообщить модератору
 Re: update большой реплицируемой таблицы  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6724
Parallel Loop vs Hash.
Индексов как обычно нет.
16 июн 11, 15:44    [10822786]     Ответить | Цитировать Сообщить модератору
 Re: update большой реплицируемой таблицы  [new]
Bekzod
Member

Откуда:
Сообщений: 67
Mnior
Parallel Loop vs Hash.
Индексов как обычно нет.


а как ставить индексы... люди ж в данную таблу данные заливают
16 июн 11, 15:55    [10822882]     Ответить | Цитировать Сообщить модератору
 Re: update большой реплицируемой таблицы  [new]
Bekzod
Member

Откуда:
Сообщений: 67
Лучше б чё полезное подсказали, прикалываться все горазды... я так смотрю тут все родились штоли со знаниями
16 июн 11, 16:03    [10822937]     Ответить | Цитировать Сообщить модератору
 Re: update большой реплицируемой таблицы  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6724
Bekzod
... я так смотрю тут все родились штоли со знаниями
C мозгом точно.
Знания надо не иметь, а уметь накапливать. Включить внимание, делать то что понимаешь, и не делать того чего не понимаешь.

CREATE INDEX

Не пользуйтесь IN, Напишите через JOIN или Exists. Всегда указывайте схему объектов, BEGIN END.
ALTER PROCEDURE [dbo].[_ins_st1_1]
AS BEGIN
	UPDATE	R
	SET	ST1 = CASE	WHEN R.Stocks = 1
				 AND R.Prd_ID IN (1,6,8,9,11,14,17,18,19,20,24,47)
				THEN 1
				ELSE 0
				END
	FROM	     tbl_Visits		V
		JOIN dbo.tbl_Retsales	R ON R.ID_Visit = V.ID_Visit
	WHERE	    V.VisDate	>= '20110601'
		AND V.VisDate	<  '20110901'
END
GO

16 июн 11, 16:29    [10823193]     Ответить | Цитировать Сообщить модератору
 Re: update большой реплицируемой таблицы  [new]
Bekzod
Member

Откуда:
Сообщений: 67
Mnior,

а вот за энто премного благодарен ... пасибо
16 июн 11, 17:02    [10823463]     Ответить | Цитировать Сообщить модератору
 Re: update большой реплицируемой таблицы  [new]
Bekzod
Member

Откуда:
Сообщений: 67
Mnior,

Млин прям летает, суперр
16 июн 11, 17:09    [10823524]     Ответить | Цитировать Сообщить модератору
 Re: update большой реплицируемой таблицы  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6724
Mnior
ALTER PROCEDURE [dbo].[_ins_st1_1]
AS BEGIN
	UPDATE	R
	SET	ST1 = CASE	WHEN R.Stocks = 1
				 AND R.Prd_ID IN (1,6,8,9,11,14,17,18,19,20,24,47)
				THEN 1
				ELSE 0
				END
	FROM	     dbo.tbl_Visits	V
		JOIN dbo.tbl_Retsales	R ON R.ID_Visit = V.ID_Visit
	WHERE	    V.VisDate	>= '20110601'
		AND V.VisDate	<  '20110901'
END
GO
Профтыкал.
16 июн 11, 22:30    [10824938]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить