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

Откуда:
Сообщений: 92
Коллеги подскажите пожалуйста. Есть Update
Update 
ims.Field = pm.Field
 from [IN-MARKET SALES CEGEDIM] (nolock )ims 
left join POS_Mapping  pm

[color=orange]on coalesce(ims.[Вариант написания POS],'') = coalesce(pm.[Название клиента],'')
	and coalesce(ims.ИНН,'') = coalesce(pm.ИНН,'')
	and coalesce(ims.[Вариант написания адреса POS],'') = coalesce(pm.[Адрес клиента],'')
	and coalesce(ims.[Вариант написания региона],'') = coalesce(pm.[Регион клиента],'')
	and coalesce(ims.[Вариант написания города],'') = coalesce(pm.[Город клиента],'')[/color]

where ims.Дата between '2013-02-01' and '2013-05-01'
and (([Double Sales] !=3) or ([Double Sales] = 3 and ims.Дистрибьютор like '%Sales%'))


Выделеные строки типа (Nvarchar(255)) По другому джоин не реализовать. Данных в таблице [IN-MARKET SALES CEGEDIM] 15 млн строк. В POS_Mapping 1 млн. Очень долго выполняется Update. Есть идею попробовать порциями по 100000 тысяч строк например. PK на обеих таблицах есть. Подскажите как это реализовать. Или если есть другие идеи по оптимизации подскадите пожалуйста. Join менять нельзя.
Заранее спасибо
11 сен 14, 16:46    [16565011]     Ответить | Цитировать Сообщить модератору
 Re: Медленный Update  [new]
Crimean
Member

Откуда:
Сообщений: 13147
kornilov
попробовать порциями по 100000 тысяч строк например


а сколько данных за раз вы меняете? если разговор про "порции по 100 000 тысяч"
11 сен 14, 16:55    [16565057]     Ответить | Цитировать Сообщить модератору
 Re: Медленный Update  [new]
kornilov
Member

Откуда:
Сообщений: 92
Crimean,
вот сейчас стоит условие where на 3 месяца это около 2 млн, но нужно за 3 года
11 сен 14, 16:57    [16565071]     Ответить | Цитировать Сообщить модератору
 Re: Медленный Update  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
kornilov,

триггеры есть?
11 сен 14, 17:12    [16565186]     Ответить | Цитировать Сообщить модератору
 Re: Медленный Update  [new]
kornilov
Member

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

нету
11 сен 14, 17:16    [16565214]     Ответить | Цитировать Сообщить модератору
 Re: Медленный Update  [new]
churupaha
Member

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

а план покажете?
11 сен 14, 17:18    [16565227]     Ответить | Цитировать Сообщить модератору
 Re: Медленный Update  [new]
kornilov
Member

Откуда:
Сообщений: 92
churupaha,
Прикладываю, прошу прощения что в таком виде не знаю как по другому

К сообщению приложен файл (plan.sqlplan - 100Kb) cкачать
11 сен 14, 17:27    [16565281]     Ответить | Цитировать Сообщить модератору
 Re: Медленный Update  [new]
churupaha
Member

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

это оценочный, можно актуальный?
11 сен 14, 17:35    [16565333]     Ответить | Цитировать Сообщить модератору
 Re: Медленный Update  [new]
churupaha
Member

Откуда: Краснодар
Сообщений: 1015
под это условие много попадает строк?

ims.Дата between '2013-02-01' and '2013-05-01'
11 сен 14, 17:38    [16565349]     Ответить | Цитировать Сообщить модератору
 Re: Медленный Update  [new]
churupaha
Member

Откуда: Краснодар
Сообщений: 1015
я клоню к индексу по полю ims.Дата + м. б. сделать его covered...
11 сен 14, 17:41    [16565363]     Ответить | Цитировать Сообщить модератору
 Re: Медленный Update  [new]
kornilov
Member

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

2 млн строк, чуть выше уже писал
11 сен 14, 17:45    [16565389]     Ответить | Цитировать Сообщить модератору
 Re: Медленный Update  [new]
kornilov
Member

Откуда:
Сообщений: 92
А актуальный план пока не могу вытащить оч долго Update крутится. Больше часа
11 сен 14, 17:48    [16565406]     Ответить | Цитировать Сообщить модератору
 Re: Медленный Update  [new]
churupaha
Member

Откуда: Краснодар
Сообщений: 1015
а че он крутится не смотрели? м. б. ждет чего?

sys.dm_exec_requests
11 сен 14, 17:50    [16565416]     Ответить | Цитировать Сообщить модератору
 Re: Медленный Update  [new]
kornilov
Member

Откуда:
Сообщений: 92
sp_who2

SPID Status Login HostName BlkBy DBName Command
72 RUNNABLE sa EMAMOSLR8E3PVF . RussiaSales UPDATE
72 RUNNABLE EMAMOSLR8E3PVF . RussiaSales UPDATE
72 RUNNABLE EMAMOSLR8E3PVF . RussiaSales UPDATE
72 RUNNABLE EMAMOSLR8E3PVF . RussiaSales UPDATE
72 RUNNABLE EMAMOSLR8E3PVF . RussiaSales UPDATE
72 RUNNABLE EMAMOSLR8E3PVF . RussiaSales UPDATE
72 RUNNABLE EMAMOSLR8E3PVF . RussiaSales UPDATE
72 RUNNABLE EMAMOSLR8E3PVF . RussiaSales UPDATE
72 RUNNABLE EMAMOSLR8E3PVF . RussiaSales UPDATE
72 RUNNABLE EMAMOSLR8E3PVF . RussiaSales UPDATE
72 RUNNABLE EMAMOSLR8E3PVF . RussiaSales UPDATE
72 SUSPENDED EMAMOSLR8E3PVF . RussiaSales UPDATE
72 SUSPENDED EMAMOSLR8E3PVF . RussiaSales UPDATE
72 RUNNABLE EMAMOSLR8E3PVF . RussiaSales UPDATE
72 SUSPENDED EMAMOSLR8E3PVF . RussiaSales UPDATE
72 SUSPENDED EMAMOSLR8E3PVF . RussiaSales UPDATE
72 SUSPENDED EMAMOSLR8E3PVF . RussiaSales UPDATE
72 SUSPENDED EMAMOSLR8E3PVF . RussiaSales UPDATE
72 SUSPENDED EMAMOSLR8E3PVF . RussiaSales UPDATE
72 SUSPENDED EMAMOSLR8E3PVF . RussiaSales UPDATE
72 SUSPENDED EMAMOSLR8E3PVF . RussiaSales UPDATE

Никто его не блокирует
И ничего он не ждет

select * from sys.dm_exec_requests

session_id 72
request_id 0
start_time 11.09.2014 17:53
status runnable
command UPDATE
sql_handle 0x020000008B983B1374E31B1AEF5134C062EAEF890FE54007
statement_start_offset 8
statement_end_offset -1
plan_handle 0x06002D008B983B1340A1DB10010000000000000000000000
database_id 45
user_id 1
connection_id B6E72EB1-6E78-4A2A-9610-29B2BD62DC70
blocking_session_id 0
wait_type NULL
wait_time 0
last_wait_type SLEEP_TASK
wait_resource
open_transaction_count 2
open_resultset_count 1
transaction_id 210927333
context_info 0x
percent_complete 0
estimated_completion_time 0
cpu_time 4937
total_elapsed_time 379658
scheduler_id 2
task_address 0x00000000066CF948
reads 15849
writes 105
logical_reads 1143323
text_size -1
language us_english
date_format mdy
date_first 7
quoted_identifier 1
arithabort 0
ansi_null_dflt_on 1
ansi_defaults 0
ansi_warnings 1
ansi_padding 1
ansi_nulls 1
concat_null_yields_null 1
transaction_isolation_level 2
lock_timeout -1
deadlock_priority 0
row_count 0
prev_error 0
nest_level 0
granted_query_memory 163746
executing_managed_code 0
group_id 2
query_hash 0x6E68860400F9B642
query_plan_hash 0x82346C96A1837C96


Или я не прав?
11 сен 14, 18:04    [16565467]     Ответить | Цитировать Сообщить модератору
 Re: Медленный Update  [new]
kornilov
Member

Откуда:
Сообщений: 92
Вот актуальный план выполнения.
Там еще добавлено пару Join ов но они не влияют, как я понимаю

К сообщению приложен файл (Plan2.rar - 12Kb) cкачать
11 сен 14, 18:13    [16565505]     Ответить | Цитировать Сообщить модератору
 Re: Медленный Update  [new]
aleks2
Guest
1. NOLOCK в update - это свежо. Left join - тож нетривиальный ход.
2. Начните с того, что сделайте в IN-MARKET SALES CEGEDIM и POS_Mapping без NULL и уберите coalesce.
3. Сделайте на POS_Mapping кластерный индекс по полям джойн.
4. Разбейте по where or на два запроса без or. Хотя это неважно в данном случае.

5. Если ужо совсем никак - заменить update на select ... into ... и переименование таблицы.
11 сен 14, 18:16    [16565518]     Ответить | Цитировать Сообщить модератору
 Re: Медленный Update  [new]
kornilov
Member

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

спасибо но поля джоина это nvarchar(255) Удастся создать 1 индекс на одно поле. 5 индексов создавать???
11 сен 14, 18:20    [16565525]     Ответить | Цитировать Сообщить модератору
 Re: Медленный Update  [new]
aleks2
Guest
kornilov
Вот актуальный план выполнения.
Там еще добавлено пару Join ов но они не влияют, как я понимаю

Добавь ишо десяток - будет быстрее.

kornilov
aleks2,
спасибо но поля джоина это nvarchar(255) Удастся создать 1 индекс на одно поле. 5 индексов создавать???

1. Пять не надо. Хоть один, на самое селективное поле.

2. Можно все поля POS_Mapping в хэш-индекс запихать. А IN-MARKET SALES CEGEDIM, единый хрен, сканировать - так шо хэши можно вычислять..
11 сен 14, 18:25    [16565535]     Ответить | Цитировать Сообщить модератору
 Re: Медленный Update  [new]
Ivan Durak
Member

Откуда: Minsk!!!
Сообщений: 3752
kornilov
aleks2,

спасибо но поля джоина это nvarchar(255) Удастся создать 1 индекс на одно поле. 5 индексов создавать???

часто такие апдейты идут?
может там нормальны fk сделать в POS_Mapping?
11 сен 14, 18:37    [16565578]     Ответить | Цитировать Сообщить модератору
 Re: Медленный Update  [new]
churupaha
Member

Откуда: Краснодар
Сообщений: 1015
kornilov
Вот актуальный план выполнения.
Там еще добавлено пару Join ов но они не влияют, как я понимаю


подумаешь, запросы разные.
11 сен 14, 20:51    [16565889]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить