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

Откуда: Днепропетровск
Сообщений: 91
Всем доброго времени суток.
Прошу консультации, или направления в котором стоит рыть.

Собственно что имеем

1. MS SQL server 2008R2
2. 1C 8.2 1983.
3. Конфигурация собственная

Медленно выполняется запрос около 20 с
по данным Profiler-a

| Duration | Writes | Reads | EventClass
| 20092 | 6 | 10458862 | SP:STMTCompleted
| 20152 | 6 | 10458927 | RPC:Completed
7 мар 14, 19:56    [15690408]     Ответить | Цитировать Сообщить модератору
 Re: Долго выполняется EventClass sp:stmtCompleted  [new]
SomewhereSomehow
Member

Откуда: Moscow
Сообщений: 2480
Блог
alekste,

Ну а что вы хотите услышать предоставив такую информацию? Единственное можно сказать, в вашей процедуре есть запрос который долго выполняется.

Включите в трассу событие "Performance: Showplan XML Statistics profile", заграбьте план, текст запроса и анализируйте. Если не справитесь сами - выкладывайте все это сюда (план как .sqlplan, из профайлера можно получить встав на строку события и нажав правой кнопкой "Extract..." что-то там), запрос, плюс присовокупите структуру таблиц и индексов. Может быть вам дадут советы.
7 мар 14, 20:03    [15690436]     Ответить | Цитировать Сообщить модератору
 Re: Долго выполняется EventClass sp:stmtCompleted  [new]
SomewhereSomehow
Member

Откуда: Moscow
Сообщений: 2480
Блог
SomewhereSomehow,

А вообще, с 1С я бы не стал связываться, там все так специфично. Никогда с этой системой дел не имел, посоветовал бы только найти Вячеслава Гилева, например в фейсбуке, я думаю, он скажет гораздо больше чем абстрактные оптимизаторы. Ну, ИМХО, конечно.
7 мар 14, 20:07    [15690454]     Ответить | Цитировать Сообщить модератору
 Re: Долго выполняется EventClass sp:stmtCompleted  [new]
alekste
Member

Откуда: Днепропетровск
Сообщений: 91
SomewhereSomehow,

"Performance: Showplan XML Statistics profile" включил

exec sp_executesql N'INSERT INTO #tt3 (_Q_000_F_000, _Q_000_F_001, _Q_000_F_002, _Q_000_F_003, _Q_000_F_004RRef, _Q_000_F_005, _Q_000_F_006RRef, _Q_000_F_007RRef, _Q_000_F_008, _Q_000_F_009RRef) SELECT
N''РегистрСведений.XXXX'',
DATEADD(DAY,1.0 - 1,DATEADD(MONTH,CAST(DATEPART(MONTH,T1._Fld24338) AS NUMERIC(4)) - 1,DATEADD(YEAR,(CAST(DATEPART(YEAR,T1._Fld24338) AS NUMERIC(4)) - 2000) - 2000,{ts ''4000-01-01 00:00:00''}))),
DATEADD(SECOND,-CAST(DATEPART(SECOND,T1._Fld24338) AS NUMERIC(4)) - 60.0 * CAST(DATEPART(MINUTE,T1._Fld24338) AS NUMERIC(4)) - 3600.0 * CAST(DATEPART(HOUR,T1._Fld24338) AS NUMERIC(4)) - 86400.0 * (CAST(DATEPART(WEEKDAY,T1._Fld24338) AS NUMERIC(4)) - 1.0),T1._Fld24338),
T1._Fld24338,
T1._Fld24336RRef,
CAST(SUM(CASE WHEN ((T1._Fld24347 <= 0.0) AND (T2._Folder) = 0x01) THEN T1._Fld24344 ELSE 0.0 END) AS NUMERIC(26, 8)),
T1._Fld24334RRef,
T1._Fld24335RRef,
CAST(SUM(T1._Fld24344) AS NUMERIC(26, 8)),
T1._Fld24333RRef
FROM _InfoRg24332 T1 WITH(NOLOCK)
LEFT OUTER JOIN _Reference22242 T2 WITH(NOLOCK)
ON T1._Fld24334RRef = T2._IDRRef
WHERE (T1._Fld24333RRef = @P1) AND (T1._Fld24336RRef IN
(SELECT
T3._REFFIELDRRef AS REFFIELDRRef
FROM #tt1 T3 WITH(NOLOCK))) AND ((T1._Fld24338 >= DATEADD(DAY,CAST(DATEPART(DAY,@P2) AS NUMERIC(4)) - 1,DATEADD(MONTH,CAST(DATEPART(MONTH,@P3) AS NUMERIC(4)) - 1,DATEADD(YEAR,(CAST(DATEPART(YEAR,@P4) AS NUMERIC(4)) - 2000) - 2000,@P5)))) AND (T1._Fld24338 <= DATEADD(SECOND,@P6,DATEADD(MINUTE,@P7,DATEADD(HOUR,@P8,DATEADD(DAY,CAST(DATEPART(DAY,@P9) AS NUMERIC(4)) - 1,DATEADD(MONTH,CAST(DATEPART(MONTH,@P10) AS NUMERIC(4)) - 1,DATEADD(YEAR,(CAST(DATEPART(YEAR,@P11) AS NUMERIC(4)) - 2000) - 2000,@P12)))))))) AND (T1._Fld24335RRef IN
(SELECT
T4._REFFIELDRRef AS REFFIELDRRef
FROM #tt2 T4 WITH(NOLOCK)))
GROUP BY T1._Fld24333RRef,
T1._Fld24335RRef,
T1._Fld24334RRef,
T1._Fld24336RRef,
T1._Fld24338',N'@P1 varbinary(16),@P2 datetime,@P3 datetime,@P4 datetime,@P5 datetime,@P6 numeric(10),@P7 numeric(10),@P8 numeric(10),@P9 datetime,@P10 datetime,@P11 datetime,@P12 datetime',0x8941885A9288458911E3A5E5541F08B1,'4014-03-06 00:00:00','4014-03-06 00:00:00','4014-03-06 00:00:00','4000-01-01 00:00:00',59,59,23,'4014-06-30 00:00:00','4014-06-30 00:00:00','4014-06-30 00:00:00','4000-01-01 00:00:00'
7 мар 14, 20:21    [15690523]     Ответить | Цитировать Сообщить модератору
 Re: Долго выполняется EventClass sp:stmtCompleted  [new]
alekste
Member

Откуда: Днепропетровск
Сообщений: 91
Дело в том что данные за вчера выдаются быстро, а за сегодня медленно. Хотелось бы понять это проблема в физике(диски, память) или логика
7 мар 14, 20:23    [15690530]     Ответить | Цитировать Сообщить модератору
 Re: Долго выполняется EventClass sp:stmtCompleted  [new]
SomewhereSomehow
Member

Откуда: Moscow
Сообщений: 2480
Блог
alekste,

И что это? Текст запроса, который получается из других событий. А где план?
7 мар 14, 20:23    [15690535]     Ответить | Цитировать Сообщить модератору
 Re: Долго выполняется EventClass sp:stmtCompleted  [new]
SomewhereSomehow
Member

Откуда: Moscow
Сообщений: 2480
Блог
alekste
Дело в том что данные за вчера выдаются быстро, а за сегодня медленно. Хотелось бы понять это проблема в физике(диски, память) или логика

Проблема воспроизводится? Данные за вчера быстро, за сегодня медленно? Что со статистиками, может быть их обновлять после загрузкиданных?
7 мар 14, 20:25    [15690546]     Ответить | Цитировать Сообщить модератору
 Re: Долго выполняется EventClass sp:stmtCompleted  [new]
SomewhereSomehow
Member

Откуда: Moscow
Сообщений: 2480
Блог
alekste,

Для решения вашей проблемы, если вы сами не знаете ее решения, необходимо:
- актуальный план медленного запроса
- актуальный план быстрого запроса
- структура таблиц и индексов.

Если проблема непонятная, нельзя выявить проблемный план, или он ничего не дает - вам сюда.
7 мар 14, 20:29    [15690568]     Ответить | Цитировать Сообщить модератору
 Re: Долго выполняется EventClass sp:stmtCompleted  [new]
alekste
Member

Откуда: Днепропетровск
Сообщений: 91
SomewhereSomehow,
Быстрый запрос http://yadi.sk/d/Bu1-iiQkK8W5t
Медленный запрос http://yadi.sk/d/h4Ea6wP8K8W8X
Медленного строиться отчет который генерится по новым данным
7 мар 14, 20:42    [15690657]     Ответить | Цитировать Сообщить модератору
 Re: Долго выполняется EventClass sp:stmtCompleted  [new]
SomewhereSomehow
Member

Откуда: Moscow
Сообщений: 2480
Блог
alekste,

Ну так понятно, более-менее, классическая ситуация.
В таблице [_InfoRg24332] имеется 79 316 200 строк. Добавилась какая-то большая порция данных (около 1 479 664 строк), но недостаточно большая чтобы дотягивать до 20% от таблицы и вызвать обновление статистики. Наверняка там еще где-то возрастающий ключ. В результате имеем такую оценку.
Картинка с другого сайта.

Из-за неверной статистики оптимизатор предполагает 1 строку и строит соответсвующий план с NL.

Так что первое, что я бы сделал это:
update statistics _InfoRg24332 with fullscan;
8 мар 14, 12:01    [15692406]     Ответить | Цитировать Сообщить модератору
 Re: Долго выполняется EventClass sp:stmtCompleted  [new]
SomewhereSomehow
Member

Откуда: Moscow
Сообщений: 2480
Блог
Да, еще одно, я не знаю какое у вас там оборудование и какая нагрузка, насколько быстро идет сканирвоание 79 милионной таблицы. Просто имейте ввиду, что обновление статистики с полным сканированием (with fullscan) предполагает полное сканирование таблицы столько раз, сколько на ней висит статистик. Так что если с этим есть проблемы, можете выбрать какое-то техническое окно и выполнить обновление тогда, либо выполнить обновление без предложения "with fullscan" - в этом случае статистика обновиться на основании сэмплов из таблицы, часто этого бывает достаточно.
8 мар 14, 12:06    [15692423]     Ответить | Цитировать Сообщить модератору
 Re: Долго выполняется EventClass sp:stmtCompleted  [new]
alekste
Member

Откуда: Днепропетровск
Сообщений: 91
SomewhereSomehow,
Дело в том что программа ежедневно при расчете генерит огромную порцию данных, после чего идет ее анализ, который подтормаживает из за проблем со статистикой. В моем понимании есть проблеммы с не оптимальным алгоритмом программы
Разработчик ПО отнекивается фразамы "На других проектах все работает отлично".
Каким образом решить данный вопрос?
10 мар 14, 15:55    [15699247]     Ответить | Цитировать Сообщить модератору
 Re: Долго выполняется EventClass sp:stmtCompleted  [new]
Glory
Member

Откуда:
Сообщений: 104751
У ваших временных таблиц нет никаких индексов
10 мар 14, 16:03    [15699267]     Ответить | Цитировать Сообщить модератору
 Re: Долго выполняется EventClass sp:stmtCompleted  [new]
SomewhereSomehow
Member

Откуда: Moscow
Сообщений: 2480
Блог
alekste,

В третий раз пишу, обновляйте статистику после загрузки данных. Вручную. Командой update statistics.

Если вам не нравится такой вариант могу предложить еще несколько.

  • Использовать флаг трассировки 2371, он снижает порог в 20%, после которого идет автообновление статистики, для больших таблиц пропорционально размеру таблицы, т.е. чем больше размер таблицы, тем ниже процент. Писали об этом в блоге SAP, может и для 1С такой подход будет нормальным Running SAP on SQL Server Blog: Changes to automatic update statistics in SQL Server – traceflag 2371.

  • Использовать флаги трассировки 2389, 2390 для обновления статистики по возрастающим ключам, ежели таковые есть. Тоже меняет логику когда срабатывает обновление: MSDN Blogs -Ian Jose's WebLog - Ascending Keys and Auto Quick Corrected Statistics, [url=]Fabiano Amorim - Statistics on Ascending Columns[/url] (есть еще "грязный хак", описанный Thomas Kejser-омThe Ascending Key Problem in Fact Tables– Part one: Pain!б The Ascending Column Problem in Fact Tables –Part two: Stat Job!, но его я, как и Томас, прочем, не советую применять на продакшене.)

  • Зафиксировать "правильный" план при помощи Руководств плана

    Glory
    У ваших временных таблиц нет никаких индексов

    Кстати да, +1.

    Если есть возможность, создайте индекс, чтобы был поиск. Даже на очень маленькой таблице в одну страницу - это имеет значение. Хотя казалось бы и так и так доступ осуществляется к одной странице, но если скан таблицы происходит много-много раз (например на внутренней стороне NL соединения), то узким местом становится процессор, который вынужден дополнительно оценивать предикат, а не просто выбрать поиском.

    Но лучше поборите проблему со статистикой в корне, чтобы получился другой план. Благо способов много.
  • 10 мар 14, 17:21    [15699632]     Ответить | Цитировать Сообщить модератору
    Все форумы / Microsoft SQL Server Ответить