Гость
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / OFFSET FETCH + ROW_NUMBER() / 17 сообщений из 17, страница 1 из 1
02.08.2021, 16:41
    #40087899
Oleg_SQL
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
OFFSET FETCH + ROW_NUMBER()
Здравствуйте.

Столкнулся с проблемой

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
SELECT *, 
       ISNULL(AllowValue, 0) AS AllowYellowTag
  FROM
(
    SELECT Code, 
           AreaID, 
           Id
      FROM Table1
     WHERE 0 = 0
           AND Code LIKE '%76876876%'
           AND AreaID IN (100, 200)
) AS ms
LEFT JOIN
(
    SELECT StoreID, 
           AllowValue, 
           --ROW_NUMBER() OVER(PARTITION BY StoreID ORDER BY ValueDate DESC) AS rn -- висит часами
           1 AS rn -- летает
      FROM Table2
     WHERE ValueDate < GETDATE()
) AS nda ON ms.id = nda.StoreID
            AND nda.rn = 1
ORDER BY ID
OFFSET 0 ROWS FETCH NEXT 15 ROWS ONLY;



собственно при использовании строки с ROW_NUMBER() - просто зависает намертво.
разница между 1 и ROW_NUMBER() мизерная (5% с отличными от 1)
всего запрос с условием возвращает 11 строк из 100 000 !!!!!
без OFFSET даже с ROW_NUMBER() работает мгновенно....

т.е. именно связка OFFSET FETCH + ROW_NUMBER() вводит в ступор.
Есть мысли? Проверяли на 2-х серверах.
...
Рейтинг: 0 / 0
02.08.2021, 17:58
    #40087936
Владислав Колосов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
OFFSET FETCH + ROW_NUMBER()
Oleg_SQL,

сравните планы запроса.
...
Рейтинг: 0 / 0
02.08.2021, 17:59
    #40087938
komrad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
OFFSET FETCH + ROW_NUMBER()
Oleg_SQL

Есть мысли? Проверяли на 2-х серверах.

мысли такие:
1) показать @@version
2) сравнить медленный и быстрый план
...
Рейтинг: 0 / 0
02.08.2021, 18:49
    #40087962
aleks222
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
OFFSET FETCH + ROW_NUMBER()
komrad
Oleg_SQL

Есть мысли? Проверяли на 2-х серверах.

мысли такие:
1) показать @@version
2) сравнить медленный и быстрый план

Чего там "сравнивать"?
Тут row_number() ваще ненужен.
...
Рейтинг: 0 / 0
03.08.2021, 09:38
    #40088094
Oleg_SQL
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
OFFSET FETCH + ROW_NUMBER()
aleks222

Чего там "сравнивать"?
Тут row_number() ваще ненужен.


Очередной перл ))))
...
Рейтинг: 0 / 0
03.08.2021, 09:39
    #40088095
Oleg_SQL
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
OFFSET FETCH + ROW_NUMBER()
komrad
Oleg_SQL

Есть мысли? Проверяли на 2-х серверах.

мысли такие:
1) показать @@version
2) сравнить медленный и быстрый план



Microsoft SQL Server 2017 (RTM) - 14.0.1000.169 (X64) Aug 22 2017 17:04:49 Copyright (C) 2017 Microsoft Corporation Standard Edition (64-bit) on Windows Server 2016 Standard 10.0 <X64> (Build 14393: )

По поводу плана - так тут на ровном месте затык. Ну будет "план не план" - я могу переписать и без ROW_NUMBER с группировкой и двойной выборкой - так тоже летает.

Вопрос в принципе.
...
Рейтинг: 0 / 0
03.08.2021, 09:50
    #40088102
Посетитель
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
OFFSET FETCH + ROW_NUMBER()
Oleg_SQL,

ответ в принципе - разные способы получения одного результата работают с разной скоростью.

детали - в планах
...
Рейтинг: 0 / 0
03.08.2021, 09:57
    #40088106
Oleg_SQL
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
OFFSET FETCH + ROW_NUMBER()
Посетитель
Oleg_SQL,

ответ в принципе - разные способы получения одного результата работают с разной скоростью.

детали - в планах



я понимаю, что разные скорости. Но для 11 строк выборки (из ~100 000) 1 секунда и более часа (больше нервы не выдерживали ждать ))) это как то совсем не нормально
...
Рейтинг: 0 / 0
03.08.2021, 10:07
    #40088111
aleks222
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
OFFSET FETCH + ROW_NUMBER()
Oleg_SQL
aleks222

Чего там "сравнивать"?
Тут row_number() ваще ненужен.


Очередной перл ))))


Чтобы понять совет - до него нужно дорасти.
Учись, студент.

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
    SELECT Code, 
           AreaID, 
           Id,
           ISNULL(AllowValue, 0) AS AllowYellowTag
      FROM Table1 as ms
            outer apply
            (
                SELECT top(1) AllowValue
                  FROM Table2
                 WHERE StoreID = ms.id and ValueDate < GETDATE()
                 ORDER BY ValueDate DESC
            ) AS nda 
     WHERE 0 = 0
           AND Code LIKE '%76876876%'
           AND AreaID IN (100, 200)
     ORDER BY ID
     OFFSET 0 ROWS FETCH NEXT 15 ROWS ONLY
...
Рейтинг: 0 / 0
03.08.2021, 10:26
    #40088119
Oleg_SQL
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
OFFSET FETCH + ROW_NUMBER()
aleks222
Oleg_SQL
пропущено...


Очередной перл ))))


Чтобы понять совет - до него нужно дорасти.
Учись, студент.

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
    SELECT Code, 
           AreaID, 
           Id,
           ISNULL(AllowValue, 0) AS AllowYellowTag
      FROM Table1 as ms
            outer apply
            (
                SELECT top(1) AllowValue
                  FROM Table2
                 WHERE StoreID = ms.id and ValueDate < GETDATE()
                 ORDER BY ValueDate DESC
            ) AS nda 
     WHERE 0 = 0
           AND Code LIKE '%76876876%'
           AND AreaID IN (100, 200)
     ORDER BY ID
     OFFSET 0 ROWS FETCH NEXT 15 ROWS ONLY



Мальчик, вопрос не в это был. Я без тебя способен решить вопрос скорости.
Вопрос почему обычный запрос вызывает ступор у сервера.
А еще, мальчик, outer apply на больших объемах тоже вводит сервер в ступор. Учись мальчонка ))
И научись сначала читать внимательно суть. Не позорься
...
Рейтинг: 0 / 0
03.08.2021, 10:55
    #40088126
Посетитель
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
OFFSET FETCH + ROW_NUMBER()
Oleg_SQL,

вы сначала поймите, на какой вопрос вы ответ ищете.

Почему в абстрактном случае так бывает, вам ответили
Как бороться, тоже посоветовали
Почему в конкретном случае так - вы отказываетесь предоставить недостающие данные для анализа, продолжение предметной дискуссии по данному вопросу не выглядит возможным.
...
Рейтинг: 0 / 0
03.08.2021, 10:59
    #40088129
komrad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
OFFSET FETCH + ROW_NUMBER()
Oleg_SQL

Microsoft SQL Server 2017 (RTM) - 14.0.1000.169 (X64) Aug 22 2017 17:04:49 Copyright (C) 2017 Microsoft Corporation Standard Edition (64-bit) on Windows Server 2016 Standard 10.0 <X64> (Build 14393: )

Вопрос в принципе.

а на втором сервере тоже голый RTM без апдейтов, коих уже 25 штук?
...
Рейтинг: 0 / 0
03.08.2021, 11:51
    #40088154
Oleg_SQL
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
OFFSET FETCH + ROW_NUMBER()
Посетитель,

предполагаемый план не подойдет? чтобы фактический получить нужно терпеливо подождать несколько часов (если вообще закончится).
sp_whoisactive (есть такая в интернете) показывает, что запрос практически спит. "CPU" прибавляется по 1 в секунду !!!

Буду ждать
...
Рейтинг: 0 / 0
03.08.2021, 11:53
    #40088156
Konst_One
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
OFFSET FETCH + ROW_NUMBER()
ТС,
ну вы бы хоть скрипт табличек привели с индексами, а то действительно разговор ни о чём
...
Рейтинг: 0 / 0
03.08.2021, 13:23
    #40088208
invm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
OFFSET FETCH + ROW_NUMBER()
Oleg_SQL
запрос практически спит. "CPU" прибавляется по 1 в секунду !!!
Смотрите на состояние сессии, когда "спит".
Если suspended - выясняйте какого ресурса ожидает и кто блокирует
Если runnable - ищите кто жрет CPU. Скорее всего, это просто глюк RTM'а и вылечится установкой последнего CU.
...
Рейтинг: 0 / 0
03.08.2021, 15:50
    #40088265
Oleg_SQL
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
OFFSET FETCH + ROW_NUMBER()
invm,

да, suspended.
Прошло более 3-х часов. Отключил запрос.
Думал, что это известная всем кроме меня ситуация ))
Наверное, действительно глюк версии.

Спасибо, буду давить через руководство на обновление.
...
Рейтинг: 0 / 0
03.08.2021, 16:00
    #40088274
invm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
OFFSET FETCH + ROW_NUMBER()
Oleg_SQL,

Suspended - это не глюк. Это ожидание ресурса.
Смотрите какой ресурс ждет запрос, и кто этот ресурс блокирует.
Посмотреть можно той же sp_whoisactive или в sys.dm_exec_requests
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / OFFSET FETCH + ROW_NUMBER() / 17 сообщений из 17, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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