powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Медленная отдача, когда есть колона bit
15 сообщений из 15, страница 1 из 1
Медленная отдача, когда есть колона bit
    #39782799
Фотография TPAKTOPA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здравствуйте, ситуацията такая:
Таблица 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
Медленная отдача, когда есть колона bit
    #39782809
iiyama
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Медленная отдача, когда есть колона bit
    #39782846
Фотография TPAKTOPA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Заметил что-то очень странное,
Estimated Number of Rows - 452'521
Actual Number of Rows - 4'024 ( столько вернул select )
...
Рейтинг: 0 / 0
Медленная отдача, когда есть колона bit
    #39782851
AlanDenton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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
Медленная отдача, когда есть колона bit
    #39782865
Сруль.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Итак, время отклика складывается из двух слагаемых.
Первое-это время поиска нужных записей,
второе-это их протаскивание по сети.
Протаскивание по сети: это колличество записей умножить на длину.
Теперь, то что ваш запрос-после фильтра с записю минимальной длины
берёт, 4 секунды, не знаю о каком колличестве идёт речь, но даже, если брать
по максимуму-многовато. Возможно, нет индекса на проверяемой поле.
Скажем так, если вы сделаете select count(*) и это возьмёт больше нуля,
проверьте индекс. Если вы не хотите все несколько сотен показывать юзеру
то сделайте на сервере хоть какую-ту группировку.
...
Рейтинг: 0 / 0
Медленная отдача, когда есть колона bit
    #39782897
Фотография TPAKTOPA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlanDenton Покажите план выполнения и статистику ожидания на уровне сессии.
Не уверен, что точно показать. Вот результат вашего SQL-а, пока в другом окне работала медленная заявка.
...
Рейтинг: 0 / 0
Медленная отдача, когда есть колона bit
    #39782900
Фотография TPAKTOPA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlanDenton,

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

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

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

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

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


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

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

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

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

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

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

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


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