Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: 1 2 3      [все]
 SQL Index Manager - бесплатная утилита по обслуживанию индексов для SQL Server и Azure  [new]
Sergey Syrovatchenko
Member

Откуда: Харьков
Сообщений: 30
Так уж исторически сложилось, что долгое время участвовал в разработке системных тулов для обслуживания SQL Server.
За это время накопилось много идей и на определенном этапе захотелось сделать что-то свое.

В результате получилось приложение, которое позволяет обслуживать индексы через удобный UI.
За основных конкурентов брались платные аналоги от компаний RedGate / Devart (155 $ / 99 $ на текущий момент).

Ключевые особенности SQL Index Manager (1.0.0.31):

  • Оптимизированный алгоритм получения фрагментированных индексов * * *
  • Возможность обслуживания нескольких баз данных за раз
  • Автоматический выбор действия для индексов исходя из выбранных настроек
  • Поддержка глобального поиска и сложной фильтрации для более удобной аналитики
  • Большое число настроек и полезной информации об индексах
  • Автоматическая генерация скриптов по обслуживанию индексов
  • Поддержка обслуживания кучи и колумнсторов
  • Возможность включать сжатие индексов и обновление статистики вместо ребилда
  • Поддержка всех редакций SQL Server 2008+ и Azure SQL Database

    * * *
    RedGate SQL Index Manager v1.1 работает простым перебором, т. е. получает весь список индексов.
    Потом в цикле отправляет запрос на получения уровня фрагментации для каждого индекса.
    В итоге если база удаленная и содержит много мелких индексов, то это может затянуться на долгое время.

    dbForge Index Manager for SQL Server v1.10.27 от Devart получает все большой охапкой.
    Затем уже на клиенте отфильтровывает лишнее. Как минус всегда будут лишние дисковые операции при сканировании индексов.
    Не скажу, что это совсем уж плохо, потому что можно лучше...

    Исходя из того, что данные в sys.dm_db_index_physical_stats не кешируется SQL Server на постоянной основе,
    минимизирование физических чтений при получении фрагментации индексов было одной из приоритетных задач при разработке.

    В итоге разделил механизм дескрайба на две части: одним запросом получаю фрагментацию по мелким индексам и потом
    дополучаю информацию по большим индексам при этом не сканируя те, которые не подпадают под текущие условия фильтрации.

    В ближайших планах добавить:

  • Поддержку командной строки
  • Получение более глубокой информации об индексах
  • Возможность экспорта результатов
  • Кастомизация интерфейса

    На данный момент и в дальнейшем, SQL Index Manager полностью бесплатный.

    Последнюю версию приложения можно скачать по этой ссылке, а все исходники лежат на GitHub.

    Картинка с другого сайта.

    Картинка с другого сайта.

    Продукт хочется развивать и делать более функциональным, поэтому буду рад критике и предложениям.
    Пишите или в этот топик или по почте, который указан в профиле.
  • 6 май 19, 15:42    [21879074]     Ответить | Цитировать Сообщить модератору
     Re: SQL Index Manager - бесплатная утилита по обслуживанию индексов для SQL Server и Azure  [new]
    Гавриленко Сергей Алексеевич
    Member

    Откуда: Moscow
    Сообщений: 36153
    +
    [ 17:19:48.733 ] Log folder: D:\Distr\SQLIndexManager
    [ 17:20:02.830 ] Current host: xxx | SQL Server 2016 SP2 (13.0.5153.0) Enterprise Edition: Core-based Licensing (64-bit)
    [ 17:20:03.088 ] Elapsed time: 00:00:00:237. Refresh databases failed
    Arithmetic overflow error converting expression to data type int.
    6 май 19, 17:41    [21879227]     Ответить | Цитировать Сообщить модератору
     Re: SQL Index Manager - бесплатная утилита по обслуживанию индексов для SQL Server и Azure  [new]
    Mind
    Member

    Откуда: Лучший город на Земле
    Сообщений: 2237
    Sergey Syrovatchenko,

    А что кто то еще дефрагментирует индексы? А зачем? Еще и тул для этого писать. Создавать лишнюю нагрузку во время получения данных о фрагментации, а потом еще во время ребилда генерить кучу логов и потенциально отправлять их на secondary сервера. И все ради того чтобы получить чуть чуть лучше перформанс?

    Может ради пустого места в индексах и можно заморочиться, но не ради фрагментации как таковой. Пустое место критично хотя бы потому что память занимает.
    Можно чтобы тул делал так? Несколько раз в течение дня опрашивал буферы дынных и записывал в каких индексах много пустого места, а потом во время maintenance window их реорганизовывал.
    6 май 19, 22:23    [21879429]     Ответить | Цитировать Сообщить модератору
     Re: SQL Index Manager - бесплатная утилита по обслуживанию индексов для SQL Server и Azure  [new]
    komrad
    Member

    Откуда: Msk -> Utrecht
    Сообщений: 4804
    Mind
    Можно чтобы тул делал так? Несколько раз в течение дня опрашивал буферы дынных и записывал в каких индексах много пустого места, а потом во время maintenance window их реорганизовывал.

    это, кстати, хорошая мысль - реорганизация горячих таблиц/индексов
    6 май 19, 23:42    [21879464]     Ответить | Цитировать Сообщить модератору
     Re: SQL Index Manager - бесплатная утилита по обслуживанию индексов для SQL Server и Azure  [new]
    Sergey Syrovatchenko
    Member

    Откуда: Харьков
    Сообщений: 30
    Выложил версию 1.0.0.32:

  • Исправлена ошибка "Arithmetic overflow error converting expression to data type int" при получении списка баз
  • Возможность кастомизации грида (скрывать/показывать столбцы и менять их расположение)

    Mind
    Может ради пустого места в индексах и можно заморочиться, но не ради фрагментации как таковой. Пустое место критично хотя бы, потому что память занимает.

    Тут я с Вами солидарен. Из этих соображений я и добавил отдельную колонку Unused Place по которой можно быстро найти индексы, где много свободного места.

    Mind
    Несколько раз в течение дня опрашивал буферы дынных и записывал в каких индексах много пустого места, а потом во время maintenance window их реорганизовывал.

    Идея и вправду хорошая. Когда будет командная строка, то можно будет добавить опцию "показывать индексы, где много свободного места" и задавать какой-то %.
  • 7 май 19, 00:41    [21879492]     Ответить | Цитировать Сообщить модератору
     Re: SQL Index Manager - бесплатная утилита по обслуживанию индексов для SQL Server и Azure  [new]
    Ролг Хупин
    Member

    Откуда: Чебаркуль
    Сообщений: 2571
    Неплохо, но есть и фигня вообще-то
    Log folder: C:\WINDOWS\system32

    Неплохо бы сделать так:
    1. настраивать в приложении есть ли лог, куда лог и т.д.
    2. показывать лог в приложении, а не искать потом х.п. где
    3. сделать лог как, например, сделано в log4net, тогда можно настроить хоть в сеть, хоть в файлы и т.д.

    Попытался подсунуть битую базу, он смог вытащить 3 записи об индексах в грид, а реально там сотня.
    Может были ошибки, так не видно.
    7 май 19, 16:18    [21880129]     Ответить | Цитировать Сообщить модератору
     Re: SQL Index Manager - бесплатная утилита по обслуживанию индексов для SQL Server и Azure  [new]
    Andrey Sribnyak
    Member

    Откуда: Киев
    Сообщений: 579
    Сергей, полезная утилита.

    Можно ли задать Fillfactor?
    7 май 19, 17:44    [21880219]     Ответить | Цитировать Сообщить модератору
     Re: SQL Index Manager - бесплатная утилита по обслуживанию индексов для SQL Server и Azure  [new]
    Sergey Syrovatchenko
    Member

    Откуда: Харьков
    Сообщений: 30
    Andrey Sribnyak, как бы вы пользовались этой фичей? Есть мысль добавить возможность при любом ребилде задавать свой уровень филл фактора и, отдельно, чтобы была возможность его в 0 выставлять. Сейчас мы просто наследуем настройки сервера.
    7 май 19, 19:17    [21880318]     Ответить | Цитировать Сообщить модератору
     Re: SQL Index Manager - бесплатная утилита по обслуживанию индексов для SQL Server и Azure  [new]
    Mind
    Member

    Откуда: Лучший город на Земле
    Сообщений: 2237
    komrad
    Mind
    Можно чтобы тул делал так? Несколько раз в течение дня опрашивал буферы дынных и записывал в каких индексах много пустого места, а потом во время maintenance window их реорганизовывал.

    это, кстати, хорошая мысль - реорганизация горячих таблиц/индексов

    Я вижу как минимуму несколько плюсов:
    1. Легко получить данные по свободному месту, все что нужно уже в памяти. Не нужно сканировать таблицы, пусть даже и в sample (что я так подозреваю тул и делает) создавая тем самым лишнюю рандомную IO нагрузку
    2. Обрабатываем только то что обычно попадает в память. Лопатить то что большую часть времени лежит на диске смысла особого нет
    3. Если делать реорганизацию сразу то она должна быть существенно дешевле потому что часть данных уже в памяти.
    7 май 19, 22:25    [21880430]     Ответить | Цитировать Сообщить модератору
     Re: SQL Index Manager - бесплатная утилита по обслуживанию индексов для SQL Server и Azure  [new]
    tunknown
    Member

    Откуда:
    Сообщений: 636
    Sergey Syrovatchenko
    Сейчас мы просто наследуем настройки сервера.
    И это верно.

    Могу предложить сырую идею. Мастер вычисления филлфактора. Для кластерного суррогатного наиболее вероятно- 100%. Для остальных попытаться вычислить исходя:
  • из отсутствия записей- активность delete;
  • из распределения существующих полей датывремени (догадываясь о возможных default=getdate) и/или timestamp активность update;
  • из типов данных, например, учитывая "произвол" гуидов.

    Можно даже спросить у пользователя, какие поля преимущественно равномерно возрастают исходя из бизнес-процессов.
  • 8 май 19, 09:41    [21880656]     Ответить | Цитировать Сообщить модератору
     Re: SQL Index Manager - бесплатная утилита по обслуживанию индексов для SQL Server и Azure  [new]
    Sergey Syrovatchenko
    Member

    Откуда: Харьков
    Сообщений: 30
    Выложил версию 1.0.0.33:

  • Добавил экспорт результатов в Excel, CSV и TXT
  • Возможность при ребилде сбрасывать FILLFACTOR в 0
  • Добавил новые колонки с полезной информацией об индексах
  • Кастомизация интерфейса

    Картинка с другого сайта.

    Ролг Хупин
    Попытался подсунуть битую базу, он смог вытащить 3 записи об индексах в грид, а реально там сотня.
    Может были ошибки, так не видно.

    Добавил обработку ошибок. Если есть возможность скинуть для тестов битую базу, то буду благодарен.

    Ролг Хупин
    настраивать в приложении есть ли лог, куда лог и т.д.

    Постараюсь в скором времени сделать.
  • 8 май 19, 11:16    [21880772]     Ответить | Цитировать Сообщить модератору
     Re: SQL Index Manager - бесплатная утилита по обслуживанию индексов для SQL Server и Azure  [new]
    Ролг Хупин
    Member

    Откуда: Чебаркуль
    Сообщений: 2571
    Sergey Syrovatchenko,

    не могу дать битую базу, Заратустра не позволяет, база клиентская.
    Но вы можете сделать из своей рабочей битую, это делается не сложно.
    8 май 19, 11:25    [21880787]     Ответить | Цитировать Сообщить модератору
     Re: SQL Index Manager - бесплатная утилита по обслуживанию индексов для SQL Server и Azure  [new]
    Sergey Syrovatchenko
    Member

    Откуда: Харьков
    Сообщений: 30
    Ролг Хупин, а какого рода страницы были побиты в Вашей базе? Только INROW? Или еще были затронуты PSF и тд?
    8 май 19, 11:28    [21880791]     Ответить | Цитировать Сообщить модератору
     Re: SQL Index Manager - бесплатная утилита по обслуживанию индексов для SQL Server и Azure  [new]
    PsyMisha
    Member

    Откуда: другая столица
    Сообщений: 200
    Sergey Syrovatchenko,

    Сергей, здорово, спасибо, класс!
    Поддержка командной строки была бы очень в тему, что можно было бы создавать агент-джобы, и при наличии сайлент-режима работы приложения, - зашедулить эти вызовы приложения с параметрами на перманентной основе

    P.S. - не рассматривали кстати в плане определенного конкурента по maintenance'у индексов и прочего и такой солюшн - Ola Hallengren's "Maintenance Solution"?

    https://ola.hallengren.com/
    8 май 19, 13:31    [21880966]     Ответить | Цитировать Сообщить модератору
     Re: SQL Index Manager - бесплатная утилита по обслуживанию индексов для SQL Server и Azure  [new]
    komrad
    Member

    Откуда: Msk -> Utrecht
    Сообщений: 4804
    PsyMisha
    P.S. - не рассматривали кстати в плане определенного конкурента по maintenance'у индексов и прочего и такой солюшн - Ola Hallengren's "Maintenance Solution"?

    https://ola.hallengren.com/


    имхо, они не конкуренты - здесь бинарник и правит программист, у Ол(-ы/-и) t-sql код, который может допилить под собственные нужды даже ДБА

    кстати, Sergey Syrovatchenko, а как с параллельной работой этого приложения?
    допустим, случай когда два экземпляра gui/commandline обрабатывают одну базу одновременно (в силу разных причин)?
    8 май 19, 13:38    [21880979]     Ответить | Цитировать Сообщить модератору
     Re: SQL Index Manager - бесплатная утилита по обслуживанию индексов для SQL Server и Azure  [new]
    Sergey Syrovatchenko
    Member

    Откуда: Харьков
    Сообщений: 30
    komrad
    как с параллельной работой этого приложения?
    допустим, случай когда два экземпляра gui/commandline обрабатывают одну базу одновременно (в силу разных причин)?

    Если мы говорим о сканирование индексов на предмет фрагментации, то запросы друг друга не блокируют. А вот если брать обслуживание, то блокировки будут (Sch-M чаще всего, когда пытаемся один и тот же индекс обслуживать).
    Также не забываем о Sch-S, когда мы не можем ничего делать с индексом до тех пор пока из него происходит чтение каким-либо запросом.
    8 май 19, 13:51    [21881000]     Ответить | Цитировать Сообщить модератору
     Re: SQL Index Manager - бесплатная утилита по обслуживанию индексов для SQL Server и Azure  [new]
    Sergey Syrovatchenko
    Member

    Откуда: Харьков
    Сообщений: 30
    Есть еще пара идей.

    Сейчас список индексов мы получаем полностью без проверки на то если ли права эти индексы обслуживать.
    Добавить ли опцию "показывать только обьекты на которые есть права"?

    Нужно ли добавить возможность "отключать индекс"?
    Скажем если мы видим что индекс не используется на основе данных с sys.dm_db_index_usage_stats.
    То как это вьюха работает уже другой вопрос.
    8 май 19, 14:00    [21881026]     Ответить | Цитировать Сообщить модератору
     Re: SQL Index Manager - бесплатная утилита по обслуживанию индексов для SQL Server и Azure  [new]
    PsyMisha
    Member

    Откуда: другая столица
    Сообщений: 200
    komrad
    имхо, они не конкуренты - здесь бинарник и правит программист, у Ол(-ы/-и) t-sql код, который может допилить под собственные нужды даже ДБА


    нуу, вопрос открытости - он скорее вещь интимная, скажем, по-сути - для пользователя не важно, что скрыто за блэк-боксом, главное, что есть функционал А с параметрами Б, который надо запустить для получения результата С

    В плане графической привлекательности - все здорово, такие кейсы тоже есть когда надо наглядно продемонстрировать, обосновать этапы/выбор работ и визуально все в красивую обёртку завернуть
    Но множество работ по реальной поддержке - именно сайлент-режим, без гуёв, чтоб оно работало, оперделяло степень фрагментированности, и некий, скажем а-ля искусственный интеллект, который на основании данных на вход генерит динамический код на выполнение с учётом предшествующего анализа

    В этом ракурсе, не интерактивном использовании, - считаю будущий режим командной строки и решение Ola конкурентами
    8 май 19, 14:36    [21881105]     Ответить | Цитировать Сообщить модератору
     Re: SQL Index Manager - бесплатная утилита по обслуживанию индексов для SQL Server и Azure  [new]
    TaPaK
    Member

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

    автор
    по-сути - для пользователя не важно, что скрыто за блэк-боксом, главное, что есть функционал А с параметрами Б

    потом просыпается секьюрити и здравый смысл с вопросом, а что ей запретит сделать, что угодно
    8 май 19, 14:41    [21881114]     Ответить | Цитировать Сообщить модератору
     Re: SQL Index Manager - бесплатная утилита по обслуживанию индексов для SQL Server и Azure  [new]
    PsyMisha
    Member

    Откуда: другая столица
    Сообщений: 200
    TaPaK,

    А что помешает, в таком случае, в обычный сиквельный джоб или план обслуживания из коробки - внедрить скрипт, или вызов батника, или powerShell'а, или .NET-модуля, который имперсонируя контекст безопасности службы sql-agent'а творить все, что только душа пожелает на локальной и/или удаленной машинах/сети?
    8 май 19, 14:45    [21881118]     Ответить | Цитировать Сообщить модератору
     Re: SQL Index Manager - бесплатная утилита по обслуживанию индексов для SQL Server и Azure  [new]
    TaPaK
    Member

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

    А что помешает, в таком случае, в обычный сиквельный джоб или план обслуживания из коробки - внедрить скрипт, или вызов батника, или powerShell'а, или .NET-модуля, который имперсонируя контекст безопасности службы sql-agent'а творить все, что только душа пожелает на локальной и/или удаленной машинах/сети?

    что за бред я прочитал
    8 май 19, 14:46    [21881120]     Ответить | Цитировать Сообщить модератору
     Re: SQL Index Manager - бесплатная утилита по обслуживанию индексов для SQL Server и Azure  [new]
    PsyMisha
    Member

    Откуда: другая столица
    Сообщений: 200
    TaPaK,

    ахахах, всмысле?? :)

    я десятки раз, и не только я - делал автомейшен, используя сиквел и его джобы с шагами - как оркестратор и дёргалку различных модулей на любых доступных ЯП внутри сиквела и во внешнем мире
    и не только я лично вызывал батники из джоба, это вообще-то встроенный и штатный функционал продукта, ка и всякие xp_cmdshell

    Предлагаю оставить на данный момент вопрос целесообразности и дизайна - случаи бывают разные :)
    Главное - что технически возможность есть, и она не прикрыта

    Да и Ola тот же - может через sqlcmd работать, или все тоже так скажем API через хранимые процедуры
    8 май 19, 14:50    [21881130]     Ответить | Цитировать Сообщить модератору
     Re: SQL Index Manager - бесплатная утилита по обслуживанию индексов для SQL Server и Azure  [new]
    TaPaK
    Member

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

    ахахах, всмысле?? :)

    я десятки раз, и не только я - делал автомейшен, используя сиквел и его джобы с шагами - как оркестратор и дёргалку различных модулей на любых доступных ЯП внутри сиквела и во внешнем мире
    и не только я лично вызывал батники из джоба, это вообще-то встроенный и штатный функционал продукта, ка и всякие xp_cmdshell

    Предлагаю оставить на данный момент вопрос целесообразности и дизайна - случаи бывают разные :)
    Главное - что технически возможность есть, и она не прикрыта

    Да и Ola тот же - может через sqlcmd работать, или все тоже так скажем API через хранимые процедуры

    что за бред часть 2.

    Вас дружно спустят в подвал и "ахха" будет иметь несколько другой тон, коробка с доступом уровня управления сервером под это будут подписываться или дети или производитель коробки будет иметь достаточно серъёзную репутацию и возможности связанные как договорами так и юридическими последствиями
    8 май 19, 14:55    [21881138]     Ответить | Цитировать Сообщить модератору
     Re: SQL Index Manager - бесплатная утилита по обслуживанию индексов для SQL Server и Azure  [new]
    PsyMisha
    Member

    Откуда: другая столица
    Сообщений: 200
    TaPaK,

    Да, окей, спасибо, благодарю за мнение, всех благ, ну и т.д. и т.п.
    8 май 19, 14:56    [21881141]     Ответить | Цитировать Сообщить модератору
     Re: SQL Index Manager - бесплатная утилита по обслуживанию индексов для SQL Server и Azure  [new]
    PsyMisha
    Member

    Откуда: другая столица
    Сообщений: 200
    TaPaK
    коробка с доступом уровня управления сервером под это будут подписываться или дети или производитель коробки будет иметь достаточно серъёзную репутацию и возможности связанные как договорами так и юридическими последствиями


    Ну и все же, возвращаясь к вопросу секурности - никто же не говорит что нужно давать права enterprise-админа учётке, из под которой ранятся сиквельные службы? Все по правилам и гайдам Microsoft - права пользователя в ОС, необходимые вручную заданные разрешения в локальной GPO на закрепление страниц в памяти и прочее, NTFS-права на папки с базами, на сетевые шары

    И что реально плохого в том, что есть, скажем, составной сиквельный джоб, в котором на шаге №2 надо отпарсить CSV-файлы при помощи T-SQL (не криминал, надеюсь, в вашем представлении, кстати?), соответственно на шаге №1 мы вызываем cmd для того, чтоб скопировать эти файлы из удаленной шары на, к примеру, локальную машину в stage-область, и сделать это именно при помощи шага уровня MSSQL agent job? Или надо переложить этот шаг на уровень внешнего модуля, - к примеру виндового джоба? Который будет синхронизирован по времени с сиквельным? И заранее еще, чтоб мало-ли по сети будет задержка и чтобы сиквельный джоб не начался раньше или во время процесса копирования? И потом еще синхронизацию и condition-логику между ними?
    Вот это реально хреновый дизайн, сложно поддерживать, документировать и прочее
    8 май 19, 15:13    [21881182]     Ответить | Цитировать Сообщить модератору
     Re: SQL Index Manager - бесплатная утилита по обслуживанию индексов для SQL Server и Azure  [new]
    zzzzzzzzzz
    Member

    Откуда:
    Сообщений: 310
    Mind
    Sergey Syrovatchenko,

    А что кто то еще дефрагментирует индексы? А зачем?


    SQL Server пофигу на все ваши ссд и видимость быстрой работы
    9 май 19, 01:24    [21881590]     Ответить | Цитировать Сообщить модератору
     Re: SQL Index Manager - бесплатная утилита по обслуживанию индексов для SQL Server и Azure  [new]
    Mind
    Member

    Откуда: Лучший город на Земле
    Сообщений: 2237
    zzzzzzzzzz
    Mind
    Sergey Syrovatchenko,

    А что кто то еще дефрагментирует индексы? А зачем?


    SQL Server пофигу на все ваши ссд и видимость быстрой работы
    Пруф пожалуйста?
    9 май 19, 08:55    [21881625]     Ответить | Цитировать Сообщить модератору
     Re: SQL Index Manager - бесплатная утилита по обслуживанию индексов для SQL Server и Azure  [new]
    Sergey Syrovatchenko
    Member

    Откуда: Харьков
    Сообщений: 30
    Выложил версию 1.0.0.34:

  • Добавил вывод лога в отдельном гриде
  • Возможность отключать некластерные индексы
  • Исправил мелкие ошибки при выделении

    Картинка с другого сайта.
  • 9 май 19, 09:27    [21881643]     Ответить | Цитировать Сообщить модератору
     Re: SQL Index Manager - бесплатная утилита по обслуживанию индексов для SQL Server и Azure  [new]
    andy st
    Member

    Откуда:
    Сообщений: 698
    Sergey Syrovatchenko,
    Встретил ошибку
    автор
    Сообщение 102, уровень 15, состояние 1, строка 29
    Incorrect syntax near ')'.

    Для sys.dm_db_index_physical_stats срабатывает исключение
    автор
    The built-in function DB_ID can be specified. When using DB_ID without specifying a database name, the compatibility level of the current database must be 90 or greater.
    13 май 19, 07:30    [21882966]     Ответить | Цитировать Сообщить модератору
     Re: SQL Index Manager - бесплатная утилита по обслуживанию индексов для SQL Server и Azure  [new]
    Sergey Syrovatchenko
    Member

    Откуда: Харьков
    Сообщений: 30
    andy st, а можно узнать версию SQL Server и compatibility level. Как я понял это 2008R2?
    13 май 19, 09:05    [21883004]     Ответить | Цитировать Сообщить модератору
     Re: SQL Index Manager - бесплатная утилита по обслуживанию индексов для SQL Server и Azure  [new]
    andy st
    Member

    Откуда:
    Сообщений: 698
    Sergey Syrovatchenko
    andy st, а можно узнать версию SQL Server и compatibility level. Как я понял это 2008R2?

    Microsoft SQL Server 2008 R2 (SP3) - 10.50.6529.0 (X64)   Mar 19 2015 13:19:13 
    Copyright (c) Microsoft Corporation  Enterprise Edition (64-bit) on Windows NT 5.2 <X64> (Build : ) (Hypervisor) 
    

    для проблемной базы compatibility level = 80
    13 май 19, 09:29    [21883039]     Ответить | Цитировать Сообщить модератору
     Re: SQL Index Manager - бесплатная утилита по обслуживанию индексов для SQL Server и Azure  [new]
    Sergey Syrovatchenko
    Member

    Откуда: Харьков
    Сообщений: 30
    Выложил версию 1.0.0.35:

  • Исправил ошибку для SQL Server 2008: "The built-in function DB_ID can be specified. When using DB_ID without specifying a database name..."
  • Возможность задавать FILLFACTOR при ребилде индексов
  • Можно игнорировать read-only файловые группы при сканировании
  • Можно игнорировать обьекты на которые у нас нет ALTER прав

    Картинка с другого сайта.
  • 13 май 19, 11:13    [21883129]     Ответить | Цитировать Сообщить модератору
     Re: SQL Index Manager - бесплатная утилита по обслуживанию индексов для SQL Server и Azure  [new]
    komrad
    Member

    Откуда: Msk -> Utrecht
    Сообщений: 4804
    Sergey Syrovatchenko,

    а DATA_COMPRESSION поддерживается?
    13 май 19, 11:44    [21883176]     Ответить | Цитировать Сообщить модератору
     Re: SQL Index Manager - бесплатная утилита по обслуживанию индексов для SQL Server и Azure  [new]
    Sergey Syrovatchenko
    Member

    Откуда: Харьков
    Сообщений: 30
    komrad
    DATA_COMPRESSION поддерживается?

    Да. Есть возможность вручную задавать компрессию для индекса, менять ROW -> PAGE, PAGE -> ROW, убирать вовсе и тд.
    Если это колумнстор, то там есть возможность его переводить в архивную колумнстор группу для большего уровня сжатия.
    13 май 19, 11:51    [21883185]     Ответить | Цитировать Сообщить модератору
     Re: SQL Index Manager - бесплатная утилита по обслуживанию индексов для SQL Server и Azure  [new]
    zzzzzzzzzz
    Member

    Откуда:
    Сообщений: 310
    Mind
    zzzzzzzzzz
    пропущено...


    SQL Server пофигу на все ваши ссд и видимость быстрой работы
    Пруф пожалуйста?


    какой именно пруф?
    подумайте/погуглите/сравните конкретно с вашим случем...
    Если индех фрагментировался по какой-либо причине оптимизатор запросов перестанет его использовать и будет вам фуллскан. Может ССД и вытянет какое-то время несмотря на увеличенный и никому не нужный обмен с диском. А так база медленно но уверенно превратится в помойку



    https://sqlperformance.com/2017/12/sql-indexes/impact-fragmentation-plans
    https://www.sqlskills.com/blogs/jonathan/does-index-fragmentation-matter-with-ssds/
    https://sqlperformance.com/2017/12/sql-indexes/impact-fragmentation-planshttps://www.sqlservercentral.com/forums/reply/1379912
    13 май 19, 18:31    [21883669]     Ответить | Цитировать Сообщить модератору
     Re: SQL Index Manager - бесплатная утилита по обслуживанию индексов для SQL Server и Azure  [new]
    zzzzzzzzzz
    Member

    Откуда:
    Сообщений: 310
    +
    https://sqlperformance.com/2014/11/io-subsystem/knee-jerk-performance-tuning-just-add-ssd
    13 май 19, 18:33    [21883674]     Ответить | Цитировать Сообщить модератору
     Re: SQL Index Manager - бесплатная утилита по обслуживанию индексов для SQL Server и Azure  [new]
    Mind
    Member

    Откуда: Лучший город на Земле
    Сообщений: 2237
    zzzzzzzzzz
    Mind
    пропущено...
    Пруф пожалуйста?

    Если индех фрагментировался по какой-либо причине оптимизатор запросов перестанет его использовать и будет вам фуллскан.
    Фу какой фрагментированный индекс. Я не буду его использовать.

    Для начала, на внешнюю фрагментацию оптимизатору пофигу, к тому же ему негде ее взять. Остается внутренняя или заполненность страниц. Если речь про поиск по индексу, то вообще побоку что там с заполненностью страниц. Ну будет индекс на 30% больше и что? Как это на стоимость то повлияет? Количество логических чтений то не поменяется.
    Если речь про скан индекса vs скан таблицы, то расскажите мне какая заполненность страниц должна быть у индекса чтобы он стал больше чем таблица? Даже в самом вырожденном случае если таблица очень узкая из 2х колонок, чтобы индекс стал больше таблицы заполненность должна упасть ниже 50% что по факту просто невозможно!
    14 май 19, 09:34    [21884060]     Ответить | Цитировать Сообщить модератору
     Re: SQL Index Manager - бесплатная утилита по обслуживанию индексов для SQL Server и Azure  [new]
    Mind
    Member

    Откуда: Лучший город на Земле
    Сообщений: 2237
    zzzzzzzzzz
    https://sqlperformance.com/2017/12/sql-indexes/impact-fragmentation-plans
    https://www.sqlskills.com/blogs/jonathan/does-index-fragmentation-matter-with-ssds/
    https://sqlperformance.com/2017/12/sql-indexes/impact-fragmentation-planshttps://www.sqlservercentral.com/forums/reply/1379912
    Самый первый комментарий от весельчака Брента порадовал: "the fragmented query runs FASTER, not slower"

    Вторая ссылка, для вырожденного примера с равнораспределенным ключем и сканом таблицы: " The actual runtimes of the two tests were nearly identical, and often flipped back and forth between which one took a few milliseconds longer than the other to complete for this demo. "
    Возможно если база используется как data warehouse и в ней много сканов то может иметь смысл дефрагментировать, но не для OLTP нагрузки.

    Аргументы Пола по сути противоречат друг другу:
    "1. SSDs in no way stop the cause of index fragmentation: page splits from pages needing free space for a random insert or row size increase. A page split generates the same amount of transaction log, resource usage, and potential thread waits regardless of where the data/log files are stored.
    2. Index fragmentation includes having many data/index pages with low page density (i.e. lots of empty, free space). Do you really want your expensive SSDs storing lots of empty space? SSDs don’t help here at all."
    Чтобы избавиться от #1 (page splits) нужно по сути делать ребилд с fillfactor ниже 100, но сколько? 95, 90, 80? Если сделать слишком высокий то страницы быстро заполнятся и пойдут опять таки page splits, а если низкий, то чем ниже мы делаем fillfactor, тем сильнее получается фрагментация сразу после дорогостоящей операции ребилда! И таким образом получаем таки "low page density" прям по #2. Ну или я не так его понял.

    Я не против обслуживания индексов как такового, я просто про то что в большинстве случаев ребилды всего подряд по бездумному правилу 5% - 30% не имеют особого смысла.
    14 май 19, 10:12    [21884094]     Ответить | Цитировать Сообщить модератору
     Re: SQL Index Manager - бесплатная утилита по обслуживанию индексов для SQL Server и Azure  [new]
    Александр Гладченко
    Member

    Откуда:
    Сообщений: 10674
    Блог
    Добавьте ещё большой и красный баннер перед началом работы, что если данные на SSD ни в коем случае не делать REBUILD. Это совершенно напрасная операция (ввиду алгоритмов рассеяния блоков в логике работы SSD), которая приводит только к преждевременному исчерпанию ресурса диска.
    После ребилда нужно делать обновление статистики.
    14 май 19, 12:08    [21884249]     Ответить | Цитировать Сообщить модератору
     Re: SQL Index Manager - бесплатная утилита по обслуживанию индексов для SQL Server и Azure  [new]
    Sergey Syrovatchenko
    Member

    Откуда: Харьков
    Сообщений: 30
    Александр Гладченко
    После ребилда нужно делать обновление статистики.

    Это вы в контексте того, что после ребилда делается FULL обновление статистики, а нужно делать какое-то другое?
    14 май 19, 12:52    [21884310]     Ответить | Цитировать Сообщить модератору
     Re: SQL Index Manager - бесплатная утилита по обслуживанию индексов для SQL Server и Azure  [new]
    Александр Гладченко
    Member

    Откуда:
    Сообщений: 10674
    Блог
    Sergey Syrovatchenko,
    Я про это: https://blogs.msdn.microsoft.com/psssql/2015/03/06/does-rebuild-index-update-statistics/
    14 май 19, 13:33    [21884365]     Ответить | Цитировать Сообщить модератору
     Re: SQL Index Manager - бесплатная утилита по обслуживанию индексов для SQL Server и Azure  [new]
    Sergey Syrovatchenko
    Member

    Откуда: Харьков
    Сообщений: 30
    Александр Гладченко, то есть необходимо предусмотреть ситуацию при ребилде кластерного индекса насильно еще обновлять все user_created и auto-created статистику на таблице?
    Опционально это сделать не проблема, но как быть тогда с секционированными таблицами?
    14 май 19, 13:38    [21884372]     Ответить | Цитировать Сообщить модератору
     Re: SQL Index Manager - бесплатная утилита по обслуживанию индексов для SQL Server и Azure  [new]
    Александр Гладченко
    Member

    Откуда:
    Сообщений: 10674
    Блог
    Sergey Syrovatchenko,
    Дефрагментация на листовом уровне сломает все статистики, это будет особенно заметно на больших таблицах, где даже "новомодное" автообновление статистики не спасает от проблем с правильной статистикой для оптимизатора. В таких случаях часто помогает только обновление некластерных индексов с полным сканированием.
    Секционирование вносит ещё большее разнообразие вариантов дефрагментации - будет интересно понаблюдать, как Вы с этим справитесь :) ...есть ведь ещё и фильтрованные индексы, и много чего ещё есть....
    14 май 19, 14:21    [21884449]     Ответить | Цитировать Сообщить модератору
     Re: SQL Index Manager - бесплатная утилита по обслуживанию индексов для SQL Server и Azure  [new]
    Sergey Syrovatchenko
    Member

    Откуда: Харьков
    Сообщений: 30
    Александр Гладченко, исходя из такого кейса предусмотреть возможность вместе с кластерным индексом ребилдить и все некластерные?
    Если я вас правильно понял.

    Текущий функционал по обновлению статистики работает только для таблиц где нет секционирования.
    Думаю в дальшейнем можно будет заморочится и сделать все по феншую, но тут вопрос стоит ли?
    Насколько часто нужно по секциям обновлять статистику? У меня в практике такое редко было.
    Чаще всего, фильтрованную статистику только отдельно обновлял построенное по выбранным секциям.
    14 май 19, 14:28    [21884456]     Ответить | Цитировать Сообщить модератору
     Re: SQL Index Manager - бесплатная утилита по обслуживанию индексов для SQL Server и Azure  [new]
    Александр Гладченко
    Member

    Откуда:
    Сообщений: 10674
    Блог
    Sergey Syrovatchenko
    Александр Гладченко, исходя из такого кейса предусмотреть возможность вместе с кластерным индексом ребилдить и все некластерные?
    Если я вас правильно понял.

    Текущий функционал по обновлению статистики работает только для таблиц где нет секционирования.
    Думаю в дальшейнем можно будет заморочится и сделать все по феншую, но тут вопрос стоит ли?
    Насколько часто нужно по секциям обновлять статистику? У меня в практике такое редко было.
    Чаще всего, фильтрованную статистику только отдельно обновлял построенное по выбранным секциям.


    Я не призывал ребилдить все некластерные индексы. Речь шла о статистиках.
    Секционирование зависит от функции секционирования, а она может быть далеко не тривиальной и "работать" может не одна секция...
    В природе ещё встречаются всякие распределённые секционированные представления, что будет со статистикой на их индексах, если отребилдить кластерный, который в основе представления - задайтесь таким вопросом...
    Вопрос в том, кто будет отвечать на вопросы пользователей, когда ребилд индекса, выполненный с помощью Вашей утилиты, приведёт к простою промышленной базы? ...проконсультируйтесь на эту тему с хорошим юристом в этой области...
    14 май 19, 14:39    [21884480]     Ответить | Цитировать Сообщить модератору
     Re: SQL Index Manager - бесплатная утилита по обслуживанию индексов для SQL Server и Azure  [new]
    zzzzzzzzzz
    Member

    Откуда:
    Сообщений: 310
    [quot Mind]
    >>Я не против обслуживания индексов как такового, я просто про то что в большинстве случаев ребилды всего подряд по бездумному правилу 5% - 30% не имеют особого смысла.
    Я с вами уже почти согласен :) Зависит от конкретного случая.

    zzzzzzzzzz
    . Ну будет индекс на 30% больше и что? Как это на стоимость то повлияет? Количество логических чтений то не поменяется.

    при выборе индекса опимизатор стотрит на статистику и количество страниц индекса которое вырастет при фрагментации (где-то было в ссылках выше). Само абсолютное значение фрагментации в %% не смотрит
    14 май 19, 14:53    [21884498]     Ответить | Цитировать Сообщить модератору
     Re: SQL Index Manager - бесплатная утилита по обслуживанию индексов для SQL Server и Azure  [new]
    zzzzzzzzzz
    Member

    Откуда:
    Сообщений: 310
    zzzzzzzzzz
    (где-то было в ссылках выше).


    https://sqlperformance.com/2017/12/sql-indexes/impact-fragmentation-plans
    в комментариях
    14 май 19, 17:02    [21884620]     Ответить | Цитировать Сообщить модератору
     Re: SQL Index Manager - бесплатная утилита по обслуживанию индексов для SQL Server и Azure  [new]
    Mind
    Member

    Откуда: Лучший город на Земле
    Сообщений: 2237
    zzzzzzzzzz
    Mind
    >>Я не против обслуживания индексов как такового, я просто про то что в большинстве случаев ребилды всего подряд по бездумному правилу 5% - 30% не имеют особого смысла.

    Я с вами уже почти согласен :) Зависит от конкретного случая.

    пропущено...

    при выборе индекса опимизатор стотрит на статистику и количество страниц индекса которое вырастет при фрагментации (где-то было в ссылках выше). Само абсолютное значение фрагментации в %% не смотрит
    Еще раз. Это имеет значение только при скане индекса, потому что только тогда нужно прочитать все страницы, следовательно оценка расчитывается как [количество страниц в индексе] * [magic number]. Если же у нас поиск, то по барабану, ибо общее количество страниц в индексе никак не учитывается, какая разницы у вас индекс 10Гб или 15Гб если вам нужно прочитать 1 строку? Возможно на маленьких индексах будет на одно нелистовое чтение больше, но это во-первых, ничтожное падение производительности, во-вторых на больших таблицах даже такой разницы не будет.

    Короче, если у вас огромное хранилище данных и много сканов, то возможно стоит дефрагментировать, лучше во время загрузки данных в то хранилище :)
    Если у вас огромная, но правильно спроектированная OLTP база, и сканов нет, то смысл создавать лишнюю нагрузку без очевидного выигрыша, особенно если это 24/7 и нет больших технических окон? Если же есть сканы, тогда возможно лишняя нагрузка от сканов перевешивает ребилды, но тоже не факт. Как было написано в одной из статей, SSD может сгладить негативный эффект от фрагментированных индексов если дисковая не сильно нагружена.
    14 май 19, 21:53    [21884807]     Ответить | Цитировать Сообщить модератору
     Re: SQL Index Manager - бесплатная утилита по обслуживанию индексов для SQL Server и Azure  [new]
    Sergey Syrovatchenko
    Member

    Откуда: Харьков
    Сообщений: 30
    Тут коллега интересную идею предложил. Прикрутить конструктор условий, т.е. есть грид в котором мы задаем народ из условий и выбираем действие для исправления этой ситуации.

    Была ли такая штука полезной? Может есть идеи как по удобнее реализовать.
    15 май 19, 17:02    [21885580]     Ответить | Цитировать Сообщить модератору
     Re: SQL Index Manager - бесплатная утилита по обслуживанию индексов для SQL Server и Azure  [new]
    Ролг Хупин
    Member

    Откуда: Чебаркуль
    Сообщений: 2571
    Sergey Syrovatchenko
    Тут коллега интересную идею предложил. Прикрутить конструктор условий, т.е. есть грид в котором мы задаем народ из условий и выбираем действие для исправления этой ситуации.

    Была ли такая штука полезной? Может есть идеи как по удобнее реализовать.


    как говорят(ц) не тот народ попался в гриде
    16 май 19, 08:33    [21885850]     Ответить | Цитировать Сообщить модератору
     Re: SQL Index Manager - бесплатная утилита по обслуживанию индексов для SQL Server и Azure  [new]
    Sergey Syrovatchenko
    Member

    Откуда: Харьков
    Сообщений: 30
    Ролг Хупин, реально классно что на форуме нельзя править сообщения. Иногда такие перлы попадаются )))

    Если же серьезно, то появилась идея сделать тул более функциональным и кастомизируемым.
    Планирую добавить контрол в котором можно задавать набор условий и действие которое нужно сделать над индексом, когда эти условия выполняются. В порядке определенного приоритета.

    И тут есть пара противоречий. Размер индекса (с ... по ... ) является обязательным параметром. Остальные условия можно кастомизировать.
    Нужно ли уровень фрагментации делать обязательным параметром для каждого условия?

    Примеры таких условий может кто-то предложить? Скажем когда выгоднее делать обновление статистики а не ребилд, потому что все очень сильно зависит от системы и нагрузки.
    16 май 19, 09:23    [21885890]     Ответить | Цитировать Сообщить модератору
     Re: SQL Index Manager - бесплатная утилита по обслуживанию индексов для SQL Server и Azure  [new]
    Mind
    Member

    Откуда: Лучший город на Земле
    Сообщений: 2237
    Sergey Syrovatchenko
    На данный момент и в дальнейшем, SQL Index Manager полностью бесплатный.
    DevExpress тоже бесплатный?

    Sergey Syrovatchenko
    Mind
    Может ради пустого места в индексах и можно заморочиться, но не ради фрагментации как таковой. Пустое место критично хотя бы, потому что память занимает.

    Тут я с Вами солидарен. Из этих соображений я и добавил отдельную колонку Unused Place по которой можно быстро найти индексы, где много свободного места.

    UnusedPagesCount = CASE WHEN ABS(a.ReservedPages - a.UsedPages) > 32 THEN a.ReservedPages - a.UsedPages ELSE 0 END
    

    Как у вас хитро количество неиспользуемых страниц превращается в неиспользуемое индексное пространство.
    Да мне как то по барабану сколько там пустых страниц в индексе, они то ну вообще никак не влияют ни на скорость выполнения запросов ни на количество используемой памяти. Дефрагментировать по этому признаку это все равно что ногти подстригать чтобы гимморой вылечить.

    Sergey Syrovatchenko
    Нужно ли уровень фрагментации делать обязательным параметром для каждого условия?
    Можно по fill factor (avg_page_space_used_in_percent) ребилдить, не обязательно по фрагментации. Но у вас его нету, да и считать затратно.

    Sergey Syrovatchenko
    Скажем когда выгоднее делать обновление статистики а не ребилд, потому что все очень сильно зависит от системы и нагрузки.
    Это так то вообще не взаимозаменяемые операции. Статистику надо всегда пересчитывать, кроме особо экзотических случаев.

    Sergey Syrovatchenko
    Примеры таких условий может кто-то предложить?
    В том то и проблема, иметь такую функциональность конечно хорошо, но вот кто и как ею будет пользоваться? Если бы тул сам на основе анализа предыдущих ребилдов, потраченного времени, фрагментации до и после, периодичности ребилдов, статистики использования индексов и прочих разных данных предлагал бы правила и опции ребилда и как часто и когда его лучше делать, то был бы смысл. А так, кто все эти правила будет настраивать и кто гарантирует что они оптимальные? Это либо пальцем в небо, либо нужно потратить кучу времени на весь этот анализ вручную. А выхлоп какой? Будет ли разница по сравнению с таким подходом, или тупым в лоб или вообще без всякого ребилда? Как эту разницу измерять? В том что уменьшится количество page splits?
    Вот скажем та же опция задавать fill factor вручную. Для 95% индексов самый лучший fill factor это дефолтный. Ребилдить все с fill factor = 80 это несусветная глупость. Для того чтобы настроить fill factor для каждого индекса индивидуально нужно потратить кучу времени. Есть ли смысл это делать?
    16 май 19, 23:34    [21886700]     Ответить | Цитировать Сообщить модератору
     Re: SQL Index Manager - бесплатная утилита по обслуживанию индексов для SQL Server и Azure  [new]
    Sergey Syrovatchenko
    Member

    Откуда: Харьков
    Сообщений: 30
    Mind
    DevExpress тоже бесплатный?

    Я вроде DevEx еще никому не впаривал :)

    У самого есть лицензия (правда старая). Тем более на библиотеки не распространяются ограничения если продукт был сделан на основе лицензии.
    Тем кому эти компоненты не нравятся можно прикрутить хоть WPF хоть что угодно другое.
    К слову это тоже в будующих планах - свои контролы сделать.
    17 май 19, 09:02    [21886840]     Ответить | Цитировать Сообщить модератору
     Re: SQL Index Manager - бесплатная утилита по обслуживанию индексов для SQL Server и Azure  [new]
    Ролг Хупин
    Member

    Откуда: Чебаркуль
    Сообщений: 2571
    Sergey Syrovatchenko
    Mind
    DevExpress тоже бесплатный?

    Я вроде DevEx еще никому не впаривал :)

    У самого есть лицензия (правда старая). Тем более на библиотеки не распространяются ограничения если продукт был сделан на основе лицензии.
    Тем кому эти компоненты не нравятся можно прикрутить хоть WPF хоть что угодно другое.
    К слову это тоже в будующих планах - свои контролы сделать.


    От DevEx надо избавляться, тем более, что приложение мало контролов использует, грид, еще 2-3.
    Можно прикрутить, что-то простое и бесплатное.
    17 май 19, 12:12    [21887105]     Ответить | Цитировать Сообщить модератору
     Re: SQL Index Manager - бесплатная утилита по обслуживанию индексов для SQL Server и Azure  [new]
    Sergey Syrovatchenko
    Member

    Откуда: Харьков
    Сообщений: 30
    Ролг Хупин
    От DevEx надо избавляться

    Увы, тут вы правы. Не все вещи в DevEx хорошие. Возможно в будующем как коммандную строку сделаю, то на WPF переведу проект.
    17 май 19, 13:03    [21887176]     Ответить | Цитировать Сообщить модератору
     Re: SQL Index Manager - бесплатная утилита по обслуживанию индексов для SQL Server и Azure  [new]
    Mind
    Member

    Откуда: Лучший город на Земле
    Сообщений: 2237
    Sergey Syrovatchenko
    Mind
    DevExpress тоже бесплатный?

    Я вроде DevEx еще никому не впаривал :)

    У самого есть лицензия (правда старая).
    Я за вас рад...
    17 май 19, 18:28    [21887550]     Ответить | Цитировать Сообщить модератору
     Re: SQL Index Manager - бесплатная утилита по обслуживанию индексов для SQL Server и Azure  [new]
    TaPaK
    Member

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

    Так и не понял чем плох devexpres... Немного используем telerik под win и web. Лицензия все позволяет
    17 май 19, 18:33    [21887555]     Ответить | Цитировать Сообщить модератору
     Re: SQL Index Manager - бесплатная утилита по обслуживанию индексов для SQL Server и Azure  [new]
    Mind
    Member

    Откуда: Лучший город на Земле
    Сообщений: 2237
    TaPaK
    Mind,

    Так и не понял чем плох devexpres... Немного используем telerik под win и web. Лицензия все позволяет
    Так он бесплатный или нет? Мне лицензию нужно покупать чтобы скомпилировать бесплатную программу? Или мне все переписывать?
    17 май 19, 19:13    [21887581]     Ответить | Цитировать Сообщить модератору
     Re: SQL Index Manager - бесплатная утилита по обслуживанию индексов для SQL Server и Azure  [new]
    Sergey Syrovatchenko
    Member

    Откуда: Харьков
    Сообщений: 30
    Mind, никаких лицензий не нужно. Я специально все нужные либы приложил, чтобы можно было скомпилить прогу. Сорри, я просто вначале не понял вашего вопроса относительно DevEx.
    17 май 19, 19:43    [21887591]     Ответить | Цитировать Сообщить модератору
     Re: SQL Index Manager - бесплатная утилита по обслуживанию индексов для SQL Server и Azure  [new]
    Sergey Syrovatchenko
    Member

    Откуда: Харьков
    Сообщений: 30
    Выложил версию 1.0.0.36:

  • Добавил новые поля в гриде (операции Seeks/Scans/Lookups в разрезе индекса)
  • При выборе баз показывается Recovery Model в гриде
  • Возможность автоматически задавать DATA_COMPRESSION для индексов при ребилде
  • Возможность фильтрации скана только по выбранным схемам
  • Фикс при фильтрации не учитывались схемы с юникодными именами

    Картинка с другого сайта.

    Отдельно вопрос. Нужно ли показывать инфу о том какие индексы имеют статус NORECOMPUTE?
  • 19 май 19, 15:57    [21888228]     Ответить | Цитировать Сообщить модератору
     Re: SQL Index Manager - бесплатная утилита по обслуживанию индексов для SQL Server и Azure  [new]
    ЕвгенийGEM
    Member

    Откуда:
    Сообщений: 82
    Sergey Syrovatchenko,
    первое-программа просто бомба, применяю на работе как контроль над автоматизированными методами оптимизации статистик

    Детальный разбор самого проекта, а также его работа через профайлер показал следующие моменты:
    1) в запросе:
    SELECT * FROM sys.databases WHERE DB_NAME() not in ('master', 'tempdb', 'model', 'msdb', 'mssqlsystemresource');
    нужно DB_Name() сменить на [name]:
    SELECT * FROM sys.databases WHERE [name] not in ('master', 'tempdb', 'model', 'msdb', 'mssqlsystemresource');
    в связи с ошибкой в коде происходит обслуживание и системных БД

    2) в запросе:
    IF OBJECT_ID(''tempdb.dbo.#AllocationUnits'') IS NOT NULL
    DROP TABLE #AllocationUnits

    CREATE TABLE #AllocationUnits (
    ContainerID BIGINT PRIMARY KEY
    , ReservedPages BIGINT NOT NULL
    , UsedPages BIGINT NOT NULL
    )

    INSERT INTO #AllocationUnits (ContainerID, ReservedPages, UsedPages)
    SELECT [container_id]
    , SUM([total_pages])
    , SUM([used_pages])
    FROM sys.allocation_units WITH(NOLOCK)
    GROUP BY [container_id]
    HAVING SUM([total_pages]) BETWEEN @MinIndexSize AND @MaxIndexSize;

    скорее всего нужно учитывать неудаленные, т е у которых [type]<>0
    источник: https://docs.microsoft.com/ru-ru/sql/relational-databases/system-catalog-views/sys-allocation-units-transact-sql?view=sql-server-2017

    больше вопросов не возникло и проблем не обнаружил

    Теперь пожелания:
    1) сделать возможным обслуживание системных БД (master, msdb)
    2) сделать возможным выборочно обновлять статистики не только для индексов и также разными способами (полностью обновлять или частично)
    3) сделать возможным не только выбирать БД, но и разные сервера (это очень удобно, когда много экземпляров скулей).

    Также скачанный проект не компилируется, выдавая код ошибки, который расшифровывается как проблема с лицензией компонентов DevExpress
    сегодня, 17:09    [21891022]     Ответить | Цитировать Сообщить модератору
     Re: SQL Index Manager - бесплатная утилита по обслуживанию индексов для SQL Server и Azure  [new]
    ЕвгенийGEM
    Member

    Откуда:
    Сообщений: 82
    Sergey Syrovatchenko,

    и еще хорошо бы аналогичное по анализу и оптимизации существующих статистик
    сегодня, 17:09    [21891025]     Ответить | Цитировать Сообщить модератору
     Re: SQL Index Manager - бесплатная утилита по обслуживанию индексов для SQL Server и Azure  [new]
    Sergey Syrovatchenko
    Member

    Откуда: Харьков
    Сообщений: 30
    ЕвгенийGEM
    SELECT * FROM sys.databases WHERE DB_NAME() not in ('master', 'tempdb', 'model', 'msdb', 'mssqlsystemresource');

    Запрос точно не мой :)

    У меня в коде базы получаются так:

    SELECT DatabaseName = t.[name]
         , d.DataSize
         , d.LogSize
         , RecoveryModel = t.recovery_model_desc
    FROM sys.databases t WITH(NOLOCK)
    LEFT JOIN (
        SELECT [database_id]
             , DataSize = SUM(CASE WHEN [type] = 0 THEN CAST(size AS BIGINT) END)
             , LogSize  = SUM(CASE WHEN [type] = 1 THEN CAST(size AS BIGINT) END)
        FROM sys.master_files WITH(NOLOCK)
        GROUP BY [database_id]
    ) d ON d.[database_id] = t.[database_id]
    WHERE t.[state] = 0
        AND t.[database_id] != 2
        AND ISNULL(HAS_DBACCESS(t.[name]), 1) = 1
    

    ЕвгенийGEM
    скорее всего нужно учитывать неудаленные, т е у которых [type]<>0

    Замечание важное. Погляжу как это затрагивает мою текущую логику

    ЕвгенийGEM
    сделать возможным обслуживание системных БД (master, msdb)

    То есть обслуживать системные обьекты? Потому как пользовательские обьекты в системных базах обслуживать можно.

    ЕвгенийGEM
    сделать возможным выборочно обновлять статистики не только для индексов и также разными способами (полностью обновлять или частично)

    В ближайших планах что-то сделать в этом направлении. Есть идея показывать статистику просто как отдельную строку и фильтровать по степени устаревания и тому сколько изменений было на уровне индекса.

    ЕвгенийGEM
    сделать возможным не только выбирать БД, но и разные сервера (это очень удобно, когда много экземпляров скулей).

    Увы это пока реализовать быстро не получится, но на перспективу учтем.

    ЕвгенийGEM
    выдавая код ошибки, который расшифровывается как проблема с лицензией компонентов DevExpress

    Можно точное сообщение об ошибке показать. У меня просто с таким проблем не было на 2017й студии.
    сегодня, 17:27    [21891052]     Ответить | Цитировать Сообщить модератору
    Топик располагается на нескольких страницах: 1 2 3      [все]
    Все форумы / Microsoft SQL Server Ответить