Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 Обслуживание MSSQL(Проблема с alter index)  [new]
KOD_BILL
Member

Откуда:
Сообщений: 29
Добрый день!
База на данный момент весить около 7ТБ
Я написал на C# ежедневное обслуживание которое собирает индексы с фрагментацией >30%
И разбивает на коллекции где уникальные таблица и индекс для нее. Коллекции нужны что бы не запускались одновременно несколько инексов по одной таблице.
В итоге я получаю около 5-7 коллекций.

При выполнении пачки запросов (https://prnt.sc/po5730) alter index я вижу что индекцы начали перестраиваться но спустя 2-3 минуты они просто сбрасываются. И соответственно не чего не происходит и индекс не перестраивается(

подскажите в чем может быть проблема или в какую сторону смотреть.
25 окт 19, 20:21    [22003027]     Ответить | Цитировать Сообщить модератору
 Re: Обслуживание MSSQL(Проблема с alter index)  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 30786
KOD_BILL
я вижу что индекцы начали перестраиваться но спустя 2-3 минуты они просто сбрасываются
Команда либо завершается с ошибкой, либо выполняется успешно.
Что такое "просто сбрасываются", непонятно.
25 окт 19, 20:31    [22003030]     Ответить | Цитировать Сообщить модератору
 Re: Обслуживание MSSQL(Проблема с alter index)  [new]
Владислав Колосов
Member

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

Напишите в своем приложении обработчик ошибок, который сохранит ошибки в текстовый журнал. Просмотрите errorlog SQL сервера и Windows приложений.
25 окт 19, 20:32    [22003031]     Ответить | Цитировать Сообщить модератору
 Re: Обслуживание MSSQL(Проблема с alter index)  [new]
KOD_BILL
Member

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

В том то и дело. Я блюжу процессы в студии. Вижу их 30. И через 2-3 минуты просто "Заканчивают работать" все разом. Проверяю индексы которые попали в первую коллекцию. Но фрагментация не изменяется(
25 окт 19, 20:38    [22003033]     Ответить | Цитировать Сообщить модератору
 Re: Обслуживание MSSQL(Проблема с alter index)  [new]
KOD_BILL
Member

Откуда:
Сообщений: 29
Владислав Колосов,

Приложение не возвращает не каких исключений. Про журнал что то я не подумал. Сейчас гляну.
25 окт 19, 20:39    [22003034]     Ответить | Цитировать Сообщить модератору
 Re: Обслуживание MSSQL(Проблема с alter index)  [new]
aleks222
Member

Откуда:
Сообщений: 855
KOD_BILL
alexeyvg,
И через 2-3 минуты


Это стандартный клиентский таймаут.
25 окт 19, 20:41    [22003035]     Ответить | Цитировать Сообщить модератору
 Re: Обслуживание MSSQL(Проблема с alter index)  [new]
KOD_BILL
Member

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

Вот пример
Старт https://prnt.sc/po5ni7
Якобы все закончило работать
https://prnt.sc/po5m73

Но я прекрасно понимаю что за такое время не реально отработать(

В логах ошибок нет( В Виндовых логах тоже инфа отсутствует( На момент завершения работы команд в SQL
25 окт 19, 20:56    [22003042]     Ответить | Цитировать Сообщить модератору
 Re: Обслуживание MSSQL(Проблема с alter index)  [new]
KOD_BILL
Member

Откуда:
Сообщений: 29
aleks222
KOD_BILL
alexeyvg,
И через 2-3 минуты


Это стандартный клиентский таймаут.

Не понятно. А почему сбрасывает выполнение то?
25 окт 19, 20:58    [22003044]     Ответить | Цитировать Сообщить модератору
 Re: Обслуживание MSSQL(Проблема с alter index)  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 30786
KOD_BILL
aleks222
Это стандартный клиентский таймаут.

Не понятно. А почему сбрасывает выполнение то?
Это же всё вопросы по вашему клиенту.

Проблема сиквела начинается тогда, когда команда возвращает ошибку. Или когда ошибки нет, но результат выполнения не соответствует вашим ожиданиям.

В данном случае варианта 3:
1. Команды завершаются с ошибкой, но клиент их не показывает.
2. Клиент разрывает коннект, команды завершаются с ошибкой (принудительное завершение), но вы этого не видите
3. Команды выполняются правильно, но вы не считаете результат правильным.

Тут тематика этого раздела форума относится к варианту 3, в общем то.
Можете выложить сюда, например, данные по какой то таблице (фрагментацию и статистику), можно посмотреть, что с ней.

А варианты 1 и 2 - это всё в сторону клиента.

Да, разве что, можно посоветовать профайлером посмотреть на команды - там будет видна вся статистика выполнения, ну и результат - ошибка, разрыв коннекта или ещё что то.
25 окт 19, 21:29    [22003050]     Ответить | Цитировать Сообщить модератору
 Re: Обслуживание MSSQL(Проблема с alter index)  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 30786
alexeyvg
Можете выложить сюда, например, данные по какой то таблице (фрагментацию и статистику), можно посмотреть, что с ней.
Например:
select * from sys.dm_db_index_physical_stats(DB_ID(N'база'), OBJECT_ID(N'таблица'), NULL, NULL , 'DETAILED');  
25 окт 19, 21:39    [22003054]     Ответить | Цитировать Сообщить модератору
 Re: Обслуживание MSSQL(Проблема с alter index)  [new]
KOD_BILL
Member

Откуда:
Сообщений: 29
alexeyvg
alexeyvg
Можете выложить сюда, например, данные по какой то таблице (фрагментацию и статистику), можно посмотреть, что с ней.
Например:
select * from sys.dm_db_index_physical_stats(DB_ID(N'база'), OBJECT_ID(N'таблица'), NULL, NULL , 'DETAILED');  


Пример одной из таблиц которая попала в выборку.

Я вчера попробовал вызывать не пачками а по одной строке. результат такой же.
Хм.
Если же со студии вызвать команду которая отправляется приложение. То все успешно исполняется

К сообщению приложен файл (result_.csv - 6Kb) cкачать
26 окт 19, 07:24    [22003101]     Ответить | Цитировать Сообщить модератору
 Re: Обслуживание MSSQL(Проблема с alter index)  [new]
KOD_BILL
Member

Откуда:
Сообщений: 29
ТОже самое только изображением
http://prntscr.com/pobdvf

Модератор: Вы еще гифку анимированную забацайте, а то вдруг кто-то не заметит?


Сообщение было отредактировано: 26 окт 19, 07:28
26 окт 19, 07:26    [22003103]     Ответить | Цитировать Сообщить модератору
 Re: Обслуживание MSSQL(Проблема с alter index)  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 30786
KOD_BILL
Пример одной из таблиц которая попала в выборку.

Да, похоже, действительно команда не выполняется.
KOD_BILL
Я вчера попробовал вызывать не пачками а по одной строке. результат такой же.
Хм.
Если же со студии вызвать команду которая отправляется приложение. То все успешно исполняется
Ну, тут неважно, пачка или по одной. Понятно, раз пачка не выполнилась, то и одна не выполнится.

Это уже проблема в приложении. Причин, понятно, может быть много.
Может, у вас вообще запросы больше ННН секунд не выполняются? Проверьте запрос с waitfor.

В общем, обычная отладка - профайлер в руки, и дебаггер...
26 окт 19, 17:45    [22003269]     Ответить | Цитировать Сообщить модератору
 Re: Обслуживание MSSQL(Проблема с alter index)  [new]
Критик
Member

Откуда: Москва / Калуга
Сообщений: 33262
Блог
Может "сброшенные" индексы слишком мало страниц занимают?
26 окт 19, 22:58    [22003431]     Ответить | Цитировать Сообщить модератору
 Re: Обслуживание MSSQL(Проблема с alter index)  [new]
KOD_BILL
Member

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

что то мне пожсказывает не все тут так просто. Я решил проверить что будет если выполнить команду из PS.
результат тот же.

https://prnt.sc/pomzjh

Я уже начинаю думать что где то какая настройка в сервере SQL не дает выполнять команду(
27 окт 19, 06:23    [22003495]     Ответить | Цитировать Сообщить модератору
 Re: Обслуживание MSSQL(Проблема с alter index)  [new]
KOD_BILL
Member

Откуда:
Сообщений: 29
Критик,
Не уверен в условия указываю что "page_count > 1000"

сам запрос выбора индексов

+
SELECT tab.name as TableName,idx.Name as IndexName, sum(idx_stat.page_count) as page_count
FROM sys.dm_db_index_physical_stats(DB_ID('бд'),NULL, NULL, NULL , 'LIMITED') idx_stat
join бд.sys.tables tab on tab.object_id = idx_stat.object_id
join бд.sys.indexes idx on idx.index_id = idx_stat.index_id and idx.object_id = idx_stat.object_id
Where idx_stat.page_count > 1000 and tab.name not in (список такбличек которые не трогаем)
and idx.is_disabled = 0
and idx_stat.avg_fragmentation_in_percent > 30.0
and idx.Name is not null
Group by tab.name,idx.Name
27 окт 19, 06:27    [22003496]     Ответить | Цитировать Сообщить модератору
 Re: Обслуживание MSSQL(Проблема с alter index)  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 30786
KOD_BILL
Я уже начинаю думать что где то какая настройка в сервере SQL не дает выполнять команду(
Вы же говорите, что из SSMS команда выполняется.
А SSMS - такой же клиент, как PS, или как ваше приложение.
27 окт 19, 15:28    [22003655]     Ответить | Цитировать Сообщить модератору
 Re: Обслуживание MSSQL(Проблема с alter index)  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 30786
KOD_BILL
Не уверен в условия указываю что "page_count > 1000"

сам запрос выбора индексов
Неважно, какой запрос, и какие критерии.

Вот, есть пример таблицы 22003101 нужно по ней смотреть, как выполняется команда из SSMS, из PS и из приложения (SSMS в конце)

Если выполнение команд из этих 3-х мест приводит к одному результату, значит, со стороны самого выполнения всё правильно.
27 окт 19, 15:32    [22003657]     Ответить | Цитировать Сообщить модератору
 Re: Обслуживание MSSQL(Проблема с alter index)  [new]
KOD_BILL
Member

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

Я вроде бы нашел решение. Что PS что C# Ждут 2-3. За это время индексы не успевают ребилднутся. И за закрывают подключение. Что за собой утягивает всю сессию и прерывает выполнение. Добавил проверку на сушествования запроса "ALTER INDEX" и держать подключение открытым. Пока проверяю.
27 окт 19, 16:17    [22003668]     Ответить | Цитировать Сообщить модератору
 Re: Обслуживание MSSQL(Проблема с alter index)  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 30786
KOD_BILL
alexeyvg,

Я вроде бы нашел решение. Что PS что C# Ждут 2-3. За это время индексы не успевают ребилднутся. И за закрывают подключение. Что за собой утягивает всю сессию и прерывает выполнение. Добавил проверку на сушествования запроса "ALTER INDEX" и держать подключение открытым. Пока проверяю.
Удивительно, у вас что, асинхронное выполнение, что ли?
А если SELECT будет выполняться дольше 2 секунд?
Хотя странно, PS Invoke-Sqlcmd не устанавливает таймаут выполнения, если его специально не установить параметром -QueryTimeout https://docs.microsoft.com/ru-ru/powershell/module/sqlserver/invoke-sqlcmd?view=sqlserver-ps
27 окт 19, 17:56    [22003694]     Ответить | Цитировать Сообщить модератору
 Re: Обслуживание MSSQL(Проблема с alter index)  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 7399
Таймаут на C# тоже создает исключение, но другое. Стало быть, приложение его игнорирует.
28 окт 19, 12:03    [22004077]     Ответить | Цитировать Сообщить модератору
 Re: Обслуживание MSSQL(Проблема с alter index)  [new]
Владислав Колосов
Member

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

Напишите в своем приложении обработчик ошибок, который сохранит ошибки в текстовый журнал. Просмотрите errorlog SQL сервера и Windows приложений.
28 окт 19, 13:43    [22004199]     Ответить | Цитировать Сообщить модератору
 Re: Обслуживание MSSQL(Проблема с alter index)  [new]
DbDude
Member

Откуда:
Сообщений: 22
KOD_BILL, попробуйте вручную перестроить какой-нибудь индекс запросом в SSMS.
Если я не ошибаюсь, он может не перестроиться, если там мало страниц.
28 окт 19, 15:20    [22004354]     Ответить | Цитировать Сообщить модератору
 Re: Обслуживание MSSQL(Проблема с alter index)  [new]
DbDude
Member

Откуда:
Сообщений: 22
То есть уровень фрагментации может не уменьшиться.
Вот статья по теме:
"It is best practices to rebuild fragmented indexes that are a minimum of 1000 pages":
https://dba.stackexchange.com/questions/18372/why-index-rebuild-does-not-reduce-index-fragmentatation
28 окт 19, 15:24    [22004359]     Ответить | Цитировать Сообщить модератору
 Re: Обслуживание MSSQL(Проблема с alter index)  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 30786
DbDude
KOD_BILL, попробуйте вручную перестроить какой-нибудь индекс запросом в SSMS.
Вроде бы этот этап в данной теме прошли, вместе с автором :-)

Владислав Колосов
Напишите в своем приложении обработчик ошибок, который сохранит ошибки в текстовый журнал. Просмотрите errorlog SQL сервера и Windows приложений.
Или хотя бы нужно убрать обработчик ошибок, что бы приложение вываливалось, и писало ошибку.
28 окт 19, 15:56    [22004395]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить