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

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

Код: 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
OFFSET FETCH + ROW_NUMBER()
    #40087936
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Oleg_SQL,

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

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

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

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

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

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

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


Очередной перл ))))
...
Рейтинг: 0 / 0
OFFSET FETCH + ROW_NUMBER()
    #40088095
Oleg_SQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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
OFFSET FETCH + ROW_NUMBER()
    #40088102
Посетитель
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Oleg_SQL,

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

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

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

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



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

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

Почему в абстрактном случае так бывает, вам ответили
Как бороться, тоже посоветовали
Почему в конкретном случае так - вы отказываетесь предоставить недостающие данные для анализа, продолжение предметной дискуссии по данному вопросу не выглядит возможным.
...
Рейтинг: 0 / 0
OFFSET FETCH + ROW_NUMBER()
    #40088129
Фотография komrad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
OFFSET FETCH + ROW_NUMBER()
    #40088154
Oleg_SQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Посетитель,

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

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

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

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

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


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