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

Откуда:
Сообщений: 1214
Столкнулся с непонятной ситуацей. Есть простой джойн на три таблички, с индексами и всей хурмой, результаты которого льются в #Tmp.

Размер данных крохотный, ~50 строк на 400кб. При этом вставка длиться примерно полторы минуты ( 32 ядра и дофигалион оперативки) и занимает 80(!) процентов от всего INSERT...SELECT .

Попробовал #Tmp поменять на @Tmp, результат такой же.

Не связано ли эта хурма с неверными оценками?
План запроса показывает, что ожидается для инсерта 80000 строк на 650 мегабайт, а приходит 50 на 400кб.

Куда копать, товарищи?
6 июн 17, 11:33    [20542662]     Ответить | Цитировать Сообщить модератору
 Re: Долгий insert в #TempTable и странные эстимейшены  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 36970
Вы актуальный план покажите, хватит его пересказывать своими словами.
6 июн 17, 12:18    [20542856]     Ответить | Цитировать Сообщить модератору
 Re: Долгий insert в #TempTable и странные эстимейшены  [new]
AlanDenton
Member [скрыт]

Откуда:
Сообщений: 1004
Скрипт покажите того, что вы пытаетесь вставить во временную таблицу
6 июн 17, 12:22    [20542875]     Ответить | Цитировать Сообщить модератору
 Re: Долгий insert в #TempTable и странные эстимейшены  [new]
o-o
Guest
автор
Размер данных крохотный, ~50 строк на 400кб. При этом вставка длиться примерно полторы минуты

представляете, а у нас вообще одна таблица, даже не 3.
правда она 400Гб, но кому это важно.
мы подсчитываем жалкий count(*) с тучей условий.
так вот, если вставить результат в темповую таблицу, то ожидается всего 1 строка.
и это правильная оценка.
но вставляется полчаса
(или все же читается полчаса, а вставляется моментально, не?)
6 июн 17, 12:34    [20542935]     Ответить | Цитировать Сообщить модератору
 Re: Долгий insert в #TempTable и странные эстимейшены  [new]
Cammomile
Member

Откуда:
Сообщений: 1214
Я не очень представляю как сюда сунуть именно этот кусок плана запроса.
Но судя по SqlSentry PlanExporer именно вставка весит много.
6 июн 17, 13:36    [20543224]     Ответить | Цитировать Сообщить модератору
 Re: Долгий insert в #TempTable и странные эстимейшены  [new]
Cammomile
Member

Откуда:
Сообщений: 1214
AlanDenton,Ну какой вам толк от скрипта с конкретной промбазы?
6 июн 17, 13:36    [20543227]     Ответить | Цитировать Сообщить модератору
 Re: Долгий insert в #TempTable и странные эстимейшены  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
Cammomile,

автор
Я не очень представляю как сюда сунуть именно этот кусок плана запроса.
Но судя по SqlSentry PlanExporer именно вставка весит много
AlanDenton,Ну какой вам толк от скрипта с конкретной промбазы?

ну что ж, достаём шары и начинаем предсказывать: обновите статистику
6 июн 17, 13:39    [20543240]     Ответить | Цитировать Сообщить модератору
 Re: Долгий insert в #TempTable и странные эстимейшены  [new]
Cammomile
Member

Откуда:
Сообщений: 1214
Яж не упираюсь, просто вся XML плана весит столько сколько движок форума постить не дает.
6 июн 17, 13:41    [20543248]     Ответить | Цитировать Сообщить модератору
 Re: Долгий insert в #TempTable и странные эстимейшены  [new]
aleks2
Guest
Cammomile
Яж не упираюсь, просто вся XML плана весит столько сколько движок форума постить не дает.


Простенький запрос, да...

Страдалец, план - не нужен.
У тя запрос кривее сабли янычара.
6 июн 17, 13:46    [20543271]     Ответить | Цитировать Сообщить модератору
 Re: Долгий insert в #TempTable и странные эстимейшены  [new]
Cammomile
Member

Откуда:
Сообщений: 1214
aleks2, много ехидства. План у меня от хранимки с миллионом запросов, один из них "простенький".
Поскольку лично я в XML планах не ориентируюсь, я и пишу что не понимаю как оттудова достать "значимую" часть.
6 июн 17, 13:48    [20543280]     Ответить | Цитировать Сообщить модератору
 Re: Долгий insert в #TempTable и странные эстимейшены  [new]
aleks2
Guest
Cammomile
aleks2, много ехидства. План у меня от хранимки с миллионом запросов, один из них "простенький".
Поскольку лично я в XML планах не ориентируюсь, я и пишу что не понимаю как оттудова достать "значимую" часть.


101% проблем кривого запроса решается без всяких планов.
Заканчивай жевать сопли и копируй запрос.
6 июн 17, 13:52    [20543295]     Ответить | Цитировать Сообщить модератору
 Re: Долгий insert в #TempTable и странные эстимейшены  [new]
