Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Долгое вычисление Count  [new]
Slider_spb
Member

Откуда:
Сообщений: 802
Приветствую всех.
Есть табличка с двумя колонками типа <Uniqueidentifier, Uniqueidentifier>
Они же Primary Key
В табличке около трехсот миллионов записей.
Запрос select count(*) по данной табличке выполняется от получаса до часа.
Перестроение индекса и обновление статистики не помогает.
По плану запроса выполняется Clustered Index Scan
Загрузка сервера небольшая (занятость процессора 10-15%)
В чем может быть причина такого долгого выполнения?
24 ноя 15, 14:29    [18464816]     Ответить | Цитировать Сообщить модератору
 Re: Долгое вычисление Count  [new]
Slider_spb
Member

Откуда:
Сообщений: 802
А да, SQL Server 2012 SP1
24 ноя 15, 14:33    [18464841]     Ответить | Цитировать Сообщить модератору
 Re: Долгое вычисление Count  [new]
o-o
Guest
Slider_spb,

так а чем пересчет статистики может помочь?
вы все данные в память поднимаете.
мат. вью на count сделайте и пускай оно обновляется вместе с вашей таблицей.
24 ноя 15, 14:42    [18464903]     Ответить | Цитировать Сообщить модератору
 Re: Долгое вычисление Count  [new]
SomewhereSomehow
Member

Откуда: Moscow
Сообщений: 2480
Блог
Slider_spb,

Видимо то, что просмотр и подсчет строк в не маленькой таблице операция не быстрая? Особенно, если таблица не в кэше и читается с диска.

Вы можете посмотреть точную причину, помониторив ожидания возникающие во время выполнения запроса при помощи расширенных событий или, например, при помощи sys.dm_os_waiting_tasks - посмотреть в момент выполнения запроса, какой тип ожидания чаще всего. Далее поймете, куда копать диск, блокировки, еще что-то.

Для такой задачи хорошо подходит материализованное представление или колоночные индексы, но последнее в 2012 сервере имеет ряд существенных ограничений.
24 ноя 15, 14:45    [18464920]     Ответить | Цитировать Сообщить модератору
 Re: Долгое вычисление Count  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 37059
Все каунты нормально получаются через sys.partitions за 0 секунд.
24 ноя 15, 14:45    [18464924]     Ответить | Цитировать Сообщить модератору
 Re: Долгое вычисление Count  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 7868
Помнится, на 2000 сервере счетчики в системных таблицах могли быть неактуальными. Я бы не стал рисковать.
24 ноя 15, 14:48    [18464952]     Ответить | Цитировать Сообщить модератору
 Re: Долгое вычисление Count  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 37059
Владислав Колосов
Помнится, на 2000 сервере счетчики в системных таблицах могли быть неактуальными. Я бы не стал рисковать.
Я еще меньше поверю count(*), посчитанный в течение 30 минут без serializeable или tablockx, на таблице, куда осуществляется хоть какая-нибудь вставка.
24 ноя 15, 14:53    [18464995]     Ответить | Цитировать Сообщить модератору
 Re: Долгое вычисление Count  [new]
o-o
Guest
Гавриленко Сергей Алексеевич
Все каунты нормально получаются через sys.partitions за 0 секунд.

занимательное чтиво
I'll describe here how small bug can "kill" strong server.
The story begins when for some unknown reason "rows" column in sys.partitions DMV begins to show 4.6 billion rows for clustered index of one of the entities tables in my datawarehouse database.
COUNT(*) on the table returns 1 million rows...

продолжение вот тут: For want of a nail
24 ноя 15, 14:55    [18465009]     Ответить | Цитировать Сообщить модератору
 Re: Долгое вычисление Count  [new]
Slider_spb
Member

Откуда:
Сообщений: 802
А размер конкретного индекса как-то можно посмотреть?
24 ноя 15, 14:56    [18465020]     Ответить | Цитировать Сообщить модератору
 Re: Долгое вычисление Count  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 37059
o-o
Гавриленко Сергей Алексеевич
Все каунты нормально получаются через sys.partitions за 0 секунд.

занимательное чтиво
I'll describe here how small bug can "kill" strong server.
The story begins when for some unknown reason "rows" column in sys.partitions DMV begins to show 4.6 billion rows for clustered index of one of the entities tables in my datawarehouse database.
COUNT(*) on the table returns 1 million rows...

продолжение вот тут: For want of a nail

Published Tuesday, December 08, 2009 и вообще не понятно, про какую версию идет речь.

И, в принципе, рассуждать о решениях не зная решаемой задачи, смысла особого нет.
24 ноя 15, 15:00    [18465057]     Ответить | Цитировать Сообщить модератору
 Re: Долгое вычисление Count  [new]
Slider_spb
Member

Откуда:
Сообщений: 802
О, DBCC UPDATEUSAGE вроде как помогло, время выполнения Count упало до 4 секунд...
24 ноя 15, 16:32    [18465939]     Ответить | Цитировать Сообщить модератору
 Re: Долгое вычисление Count  [new]
Slider_spb
Member

Откуда:
Сообщений: 802
Вот еще подробности о данной проблеме и способах её решения: http://habrahabr.ru/post/271797/
27 ноя 15, 18:34    [18483122]     Ответить | Цитировать Сообщить модератору
 Re: Долгое вычисление Count  [new]
Pavel1211
Member

Откуда: Екатеринбург
Сообщений: 205
Slider_spb,

Дак что в итоге? У вас метаданные были неверные?
30 ноя 15, 09:30    [18490103]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить