powered by simpleCommunicator - 2.0.50     © 2025 Programmizd 02
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / План выполнения указывает на неактуальную статистику, но она формируется автоматически
8 сообщений из 8, страница 1 из 1
План выполнения указывает на неактуальную статистику, но она формируется автоматически
    #40109991
Диана Орел
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
пытаюсь разобраться с планом выполнения. Смысл запроса такой: есть справочник WHS- T_WHS_SNST, у каждого WHS есть 2 параметра BRANCH_ID, FRMT_ID; есть таблица дней в году - T_DAYS, есть какая-то сумма (FRCST_SUM) для некоторых WHS за Day_ID - T_WHS_FRCST_OPSUM_DAY_SNST. Надо для всех WHS в справочнике посчитать сумму по параметрам BRANCH_ID, FRMT_ID за день и за месяц
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
declare  @BEGIN_MONTH int = 202102, @END_MONTH int = 202102
SELECT 
T1.WHS_ID,
T2.DAY_ID,
T2.MONTH_ID,
SUM(COALESCE(T3.FRCST_SUM, 0))OVER (PARTITION BY T1.BRANCH_ID, T1.FRMT_ID, T2.DAY_ID)FRCST_SUM_DAY,
SUM(COALESCE(T3.FRCST_SUM, 0))OVER (PARTITION BY T1.BRANCH_ID, T1.FRMT_ID, T2.MONTH_ID)FRCST_SUM_MONTH
FROM DBO.T_WHS_SNST T1 CROSS JOIN DBO.T_DAYS T2
LEFT JOIN DBO.T_WHS_FRCST_OPSUM_DAY_SNST T3 ON T3.DAY_ID = T2.DAY_ID AND T1.WHS_ID = T3.WHS_ID
WHERE T2.MONTH_ID BETWEEN @BEGIN_MONTH AND @END_MONTH
go


смотрю актуальный план выполнения. разница между Estimated и Actual до 3000%. рекомендации такие: One of the common reasons for estimation defferences is the use of different statistics. Check if statistics for table T_WHS_SNST are different or stale.

Но статистика, по идее, должна быть актуальная. Потому что только что создала первичный ключ по полю WHS_ID, индекс по полям BRANCH_ID, FRMT_ID



Смотрю, на какие столбцы в таблице есть статистика запросом
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
SELECT OBJECT_NAME(s.object_id) AS object_name, 
    COL_NAME(sc.object_id, sc.column_id) AS column_name,  
    s.name AS statistics_name  
FROM sys.stats AS s 
INNER JOIN sys.stats_columns AS sc  
    ON s.stats_id = sc.stats_id AND s.object_id = sc.object_id  
WHERE --s.name like '_WA%'  
 OBJECT_NAME(s.object_id)  = 'T_WHS_SNST'
ORDER BY 1;



column_namestatistics_nameWHS_IDPK_T_WHS_SNSTBRANCH_IDI_T_WHS_SNST_BRANCH_FRMTFRMT_IDI_T_WHS_SNST_BRANCH_FRMTBRANCH_ID_WA_Sys_0000000E_21B6055DFRMT_ID_WA_Sys_00000006_21B6055D

что не правильно делаю?
...
Рейтинг: 0 / 0
План выполнения указывает на неактуальную статистику, но она формируется автоматически
    #40109992
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Диана Орел,

Запрос может не использовать статистику в силу его особенностей. При просмотре плана в виде XML использованные статистики отображаются.
...
Рейтинг: 0 / 0
План выполнения указывает на неактуальную статистику, но она формируется автоматически
    #40110019
Диана Орел
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Владислав Колосов, из контекстного меню выбрала Show Execution Plan XML.... Так? в тексте XML не нашла про статистику ничего. Зато нашла вот что:
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
<WaitStats>
              <Wait WaitType="LATCH_EX" WaitTimeMs="2" WaitCount="34" />
              <Wait WaitType="MEMORY_ALLOCATION_EXT" WaitTimeMs="4" WaitCount="6990" />
              <Wait WaitType="CXROWSET_SYNC" WaitTimeMs="15" WaitCount="16" />
              <Wait WaitType="RESERVED_MEMORY_ALLOCATION_EXT" WaitTimeMs="47" WaitCount="89975" />
              <Wait WaitType="SESSION_WAIT_STATS_CHILDREN" WaitTimeMs="51" WaitCount="19" />
              <Wait WaitType="PAGELATCH_SH" WaitTimeMs="138" WaitCount="663" />
              <Wait WaitType="PAGELATCH_UP" WaitTimeMs="267" WaitCount="1359" />
              <Wait WaitType="SOS_SCHEDULER_YIELD" WaitTimeMs="1082" WaitCount="1898" />
              <Wait WaitType="ASYNC_NETWORK_IO" WaitTimeMs="28121" WaitCount="17143" />
              <Wait WaitType="CXPACKET" WaitTimeMs="239733" WaitCount="150099" />
            </WaitStats>


посмотрела в инете, SOS_SCHEDULER_YIELD - это большая нагрузка на CPU. рекомендуется улучшить запрос. Как его улучшить?? только использовать подзапросы group by. Тогда когда оправдано использовать оконные функции?

CXPACKET возможно также из-за статистики и фрагментации
фрагментацию индексов проверила
NameTable IndexId IndexName FragmentationT_WHS_SNST 1 PK_T_WHS_SNST 0.866462793068298T_WHS_SNST 2 I_T_WHS_SNST_BRANCH_FRMT 16.9642857142857
...
Рейтинг: 0 / 0
План выполнения указывает на неактуальную статистику, но она формируется автоматически
    #40110028
aleks222
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Диана Орел
Владислав Колосов, из контекстного меню выбрала Show Execution Plan XML.... Так? в тексте XML не нашла про статистику ничего. Зато нашла вот что:
посмотрела в инете, SOS_SCHEDULER_YIELD - это большая нагрузка на CPU. рекомендуется улучшить запрос. Как его улучшить??

Для начала, прекратить херачить cross join почем зря.

ЗЫ. Сначала накроссджойнимохеренноеколичествонепоймичего.
Потом фильтруем базар.
...
Рейтинг: 0 / 0
План выполнения указывает на неактуальную статистику, но она формируется автоматически
    #40110029
Диана Орел
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
aleks222
Диана Орел
Владислав Колосов, из контекстного меню выбрала Show Execution Plan XML.... Так? в тексте XML не нашла про статистику ничего. Зато нашла вот что:
посмотрела в инете, SOS_SCHEDULER_YIELD - это большая нагрузка на CPU. рекомендуется улучшить запрос. Как его улучшить??

Для начала, прекратить херачить cross join почем зря.

ЗЫ. Сначала накроссджойнимохеренноеколичествонепоймичего.
Потом фильтруем базар.

а как по другому?? мне надо размножить WHS_ID по всем дням из периода.
...
Рейтинг: 0 / 0
План выполнения указывает на неактуальную статистику, но она формируется автоматически
    #40110031
aleks222
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Диана Орел
aleks222
пропущено...

Для начала, прекратить херачить cross join почем зря.

ЗЫ. Сначала накроссджойнимохеренноеколичествонепоймичего.
Потом фильтруем базар.

а как по другому??

Руками и головой.
У вас суммируется таблица T3.
От того, что вы к ней прихерачили что-то, сумма не изменится.
...
Рейтинг: 0 / 0
План выполнения указывает на неактуальную статистику, но она формируется автоматически
    #40110035
Диана Орел
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
aleks222, сумма не изменится, правильно, но в этой таблице не все WHS_ID и не все DAY_ID. Поэтому я сначала создаю матрицу всех возможных пересечений, и к ним прибавляю уже сумму. Задумка такая была.
Результат.
там таблица с суммами left join прибавляется

whs_id day_id frcst_sum sum_day sum_month23 2021-01-01 10.0 15.030.024 2021-01-01 NULL 15.0 30.0...70 2021-01-31 NULL 15.0 30.0
...
Рейтинг: 0 / 0
План выполнения указывает на неактуальную статистику, но она формируется автоматически
    #40110046
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Диана Орел,

кросс джойн. Зачем ему статистика, кстати сказать? Он перебирает все строки, надо учесть, что и памяти много потребуется, надо же результат умножения таблиц где-то хранить.
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / План выполнения указывает на неактуальную статистику, но она формируется автоматически
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]