o-o
Guest
Cammomile
Яж не упираюсь, просто вся XML плана весит столько сколько движок форума постить не дает.

зипьте.
планы хорошо сжимаются
6 июн 17, 13:55    [20543302]     Ответить | Цитировать Сообщить модератору
 Re: Долгий insert в #TempTable и странные эстимейшены  [new]
Cammomile
Member

Откуда:
Сообщений: 1214
INSERT INTO #BaseContactInfo 
 

    SELECT  
      c_regstatus = LTRIM(RTRIM(ABE.c_regstatus))
    , c_abonentId = LTRIM(RTRIM(AB.c_abonentId))  
    , c_HeadName = LTRIM(RTRIM(ABE.c_HeadName)) 
    , c_heademail = LTRIM(RTRIM(ABE.c_heademail))
    , c_headfax = LTRIM(RTRIM(ABE.c_headfax))
    , c_headphone = LTRIM(RTRIM(ABE.c_headphone))
    , c_headposition = LTRIM(RTRIM(ABE.c_headposition))
    , c_contactfio = LTRIM(RTRIM(ABE.c_contactfio))
    , c_contactemail = LTRIM(RTRIM(ABE.c_contactemail))
    , c_contactfax = LTRIM(RTRIM(ABE.c_contactfax))
    , c_contactphone = LTRIM(RTRIM(ABE.c_contactphone))
    , c_contactposition = LTRIM(RTRIM(ABE.c_contactposition))
    , c_inn = LTRIM(RTRIM(ABE.c_inn))
    , c_accountid = ABE.c_accountid 
    , ParentCustomerIdName = LTRIM(RTRIM(ACC.[Name]))

    , HeadFirstName = PARSENAME(REPLACE(LTRIM(RTRIM(ABE.c_HeadName)), ' ', '.'), 2 ) 
    , HeadMiddleName = PARSENAME(REPLACE(LTRIM(RTRIM(ABE.c_HeadName)), ' ', '.'), 1 ) 
    , HeadLastName = PARSENAME(REPLACE(LTRIM(RTRIM(ABE.c_HeadName)), ' ', '.'), 3 ) 
 
    , PrimaryContactFirstName = PARSENAME(REPLACE(LTRIM(RTRIM(ABE.c_contactfio)), ' ', '.'), 2 )   
    , PrimaryContactMiddleName  = PARSENAME(REPLACE(LTRIM(RTRIM(ABE.c_contactfio)), ' ', '.'), 1 ) 
    , PrimaryContactLastName  = PARSENAME(REPLACE(LTRIM(RTRIM(ABE.c_contactfio)), ' ', '.'), 3 ) 

    , VersionNumber  = AB.VersionNumber
   
    FROM 
      MSCRM.dbo.c_abonentBase AB   
      INNER JOIN  MSCRM.dbo.c_abonentExtensionBase ABE ON ABE.c_abonentId = AB.c_abonentId
      INNER JOIN MSCRM.dbo.AccountBase ACC ON ACC.AccountId = ABE.c_accountid 
    WHERE
      1 = 1 
      AND AB.statuscode = 1 
      AND AB.statecode = 0
      AND ABE.c_sTage = @c_stage
      AND ABE.c_type <> @EdoType 
      AND ABE.c_type <> @CashdeskType 
      
      AND Ab.VersionNumber > @LastFixedVersionNumber
      /*DEBUG*/
      /*AND ABE.c_accountid = '97A93EB6-4AAF-4250-AAE4-5521C96A57CF' */
    OPTION (RECOMPILE , MAXDOP 1)
6 июн 17, 13:56    [20543306]     Ответить | Цитировать Сообщить модератору
 Re: Долгий insert в #TempTable и странные эстимейшены  [new]
o-o
Guest
"32 ядра", MAXDOP 1
-----
вы за полторы минуты ожидания не посмотрели что ли?
6 июн 17, 14:00    [20543318]     Ответить | Цитировать Сообщить модератору
 Re: Долгий insert в #TempTable и странные эстимейшены  [new]
Cammomile
Member

Откуда:
Сообщений: 1214
Очень много ехидства чую я. С параллелизмом оно работает вместо полутора минут 2.5 минуты.

Я ж тут погроммист, а не скульдб админ. Яхз, что на продакшене накручено, если честно. Максдоп поставил эмпирическим путем.
6 июн 17, 14:02    [20543321]     Ответить | Цитировать Сообщить модератору
 Re: Долгий insert в #TempTable и странные эстимейшены  [new]
Cammomile
Member

Откуда:
Сообщений: 1214
А главное, повторяю еще раз, план запроса показывает что вот весь этот инсерт весит 96% от хранимки , а из 96% 75% это именно вставка.
6 июн 17, 14:04    [20543330]     Ответить | Цитировать Сообщить модератору
 Re: Долгий insert в #TempTable и странные эстимейшены  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 36970
Cammomile
А главное, повторяю еще раз, план запроса показывает что вот весь этот инсерт весит 96% от хранимки , а из 96% 75% это именно вставка.
Актуальный план запроса мы увидем сегодня? Не предварительный, где вся процедура, а именно актуальный для этого стейтмента.
6 июн 17, 14:05    [20543337]     Ответить | Цитировать Сообщить модератору
 Re: Долгий insert в #TempTable и странные эстимейшены  [new]
o-o
Guest
Cammomile
Очень много ехидства чую я. С параллелизмом оно работает вместо полутора минут 2.5 минуты.

Я ж тут погроммист, а не скульдб админ. Яхз, что на продакшене накручено, если честно. Максдоп поставил эмпирическим путем.

нет ну я что ли про ядра пишу, типа 32,
а потом еще и ограничиваю?
это как писать "ваще у меня еще и личный вертолет,
и посадочная площадка на крыше офиса.
но помогите, плиз, советом, до работы добираюсь 3 часа,
то автобус ломается, то в пробке стоит".
---
план-то будете зипить или как?
6 июн 17, 14:05    [20543338]     Ответить | Цитировать Сообщить модератору
 Re: Долгий insert в #TempTable и странные эстимейшены  [new]
o-o
Guest
Cammomile
А главное, повторяю еще раз, план запроса показывает что вот весь этот инсерт весит 96% от хранимки , а из 96% 75% это именно вставка.

ну так посмотрите уже ожидания, может,
прочесть вы вообще не можете, сидите ожидаете окончание чей-то вставки,
и план, и инсерт, вообще тогда никаким боком
----
в оценочном плане все проценты вообще левые могут быть
6 июн 17, 14:08    [20543351]     Ответить | Цитировать Сообщить модератору
 Re: Долгий insert в #TempTable и странные эстимейшены  [new]
Cammomile
Member

Откуда:
Сообщений: 1214
Ура, я справился с планом.
6 июн 17, 14:10    [20543369]     Ответить | Цитировать Сообщить модератору
 Re: Долгий insert в #TempTable и странные эстимейшены  [new]
Cammomile
Member

Откуда:
Сообщений: 1214
http://dropmefiles.com/kv0hL
6 июн 17, 14:12    [20543373]     Ответить | Цитировать Сообщить модератору
 Re: Долгий insert в #TempTable и странные эстимейшены  [new]
o-o
Guest
ну это только вам 93Кб к сообщению не прицепляют.
мы уж подумали, там черт знает что за план, мегабайты xml.
смотрите ожидания
6 июн 17, 14:21    [20543409]     Ответить | Цитировать Сообщить модератору
 Re: Долгий insert в #TempTable и странные эстимейшены  [new]
Cammomile
Member

Откуда:
Сообщений: 1214
Блин, я счаз полыхну. Как и куда смотреть ожидания?!

Я начал топик с того, что ожидания не такие как реально обработанные строки.

Но я НЕ ЗНАЮ, как это влияет и влияет ли вообще на вставку.

Какие я должен сделать выводы?
6 июн 17, 14:26    [20543428]     Ответить | Цитировать Сообщить модератору
 Re: Долгий insert в #TempTable и странные эстимейшены  [new]
SomewhereSomehow
Member

Откуда: Moscow
Сообщений: 2480
Блог
Cammomile
План у меня от хранимки с миллионом запросов, один из них "простенький".
...
весь этот инсерт весит 96% от хранимки , а из 96% 75% это именно вставка


Добрый день. Я правильно понимаю, что вы сделали следующее: получили план всей хранимой процедуры, далее, основываясь на процентах, которые отображает студия, выбрали тот где процентов показывается больше всего, а уже в этом запросе выбрали тот оператор на котором опять же больше всего процент?

Если так, то могу сказать, что "проценты", как и стоимость, основываются на оценках и не отражают реальность в случае, если оценки неверные. Такой подход мог бы быть полезным, если бы оценки всех планов в точности соответствовали реальности. Однако, в таких планах, когда оценки нормальные, проблемы как раз наблюдаются не так часто, поэтому, эти проценты больше путают, чем помогают. Если я правильно помню, даже был какой-то Item на Connect что-то с этим сделать или убрать совсем или что-то еще.

Так что прежде всего, если у вас в хранимке много запросов определите точно, на основе реального выполнения (а не стоимости), какой именно запрос тормозит, включите profiler или xEvents и посмотрите на duration-ы реальных запросов. Т.е. установите точно, что проблема именно в том запросе, на который вы смотрите.
6 июн 17, 14:26    [20543429]     Ответить | Цитировать Сообщить модератору
 Re: Долгий insert в #TempTable и странные эстимейшены  [new]
Cammomile
Member

Откуда:
Сообщений: 1214
Добрый! Да, именно так я и сделал. Выполнил хранимку с кнопкой "Включить действительный план выполнения".

Как проделать эту работу с помощью профайлера? Какие там надо выбрать галочки для отслеживания?
6 июн 17, 14:28    [20543439]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2 3   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить