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

Откуда:
Сообщений: 23
Добрый день колеги.
Есть Update, tbl_ViewCallRecordsMain - 26 482 696 строк
temp - 9 536 871 строк

Проблема работает очень долго. Как ускорить?
Спасибо за ответ.
t1.DiallingCallingId,t2.DiallingCallingId кластерные индексы.

Табличка dbo.tbl_ViewCallRecordsMain используется только для селекта пользователями.
Запускаю Update и он висит в статусе suspended . Почему?


update t2 set t2.[Статус]=t1.descstatus,t2.CASP_GENERIC_STATUS_03_CODE=t1.CASP_GENERIC_STATUS_03_CODE
FROM dbo.temp t1
JOIN dbo.tbl_ViewCallRecordsMain t2 ON t1.DiallingCallingId=t2.DiallingCallingId

К сообщению приложен файл. Размер - 98Kb
2 фев 16, 15:48    [18762684]     Ответить | Цитировать Сообщить модератору
 Re: Обновление большой таблицы  [new]
Konst_One
Member

Откуда:
Сообщений: 11621
и где же скрипт вашей VIEW dbo.tbl_ViewCallRecordsMain ?
2 фев 16, 15:52    [18762703]     Ответить | Цитировать Сообщить модератору
 Re: Обновление большой таблицы  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
у вас 9 + лямов под апдейт ... все честно однако
2 фев 16, 15:52    [18762706]     Ответить | Цитировать Сообщить модератору
 Re: Обновление большой таблицы  [new]
Glory
Member

Откуда:
Сообщений: 104751
Oleg 23
Проблема работает очень долго. Как ускорить?

И сколько записей показыват толстая стрелка в плане перед шагом Update ?
2 фев 16, 16:02    [18762775]     Ответить | Цитировать Сообщить модератору
 Re: Обновление большой таблицы  [new]
AlanDenton
Member [скрыт]

Откуда:
Сообщений: 1004
Без DDL таблиц это как пальцем в небо. Но можно попробовать обновлять пакетами, до тех пор пока существуют записи которые нужно удалять:

WHILE EXISTS(
	SELECT 1
	FROM dbo.temp t1
	JOIN dbo.tbl_ViewCallRecordsMain t2 ON t1.DiallingCallingId = t2.DiallingCallingId
	WHERE t2.[Статус] != t1.descstatus
		AND t2.CASP_GENERIC_STATUS_03_CODE != t1.CASP_GENERIC_STATUS_03_CODE
) BEGIN

	UPDATE TOP(10000) t2
	SET t2.[Статус] = t1.descstatus,
		t2.CASP_GENERIC_STATUS_03_CODE = t1.CASP_GENERIC_STATUS_03_CODE
	FROM dbo.temp t1
	JOIN dbo.tbl_ViewCallRecordsMain t2 ON t1.DiallingCallingId = t2.DiallingCallingId
	WHERE t2.[Статус] != t1.descstatus
		AND t2.CASP_GENERIC_STATUS_03_CODE != t1.CASP_GENERIC_STATUS_03_CODE

END


Плюс еще смотреть в каком Recovery Mode Ваша база находится.
2 фев 16, 16:05    [18762794]     Ответить | Цитировать Сообщить модератору
 Re: Обновление большой таблицы  [new]
AlanDenton
Member [скрыт]

Откуда:
Сообщений: 1004
AlanDenton
записи которые нужно удалять

* обновлять
2 фев 16, 16:06    [18762799]     Ответить | Цитировать Сообщить модератору
 Re: Обновление большой таблицы  [new]
Oleg 23
Member

Откуда:
Сообщений: 23
AlanDenton,
Попробую.
2 фев 16, 16:13    [18762834]     Ответить | Цитировать Сообщить модератору
 Re: Обновление большой таблицы  [new]
Oleg 23
Member

Откуда:
Сообщений: 23
Glory,
соответственно 9 и 25 лямов.
2 фев 16, 16:14    [18762839]     Ответить | Цитировать Сообщить модератору
 Re: Обновление большой таблицы  [new]
Glory
Member

Откуда:
Сообщений: 104751
Oleg 23
Glory,
соответственно 9 и 25 лямов.

Чего соответственно ?
Как у одной стрелки в плане размер может быть и 9 и 25 лямов ?
2 фев 16, 16:15    [18762848]     Ответить | Цитировать Сообщить модератору
 Re: Обновление большой таблицы  [new]
Oleg 23
Member

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

Simple
2 фев 16, 16:15    [18762851]     Ответить | Цитировать Сообщить модератору
 Re: Обновление большой таблицы  [new]
Oleg 23
Member

Откуда:
Сообщений: 23
Glory,
temp 9 лямов первая стрелка
dbo.tbl_ViewCallRecordsMain 25 лямов вторая стрелка
2 фев 16, 16:23    [18762886]     Ответить | Цитировать Сообщить модератору
 Re: Обновление большой таблицы  [new]
Glory
Member

Откуда:
Сообщений: 104751
Oleg 23
temp 9 лямов первая стрелка
dbo.tbl_ViewCallRecordsMain 25 лямов вторая стрелка

Вы заданный вам вопрос прочитали вообще ?
2 фев 16, 16:23    [18762893]     Ответить | Цитировать Сообщить модератору
 Re: Обновление большой таблицы  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
Oleg 23
Glory,
temp 9 лямов первая стрелка
dbo.tbl_ViewCallRecordsMain 25 лямов вторая стрелка
после MergeJoin и Тор -скока спрашивают,а не по отдельности
2 фев 16, 16:24    [18762904]     Ответить | Цитировать Сообщить модератору
 Re: Обновление большой таблицы  [new]
Oleg 23
Member

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

9 лямов и там и там.
2 фев 16, 16:27    [18762922]     Ответить | Цитировать Сообщить модератору
 Re: Обновление большой таблицы  [new]
Oleg 23
Member

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

На данный момент запустил скрипт AlanDenton , пока работает больше 12 минут, но уже процес не ожидает а работает.
2 фев 16, 16:29    [18762934]     Ответить | Цитировать Сообщить модератору
 Re: Обновление большой таблицы  [new]
Oleg 23
Member

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

Приблизительная оценка работы, 1 час 20 мин.
У кого, то есть идеи для улучшения результата ?
2 фев 16, 16:37    [18762993]     Ответить | Цитировать Сообщить модератору
 Re: Обновление большой таблицы  [new]
Glory
Member

Откуда:
Сообщений: 104751
Oleg 23
У кого, то есть идеи для улучшения результата ?

А что ваше обрудование может работать с большей скорстью ?
Вы его тестировали на производительность ?
Сколько времени по-вашему должно занимать обновление 9млн произвольных записей ?
Больше/меньше, чем полученные сейчас 2000 записей/сек ?
2 фев 16, 16:40    [18763021]     Ответить | Цитировать Сообщить модератору
 Re: Обновление большой таблицы  [new]
AlanDenton
Member [скрыт]

Откуда:
Сообщений: 1004
Oleg 23
Приблизительная оценка работы, 1 час 20 мин.
У кого, то есть идеи для улучшения результата ?

Для этого нужно предоставить DDL таблиц. Какие индексы есть на этих таблицах. Статистику. И план выполнения. И не в виде картинки, а полноценный *.sqlplan.
2 фев 16, 16:42    [18763035]     Ответить | Цитировать Сообщить модератору
 Re: Обновление большой таблицы  [new]
Konst_One
Member

Откуда:
Сообщений: 11621
если операция одноразовая, то зачем вам что-то улучшать?
если у вас постоянно такой update будет выполняться, то стоит подумать над логикой, может вам не надо так делать?
2 фев 16, 16:42    [18763038]     Ответить | Цитировать Сообщить модератору
 Re: Обновление большой таблицы  [new]
Oleg 23
Member

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


Да это единоразово, думал вдруг , что то креативное кто то предложит.

Ок спасибо всем за помощь.
2 фев 16, 16:53    [18763132]     Ответить | Цитировать Сообщить модератору
 Re: Обновление большой таблицы  [new]
Shifu
Member [заблокирован]

Откуда: Из губернии я
Сообщений: 136
Oleg 23,

Сколько некластнрных индексов в обновляемый таблице?
Если апдейт разовый и можно сделать в не рабочее время...

Переведи все некластнрных индексы обновляемый таблицы в disable, сделай апдейт порциями как показывали и ребилд некластнрных отключенных индексов сделай , подван.
2 фев 16, 16:58    [18763178]     Ответить | Цитировать Сообщить модератору
 Re: Обновление большой таблицы  [new]
churupaha
Member

Откуда: Краснодар
Сообщений: 1015
Oleg 23
AlanDenton,

Simple


ну и что, update будет full logged все равно. а если сделать

insert into t with (tablockx)(..updated_column..)
select ..new_value. from ... inner join
+ sp_rename/create indexes и т. п..

или select into... + sp_rename/create indexes и т. п..

и будут выполнены остальные требования minimally logged операций, тогда будет быстрее.
2 фев 16, 16:59    [18763181]     Ответить | Цитировать Сообщить модератору
 Re: Обновление большой таблицы  [new]
AlanDenton
Member [скрыт]

Откуда:
Сообщений: 1004
churupaha
ну и что

Вы правы, конечно же. На всякий случай решил спросить, чтобы потом не было вопросов. Почему лог раздулся.
2 фев 16, 17:10    [18763273]     Ответить | Цитировать Сообщить модератору
 Re: Обновление большой таблицы  [new]
Crimean
Member

Откуда:
Сообщений: 13147
обновить менее 9 лямов (при условии, что реально не все записи надо обновлять) будет быстрее, чем перелить 25 лямов?
тем более, что, судя по плану, там особо индексы не перестраиваются при обновлении?
2 фев 16, 17:22    [18763352]     Ответить | Цитировать Сообщить модератору
 Re: Обновление большой таблицы  [new]
churupaha
Member

Откуда: Краснодар
Сообщений: 1015
Crimean
обновить менее 9 лямов (при условии, что реально не все записи надо обновлять) будет быстрее, чем перелить 25 лямов?
тем более, что, судя по плану, там особо индексы не перестраиваются при обновлении?


в simple/bulklogged+прочие условия. при переливке можно поидее сэкономить на log writes (сколько - хз, вот пусть померяет)...
2 фев 16, 17:26    [18763382]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить