Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Медленная отдача, когда есть колона bit / 15 сообщений из 15, страница 1 из 1
06.03.2019, 10:25
    #39782799
TPAKTOPA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Медленная отдача, когда есть колона bit
Здравствуйте, ситуацията такая:
Таблица 500к записей, делаю select id from ... join с фильтром по дате от-до, выполняется за 4 секунды - нормально.
Делаю то же самое, только select * ( все колоны) - 55 секунд. Методом тыка установил, что проблем появляется, когда делаю select bit колоны ?!? Их несколько! Колоны были nullable, сделал их not nullable, ситуация чуть лучше - 40 секунд. Вчера потерял несколько часов на этот проблем, гуглил - ничего схожего не нашел.

Может кто-то сталкивался ?

select @@VERSION
Microsoft SQL Server 2016 (SP2-CU4-OD) (KB4479742) - 13.0.5237.0 (X64) Dec 3 2018 21:07:34 Copyright (c) Microsoft Corporation Standard Edition (64-bit) on Windows Server 2016 Standard 10.0 <X64> (Build 14393: ) (Hypervisor)
...
Рейтинг: 0 / 0
06.03.2019, 10:52
    #39782809
iiyama
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Медленная отдача, когда есть колона bit
...
Рейтинг: 0 / 0
06.03.2019, 11:49
    #39782846
TPAKTOPA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Медленная отдача, когда есть колона bit
Заметил что-то очень странное,
Estimated Number of Rows - 452'521
Actual Number of Rows - 4'024 ( столько вернул select )
...
Рейтинг: 0 / 0
06.03.2019, 11:52
    #39782851
AlanDenton
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Медленная отдача, когда есть колона bit
8 колонок типа BIT храняться в одном байте. За счет внутренней оптимизации когда таких колонок больше, чем 32 на таблице наблюдал небольшие тормоза, но описанная вами ситуация видимо возникает из-за других причин. Покажите план выполнения и статистику ожидания на уровне сессии. Как раз вам версия сиквела это позволяет сделать:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
SELECT session_id
     , wait_type
     , wait_time = CAST(wait_time_ms / 1000. AS DECIMAL(18,4))
     , wait_resource = CAST((wait_time_ms - signal_wait_time_ms) / 1000. AS DECIMAL(18,4))
     , wait_signal = CAST(signal_wait_time_ms / 1000. AS DECIMAL(18,4))
     , wait_time_percent = CAST(100. * wait_time_ms / SUM(wait_time_ms) OVER (PARTITION BY session_id) AS DECIMAL(18,2))
     , waiting_tasks_count
     , max_wait_time = CAST(max_wait_time_ms / 1000. AS DECIMAL(18,4))
FROM sys.dm_exec_session_wait_stats -- 2016+
WHERE session_id != @@spid
    AND wait_time_ms > 0
ORDER BY SUM(wait_time_ms) OVER (PARTITION BY session_id) DESC
       , wait_time_ms DESC
...
Рейтинг: 0 / 0
06.03.2019, 12:04
    #39782865
Сруль.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Медленная отдача, когда есть колона bit
Итак, время отклика складывается из двух слагаемых.
Первое-это время поиска нужных записей,
второе-это их протаскивание по сети.
Протаскивание по сети: это колличество записей умножить на длину.
Теперь, то что ваш запрос-после фильтра с записю минимальной длины
берёт, 4 секунды, не знаю о каком колличестве идёт речь, но даже, если брать
по максимуму-многовато. Возможно, нет индекса на проверяемой поле.
Скажем так, если вы сделаете select count(*) и это возьмёт больше нуля,
проверьте индекс. Если вы не хотите все несколько сотен показывать юзеру
то сделайте на сервере хоть какую-ту группировку.
...
Рейтинг: 0 / 0
06.03.2019, 12:35
    #39782897
TPAKTOPA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Медленная отдача, когда есть колона bit
AlanDenton Покажите план выполнения и статистику ожидания на уровне сессии.
Не уверен, что точно показать. Вот результат вашего SQL-а, пока в другом окне работала медленная заявка.
...
Рейтинг: 0 / 0
06.03.2019, 12:38
    #39782900
TPAKTOPA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Медленная отдача, когда есть колона bit
AlanDenton,

План прилагаю
...
Рейтинг: 0 / 0
06.03.2019, 12:42
    #39782904
TPAKTOPA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Медленная отдача, когда есть колона bit
AlanDenton,

Estimation тоже добавил. Перед выполнением заявки делаю DBCC DROPCLEANBUFFERS;
Раньше не делал, и время было различное, каждый раз.

Сруль , результат маленький, INT + BIT колоны, 4к записей, SSMS клиент.
...
Рейтинг: 0 / 0
06.03.2019, 13:23
    #39782943
msLex
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Медленная отдача, когда есть колона bit
TPAKTOPA,

вы оба плана выкладывайте, а не только медленный.

В качестве предположения, без bit колонок вместо скана кластреного индекса происходит seek по некластерному индексу, в котором просто нет этих bit колонок.


Можете попробовать

Код: sql
1.
2.
3.
...
from toffers o with(forceseek) 
...
...
Рейтинг: 0 / 0
06.03.2019, 13:45
    #39782970
AlanDenton
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Медленная отдача, когда есть колона bit
Было бы неплохо сделать покрывающий индекс либо изменить текущий. Схемы в вашей БД мы не знаем, а потому фильтрация у вас не может в полной мере использовать predicate pushdown
...
Рейтинг: 0 / 0
06.03.2019, 17:33
    #39783146
TPAKTOPA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Медленная отдача, когда есть колона bit
AlanDenton,

Спасибо, я это тоже ранее заметил, ошибочный estimate индекса. drop table и recreate исправил ситуацию. Что-то не так было или с таблицей, или с индексами. Фрагментация показывала 0.0% , не знал, больше куда смотреть.
...
Рейтинг: 0 / 0
06.03.2019, 17:49
    #39783156
msLex
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Медленная отдача, когда есть колона bit
TPAKTOPAdrop table и recreate

...
Рейтинг: 0 / 0
06.03.2019, 20:15
    #39783219
WarAnt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Медленная отдача, когда есть колона bit
TPAKTOPAAlanDenton,

Спасибо, я это тоже ранее заметил, ошибочный estimate индекса. drop table и recreate исправил ситуацию. Что-то не так было или с таблицей, или с индексами. Фрагментация показывала 0.0% , не знал, больше куда смотреть.

жестко вы, достаточно было статистику обновить
...
Рейтинг: 0 / 0
06.03.2019, 20:45
    #39783231
TPAKTOPA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Медленная отдача, когда есть колона bit
WarAntжестко вы, достаточно было статистику обновить
делал rebuild и reorginize индекса, но не помогло. Ведь эти обе операции обновляют и статистику ?
...
Рейтинг: 0 / 0
07.03.2019, 11:46
    #39783457
Dzianis
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Медленная отдача, когда есть колона bit
TPAKTOPAWarAntжестко вы, достаточно было статистику обновить
делал rebuild и reorginize индекса, но не помогло. Ведь эти обе операции обновляют и статистику ?

Update STATISTICS ...
или
EXEC sp_updatestats
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Медленная отдача, когда есть колона bit / 15 сообщений из 15, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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