Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2 3   вперед  Ctrl      все
 Почему select count(*) from tablename запрос занимает много время?  [new]
Kahramon
Member

Откуда:
Сообщений: 19
Добрый день всем! У меня есть таблица там больше 100 млн записи. Все нужные поля индексирован. Ребята помогите пожалуйста
25 мар 19, 08:49    [21842416]     Ответить | Цитировать Сообщить модератору
 Re: Почему select count(*) from tablename запрос занимает много время?  [new]
982183
Member

Откуда: VL
Сообщений: 3352
Задача какая?
25 мар 19, 08:50    [21842418]     Ответить | Цитировать Сообщить модератору
 Re: Почему select count(*) from tablename запрос занимает много время?  [new]
архивариус
Member

Откуда:
Сообщений: 150
SELECT
   Total_Rows= SUM(st.row_count)
FROM
   sys.dm_db_partition_stats st
WHERE
    object_name(object_id) = 'T' AND (index_id < 2);


select COUNT(*) from T;
25 мар 19, 10:43    [21842488]     Ответить | Цитировать Сообщить модератору
 Re: Почему select count(*) from tablename запрос занимает много время?  [new]
Kahramon
Member

Откуда:
Сообщений: 19
У меня есть таблица я его использовался как лог. Каждый секунде есть 1000 записи. Если я хочу получить информация именно выбранный период, он занимает больше 30 минут , тот время мой сервисе не записывают история в лог
25 мар 19, 11:03    [21842510]     Ответить | Цитировать Сообщить модератору
 Re: Почему select count(*) from tablename запрос занимает много время?  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
Kahramon
У меня есть таблица я его использовался как лог. Каждый секунде есть 1000 записи. Если я хочу получить информация именно выбранный период, он занимает больше 30 минут , тот время мой сервисе не записывают история в лог

если просто, то ваш вариант скорее всего NOLOCK
25 мар 19, 11:06    [21842517]     Ответить | Цитировать Сообщить модератору
 Re: Почему select count(*) from tablename запрос занимает много время?  [new]
Kahramon
Member

Откуда:
Сообщений: 19
TaPaK,
как мне устранить эту проблему. У меня есть два сервиса который записывает лог. 1. Через проседедура. 2. Через web api. Пожалуйста помогите. Извините мой русскый язык
25 мар 19, 11:16    [21842529]     Ответить | Цитировать Сообщить модератору
 Re: Почему select count(*) from tablename запрос занимает много время?  [new]
londinium
Member

Откуда: Киев
Сообщений: 1168
Kahramon,
SELECT COUNT(*)AS CNTT FROM TABLEA(WITH NOLOCK)
25 мар 19, 11:27    [21842545]     Ответить | Цитировать Сообщить модератору
 Re: Почему select count(*) from tablename запрос занимает много время?  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
Kahramon,

Если нет возможности править запросы, то или чере querystore или перевести базу в RCSI
25 мар 19, 11:28    [21842546]     Ответить | Цитировать Сообщить модератору
 Re: Почему select count(*) from tablename запрос занимает много время?  [new]
Kahramon
Member

Откуда:
Сообщений: 19
TaPaK,

Так попробовал. Никаких результаты нет. Опять занимал больше 30 минут. Если у вас время есть напишите мне на телеграмм (@qahramon0786). Я вам доступ открою
25 мар 19, 12:15    [21842632]     Ответить | Цитировать Сообщить модератору
 Re: Почему select count(*) from tablename запрос занимает много время?  [new]
Kahramon
Member

Откуда:
Сообщений: 19
Msg 601, Level 12, State 3, Line 5
Could not continue scan with NOLOCK due to data movement.
25 мар 19, 12:30    [21842658]     Ответить | Цитировать Сообщить модератору
 Re: Почему select count(*) from tablename запрос занимает много время?  [new]
.Евгений
Member

Откуда:
Сообщений: 514
Kahramon
У меня есть таблица там больше 100 млн записи. Все нужные поля индексирован(...) Каждый секунде есть 1000 записи.

1000 * 60 * 60 * 24 = 86 миллионов записей в сутки. 2,5 млрд записей в месяц. 31 млрд. записей в год. Я испытываю уважение к людям, умеющим управлять такими объемами данных (как вообще, так и на MS SQL в частности). Но чувствую, что-то здесь не так...
25 мар 19, 12:33    [21842660]     Ответить | Цитировать Сообщить модератору
 Re: Почему select count(*) from tablename запрос занимает много время?  [new]
WarAnt
Member

Откуда: Питер
Сообщений: 2421
Kahramon,

1. show your execution plan
2. "Could not continue scan with NOLOCK due to data movement." seem to be hdd dies
25 мар 19, 12:37    [21842663]     Ответить | Цитировать Сообщить модератору
 Re: Почему select count(*) from tablename запрос занимает много время?  [new]
Kahramon
Member

Откуда:
Сообщений: 19
WarAnt,
How can i check hdd ? i have been sql server 2005 database and i changed it to sql server 2014. when i attach database there is no errors and warning.

Евгений

У меня груба 5000 терминал. они отправляет свой статус каждый секунд. Я сам не знаю как это проблема решить. Пожалуйста поделился своим опытом
25 мар 19, 12:51    [21842685]     Ответить | Цитировать Сообщить модератору
 Re: Почему select count(*) from tablename запрос занимает много время?  [new]
.Евгений
Member

Откуда:
Сообщений: 514
Kahramon
У меня груба 5000 терминал. они отправляет свой статус каждый секунд. Я сам не знаю как это проблема решить. Пожалуйста поделился своим опытом

Например, можно логировать не статус, а изменение статуса.
25 мар 19, 13:12    [21842705]     Ответить | Цитировать Сообщить модератору
 Re: Почему select count(*) from tablename запрос занимает много время?  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
Фактически это не обязательно проблема базы...
Можете пробовать сменить на поиск из метаданных 21842488
25 мар 19, 13:15    [21842707]     Ответить | Цитировать Сообщить модератору
 Re: Почему select count(*) from tablename запрос занимает много время?  [new]
Kahramon
Member

Откуда:
Сообщений: 19
.Евгений, Может я не так объяснил ситуация. дайте мне ваши контакт я вам доступ открою через teamviewer
25 мар 19, 13:23    [21842714]     Ответить | Цитировать Сообщить модератору
 Re: Почему select count(*) from tablename запрос занимает много время?  [new]
.Евгений
Member

Откуда:
Сообщений: 514
Kahramon
.Евгений, Может я не так объяснил ситуация. дайте мне ваши контакт я вам доступ открою через teamviewer

Kahramon, вам уже предложили считать количество строк на основе метаданных. Любой другой вариант либо займет существенное время, либо замедлит вставку новых строк, либо потребует изменить архитектуру.

Сам запрос мне не интересен, а вот архитектура логирования вызвала у меня некоторое недоумение.
25 мар 19, 13:47    [21842748]     Ответить | Цитировать Сообщить модератору
 Re: Почему select count(*) from tablename запрос занимает много время?  [new]
aleks222
Member

Откуда:
Сообщений: 952
Kahramon
Если я хочу получить информация именно выбранный период, он занимает больше 30 минут


[quot .Евгений]
Kahramon
Любой другой вариант либо займет существенное время, либо замедлит вставку новых строк, либо потребует изменить архитектуру.


Ну чо так уж печально?
Фсе очень сильно зависит от организации записи в лог (кластерный индекс), размеров "периода" и его соотношения с кластерным индексом...
25 мар 19, 14:04    [21842777]     Ответить | Цитировать Сообщить модератору
 Re: Почему select count(*) from tablename запрос занимает много время?  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 7754
Kahramon,

для хранения журналов веб-сервисов больших объёмов обычно используют нереляционные СУБД.
25 мар 19, 14:15    [21842792]     Ответить | Цитировать Сообщить модератору
 Re: Почему select count(*) from tablename запрос занимает много время?  [new]
Kahramon
Member

Откуда:
Сообщений: 19
aleks222,
Ребята , я не такой профессионал как вы. Может у меня есть много ошибок когда строил архитектурную базу. Пожалуйста помогите мне найти причину. У меня сейчас есть копия база данный , если вам интересно определить ошибки я вам открою доступ.
25 мар 19, 14:38    [21842831]     Ответить | Цитировать Сообщить модератору
 Re: Почему select count(*) from tablename запрос занимает много время?  [new]
.Евгений
Member

Откуда:
Сообщений: 514
aleks222
Ну чо так уж печально?
Фсе очень сильно зависит от организации записи в лог (кластерный индекс), размеров "периода" и его соотношения с кластерным индексом...

Как волка не корми, все равно яйца больше медвежьих не вырастут. Можно еще унести данные на SSD или In-memory, но суть проблемы остается в другом: в логе лежат никому не нужные десятки и сотни миллионов записей, данные востребованы в другом разрезе. И вместо изменения принципа хранения данных разработчик будет героически преодолевать трудности, созданные им же.
25 мар 19, 15:06    [21842867]     Ответить | Цитировать Сообщить модератору
 Re: Почему select count(*) from tablename запрос занимает много время?  [new]
Kahramon
Member

Откуда:
Сообщений: 19
А можно создавать каждый месясь отдельный таблица(log_month_year) и сохранить как ndf(log_month_year.ndf) файл?
25 мар 19, 16:01    [21842927]     Ответить | Цитировать Сообщить модератору
 Re: Почему select count(*) from tablename запрос занимает много время?  [new]
aleks222
Member

Откуда:
Сообщений: 952
Kahramon
aleks222,
Ребята , я не такой профессионал как вы. Может у меня есть много ошибок когда строил архитектурную базу. Пожалуйста помогите мне найти причину. У меня сейчас есть копия база данный , если вам интересно определить ошибки я вам открою доступ.


Зачем твоя база?

Определение таблицы и пример запроса - будет полезнее.
25 мар 19, 17:41    [21843021]     Ответить | Цитировать Сообщить модератору
 Re: Почему select count(*) from tablename запрос занимает много время?  [new]
Гулин Федор
Member

Откуда: МИНСК
Сообщений: 1237
Kahramon,
Должно помочь - естетсвенно будет верно если статистика апдейчена
для личных целей - посмотреть Count таблиц - САМОЕ ТО


SELECT  s.name AS [schema], t.name TableName,   p.rows 
from sys.objects t     -- with (nolock)
JOIN sys.schemas s 
     ON t.schema_id=s.schema_id
	 JOIN sys.partitions  p 
	        ON p.object_id = t.object_id 
			JOIN sys.indexes i 
			ON i.index_id=p.index_id AND t.object_id=i.object_id
			WHERE 
			t.type = 'U' and i.type_desc in ('CLUSTERED','HEAP')  
			order by  3 desc
25 мар 19, 17:53    [21843036]     Ответить | Цитировать Сообщить модератору
 Re: Почему select count(*) from tablename запрос занимает много время?  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 36965
Гулин Федор,

1. Для получения имени схемы есть удобная функция object_schema_name().
2. В таблице может быть более одной партиции.
25 мар 19, 17:58    [21843041]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2 3   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить