Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
Все форумы / Microsoft SQL Server |
![]() ![]() |
Топик располагается на нескольких страницах: 1 2 3 4 5 6 7 8 [все] |
Sergey Syrovatchenko Member Откуда: Сообщений: 169 |
Так уж исторически сложилось, что долгое время участвовал в разработке системных тулов для обслуживания SQL Server. За это время накопилось много идей и на определенном этапе захотелось сделать что-то свое. В результате получилось приложение, которое позволяет обслуживать индексы через удобный UI. За основных конкурентов брались платные аналоги от компаний RedGate / Devart (155 $ / 99 $ на текущий момент). Ключевые особенности SQL Index Manager (1.0.0.31): * * * 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] Ответить | Цитировать Сообщить модератору |
Гавриленко Сергей Алексеевич Member Откуда: Moscow Сообщений: 37143 |
|
|
6 май 19, 17:41 [21879227] Ответить | Цитировать Сообщить модератору |
Mind Member Откуда: Лучший город на Земле Сообщений: 2322 |
Sergey Syrovatchenko, А что кто то еще дефрагментирует индексы? А зачем? Еще и тул для этого писать. Создавать лишнюю нагрузку во время получения данных о фрагментации, а потом еще во время ребилда генерить кучу логов и потенциально отправлять их на secondary сервера. И все ради того чтобы получить чуть чуть лучше перформанс? Может ради пустого места в индексах и можно заморочиться, но не ради фрагментации как таковой. Пустое место критично хотя бы потому что память занимает. Можно чтобы тул делал так? Несколько раз в течение дня опрашивал буферы дынных и записывал в каких индексах много пустого места, а потом во время maintenance window их реорганизовывал. |
6 май 19, 22:23 [21879429] Ответить | Цитировать Сообщить модератору |
komrad Member Откуда: Сообщений: 5496 |
это, кстати, хорошая мысль - реорганизация горячих таблиц/индексов |
||
6 май 19, 23:42 [21879464] Ответить | Цитировать Сообщить модератору |
Sergey Syrovatchenko Member Откуда: Сообщений: 169 |
Выложил версию 1.0.0.32:
Тут я с Вами солидарен. Из этих соображений я и добавил отдельную колонку Unused Place по которой можно быстро найти индексы, где много свободного места.
Идея и вправду хорошая. Когда будет командная строка, то можно будет добавить опцию "показывать индексы, где много свободного места" и задавать какой-то %. |
||||
7 май 19, 00:41 [21879492] Ответить | Цитировать Сообщить модератору |
Ролг Хупин Member Откуда: Чебаркуль Сообщений: 3970 |
Неплохо, но есть и фигня вообще-то Log folder: C:\WINDOWS\system32 Неплохо бы сделать так: 1. настраивать в приложении есть ли лог, куда лог и т.д. 2. показывать лог в приложении, а не искать потом х.п. где 3. сделать лог как, например, сделано в log4net, тогда можно настроить хоть в сеть, хоть в файлы и т.д. Попытался подсунуть битую базу, он смог вытащить 3 записи об индексах в грид, а реально там сотня. Может были ошибки, так не видно. |
7 май 19, 16:18 [21880129] Ответить | Цитировать Сообщить модератору |
Andrey Sribnyak Member Откуда: Киев Сообщений: 599 |
Сергей, полезная утилита. Можно ли задать Fillfactor? |
7 май 19, 17:44 [21880219] Ответить | Цитировать Сообщить модератору |
Sergey Syrovatchenko Member Откуда: Сообщений: 169 |
Andrey Sribnyak, как бы вы пользовались этой фичей? Есть мысль добавить возможность при любом ребилде задавать свой уровень филл фактора и, отдельно, чтобы была возможность его в 0 выставлять. Сейчас мы просто наследуем настройки сервера. |
7 май 19, 19:17 [21880318] Ответить | Цитировать Сообщить модератору |
Mind Member Откуда: Лучший город на Земле Сообщений: 2322 |
Я вижу как минимуму несколько плюсов: 1. Легко получить данные по свободному месту, все что нужно уже в памяти. Не нужно сканировать таблицы, пусть даже и в sample (что я так подозреваю тул и делает) создавая тем самым лишнюю рандомную IO нагрузку 2. Обрабатываем только то что обычно попадает в память. Лопатить то что большую часть времени лежит на диске смысла особого нет 3. Если делать реорганизацию сразу то она должна быть существенно дешевле потому что часть данных уже в памяти. |
||||
7 май 19, 22:25 [21880430] Ответить | Цитировать Сообщить модератору |
tunknown Member Откуда: Сообщений: 766 |
Могу предложить сырую идею. Мастер вычисления филлфактора. Для кластерного суррогатного наиболее вероятно- 100%. Для остальных попытаться вычислить исходя: Можно даже спросить у пользователя, какие поля преимущественно равномерно возрастают исходя из бизнес-процессов. |
||
8 май 19, 09:41 [21880656] Ответить | Цитировать Сообщить модератору |
Sergey Syrovatchenko Member Откуда: Сообщений: 169 |
Выложил версию 1.0.0.33:![]()
Добавил обработку ошибок. Если есть возможность скинуть для тестов битую базу, то буду благодарен.
Постараюсь в скором времени сделать. |
||||
8 май 19, 11:16 [21880772] Ответить | Цитировать Сообщить модератору |
Ролг Хупин Member Откуда: Чебаркуль Сообщений: 3970 |
Sergey Syrovatchenko, не могу дать битую базу, Заратустра не позволяет, база клиентская. Но вы можете сделать из своей рабочей битую, это делается не сложно. |
8 май 19, 11:25 [21880787] Ответить | Цитировать Сообщить модератору |
Sergey Syrovatchenko Member Откуда: Сообщений: 169 |
Ролг Хупин, а какого рода страницы были побиты в Вашей базе? Только INROW? Или еще были затронуты PSF и тд? |
8 май 19, 11:28 [21880791] Ответить | Цитировать Сообщить модератору |
PsyMisha Member Откуда: другая столица Сообщений: 798 |
Sergey Syrovatchenko, Сергей, здорово, спасибо, класс! Поддержка командной строки была бы очень в тему, что можно было бы создавать агент-джобы, и при наличии сайлент-режима работы приложения, - зашедулить эти вызовы приложения с параметрами на перманентной основе P.S. - не рассматривали кстати в плане определенного конкурента по maintenance'у индексов и прочего и такой солюшн - Ola Hallengren's "Maintenance Solution"? https://ola.hallengren.com/ |
8 май 19, 13:31 [21880966] Ответить | Цитировать Сообщить модератору |
komrad Member Откуда: Сообщений: 5496 |
имхо, они не конкуренты - здесь бинарник и правит программист, у Ол(-ы/-и) t-sql код, который может допилить под собственные нужды даже ДБА кстати, Sergey Syrovatchenko, а как с параллельной работой этого приложения? допустим, случай когда два экземпляра gui/commandline обрабатывают одну базу одновременно (в силу разных причин)? |
||
8 май 19, 13:38 [21880979] Ответить | Цитировать Сообщить модератору |
Sergey Syrovatchenko Member Откуда: Сообщений: 169 |
Если мы говорим о сканирование индексов на предмет фрагментации, то запросы друг друга не блокируют. А вот если брать обслуживание, то блокировки будут (Sch-M чаще всего, когда пытаемся один и тот же индекс обслуживать). Также не забываем о Sch-S, когда мы не можем ничего делать с индексом до тех пор пока из него происходит чтение каким-либо запросом. |
||
8 май 19, 13:51 [21881000] Ответить | Цитировать Сообщить модератору |
Sergey Syrovatchenko Member Откуда: Сообщений: 169 |
Есть еще пара идей. Сейчас список индексов мы получаем полностью без проверки на то если ли права эти индексы обслуживать. Добавить ли опцию "показывать только обьекты на которые есть права"? Нужно ли добавить возможность "отключать индекс"? Скажем если мы видим что индекс не используется на основе данных с sys.dm_db_index_usage_stats. То как это вьюха работает уже другой вопрос. |
8 май 19, 14:00 [21881026] Ответить | Цитировать Сообщить модератору |
PsyMisha Member Откуда: другая столица Сообщений: 798 |
нуу, вопрос открытости - он скорее вещь интимная, скажем, по-сути - для пользователя не важно, что скрыто за блэк-боксом, главное, что есть функционал А с параметрами Б, который надо запустить для получения результата С В плане графической привлекательности - все здорово, такие кейсы тоже есть когда надо наглядно продемонстрировать, обосновать этапы/выбор работ и визуально все в красивую обёртку завернуть Но множество работ по реальной поддержке - именно сайлент-режим, без гуёв, чтоб оно работало, оперделяло степень фрагментированности, и некий, скажем а-ля искусственный интеллект, который на основании данных на вход генерит динамический код на выполнение с учётом предшествующего анализа В этом ракурсе, не интерактивном использовании, - считаю будущий режим командной строки и решение Ola конкурентами |
||
8 май 19, 14:36 [21881105] Ответить | Цитировать Сообщить модератору |
TaPaK Member Откуда: Kiev Сообщений: 6801 |
PsyMisha,
потом просыпается секьюрити и здравый смысл с вопросом, а что ей запретит сделать, что угодно |
||
8 май 19, 14:41 [21881114] Ответить | Цитировать Сообщить модератору |
PsyMisha Member Откуда: другая столица Сообщений: 798 |
TaPaK, А что помешает, в таком случае, в обычный сиквельный джоб или план обслуживания из коробки - внедрить скрипт, или вызов батника, или powerShell'а, или .NET-модуля, который имперсонируя контекст безопасности службы sql-agent'а творить все, что только душа пожелает на локальной и/или удаленной машинах/сети? |
8 май 19, 14:45 [21881118] Ответить | Цитировать Сообщить модератору |
TaPaK Member Откуда: Kiev Сообщений: 6801 |
что за бред я прочитал |
||
8 май 19, 14:46 [21881120] Ответить | Цитировать Сообщить модератору |
PsyMisha Member Откуда: другая столица Сообщений: 798 |
TaPaK, ахахах, всмысле?? :) я десятки раз, и не только я - делал автомейшен, используя сиквел и его джобы с шагами - как оркестратор и дёргалку различных модулей на любых доступных ЯП внутри сиквела и во внешнем мире и не только я лично вызывал батники из джоба, это вообще-то встроенный и штатный функционал продукта, ка и всякие xp_cmdshell Предлагаю оставить на данный момент вопрос целесообразности и дизайна - случаи бывают разные :) Главное - что технически возможность есть, и она не прикрыта Да и Ola тот же - может через sqlcmd работать, или все тоже так скажем API через хранимые процедуры |
8 май 19, 14:50 [21881130] Ответить | Цитировать Сообщить модератору |
TaPaK Member Откуда: Kiev Сообщений: 6801 |
что за бред часть 2. Вас дружно спустят в подвал и "ахха" будет иметь несколько другой тон, коробка с доступом уровня управления сервером под это будут подписываться или дети или производитель коробки будет иметь достаточно серъёзную репутацию и возможности связанные как договорами так и юридическими последствиями |
||
8 май 19, 14:55 [21881138] Ответить | Цитировать Сообщить модератору |
PsyMisha Member Откуда: другая столица Сообщений: 798 |
TaPaK, Да, окей, спасибо, благодарю за мнение, всех благ, ну и т.д. и т.п. |
8 май 19, 14:56 [21881141] Ответить | Цитировать Сообщить модератору |
PsyMisha Member Откуда: другая столица Сообщений: 798 |
Ну и все же, возвращаясь к вопросу секурности - никто же не говорит что нужно давать права enterprise-админа учётке, из под которой ранятся сиквельные службы? Все по правилам и гайдам Microsoft - права пользователя в ОС, необходимые вручную заданные разрешения в локальной GPO на закрепление страниц в памяти и прочее, NTFS-права на папки с базами, на сетевые шары И что реально плохого в том, что есть, скажем, составной сиквельный джоб, в котором на шаге №2 надо отпарсить CSV-файлы при помощи T-SQL (не криминал, надеюсь, в вашем представлении, кстати?), соответственно на шаге №1 мы вызываем cmd для того, чтоб скопировать эти файлы из удаленной шары на, к примеру, локальную машину в stage-область, и сделать это именно при помощи шага уровня MSSQL agent job? Или надо переложить этот шаг на уровень внешнего модуля, - к примеру виндового джоба? Который будет синхронизирован по времени с сиквельным? И заранее еще, чтоб мало-ли по сети будет задержка и чтобы сиквельный джоб не начался раньше или во время процесса копирования? И потом еще синхронизацию и condition-логику между ними? Вот это реально хреновый дизайн, сложно поддерживать, документировать и прочее |
||
8 май 19, 15:13 [21881182] Ответить | Цитировать Сообщить модератору |
zzzzzzzzzz Member Откуда: Сообщений: 356 |
SQL Server пофигу на все ваши ссд и видимость быстрой работы |
||
9 май 19, 01:24 [21881590] Ответить | Цитировать Сообщить модератору |
Mind Member Откуда: Лучший город на Земле Сообщений: 2322 |
|
||||
9 май 19, 08:55 [21881625] Ответить | Цитировать Сообщить модератору |
Sergey Syrovatchenko Member Откуда: Сообщений: 169 |
Выложил версию 1.0.0.34:![]() |
9 май 19, 09:27 [21881643] Ответить | Цитировать Сообщить модератору |
andy st Member Откуда: Сообщений: 806 |
Sergey Syrovatchenko, Встретил ошибку
Для sys.dm_db_index_physical_stats срабатывает исключение
|
||||
13 май 19, 07:30 [21882966] Ответить | Цитировать Сообщить модератору |
Sergey Syrovatchenko Member Откуда: Сообщений: 169 |
andy st, а можно узнать версию SQL Server и compatibility level. Как я понял это 2008R2? |
13 май 19, 09:05 [21883004] Ответить | Цитировать Сообщить модератору |
andy st Member Откуда: Сообщений: 806 |
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] Ответить | Цитировать Сообщить модератору |
Sergey Syrovatchenko Member Откуда: Сообщений: 169 |
Выложил версию 1.0.0.35:![]() |
13 май 19, 11:13 [21883129] Ответить | Цитировать Сообщить модератору |
komrad Member Откуда: Сообщений: 5496 |
Sergey Syrovatchenko, а DATA_COMPRESSION поддерживается? |
13 май 19, 11:44 [21883176] Ответить | Цитировать Сообщить модератору |
Sergey Syrovatchenko Member Откуда: Сообщений: 169 |
Да. Есть возможность вручную задавать компрессию для индекса, менять ROW -> PAGE, PAGE -> ROW, убирать вовсе и тд. Если это колумнстор, то там есть возможность его переводить в архивную колумнстор группу для большего уровня сжатия. |
||
13 май 19, 11:51 [21883185] Ответить | Цитировать Сообщить модератору |
zzzzzzzzzz Member Откуда: Сообщений: 356 |
какой именно пруф? подумайте/погуглите/сравните конкретно с вашим случем... Если индех фрагментировался по какой-либо причине оптимизатор запросов перестанет его использовать и будет вам фуллскан. Может ССД и вытянет какое-то время несмотря на увеличенный и никому не нужный обмен с диском. А так база медленно но уверенно превратится в помойку 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] Ответить | Цитировать Сообщить модератору |
zzzzzzzzzz Member Откуда: Сообщений: 356 |
+ https://sqlperformance.com/2014/11/io-subsystem/knee-jerk-performance-tuning-just-add-ssd |
13 май 19, 18:33 [21883674] Ответить | Цитировать Сообщить модератору |
Mind Member Откуда: Лучший город на Земле Сообщений: 2322 |
Для начала, на внешнюю фрагментацию оптимизатору пофигу, к тому же ему негде ее взять. Остается внутренняя или заполненность страниц. Если речь про поиск по индексу, то вообще побоку что там с заполненностью страниц. Ну будет индекс на 30% больше и что? Как это на стоимость то повлияет? Количество логических чтений то не поменяется. Если речь про скан индекса vs скан таблицы, то расскажите мне какая заполненность страниц должна быть у индекса чтобы он стал больше чем таблица? Даже в самом вырожденном случае если таблица очень узкая из 2х колонок, чтобы индекс стал больше таблицы заполненность должна упасть ниже 50% что по факту просто невозможно! |
||||
14 май 19, 09:34 [21884060] Ответить | Цитировать Сообщить модератору |
Mind Member Откуда: Лучший город на Земле Сообщений: 2322 |
![]() Вторая ссылка, для вырожденного примера с равнораспределенным ключем и сканом таблицы: " 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] Ответить | Цитировать Сообщить модератору |
Александр Гладченко Member Откуда: Сообщений: 10765 Блог |
Добавьте ещё большой и красный баннер перед началом работы, что если данные на SSD ни в коем случае не делать REBUILD. Это совершенно напрасная операция (ввиду алгоритмов рассеяния блоков в логике работы SSD), которая приводит только к преждевременному исчерпанию ресурса диска. После ребилда нужно делать обновление статистики. Сообщение было отредактировано: 14 май 19, 12:10 |
14 май 19, 12:08 [21884249] Ответить | Цитировать Сообщить модератору |
Sergey Syrovatchenko Member Откуда: Сообщений: 169 |
Это вы в контексте того, что после ребилда делается FULL обновление статистики, а нужно делать какое-то другое? |
||
14 май 19, 12:52 [21884310] Ответить | Цитировать Сообщить модератору |
Александр Гладченко Member Откуда: Сообщений: 10765 Блог |
Sergey Syrovatchenko, Я про это: https://blogs.msdn.microsoft.com/psssql/2015/03/06/does-rebuild-index-update-statistics/ |
14 май 19, 13:33 [21884365] Ответить | Цитировать Сообщить модератору |
Sergey Syrovatchenko Member Откуда: Сообщений: 169 |
Александр Гладченко, то есть необходимо предусмотреть ситуацию при ребилде кластерного индекса насильно еще обновлять все user_created и auto-created статистику на таблице? Опционально это сделать не проблема, но как быть тогда с секционированными таблицами? |
14 май 19, 13:38 [21884372] Ответить | Цитировать Сообщить модератору |
Александр Гладченко Member Откуда: Сообщений: 10765 Блог |
Sergey Syrovatchenko, Дефрагментация на листовом уровне сломает все статистики, это будет особенно заметно на больших таблицах, где даже "новомодное" автообновление статистики не спасает от проблем с правильной статистикой для оптимизатора. В таких случаях часто помогает только обновление некластерных индексов с полным сканированием. Секционирование вносит ещё большее разнообразие вариантов дефрагментации - будет интересно понаблюдать, как Вы с этим справитесь :) ...есть ведь ещё и фильтрованные индексы, и много чего ещё есть.... |
14 май 19, 14:21 [21884449] Ответить | Цитировать Сообщить модератору |
Sergey Syrovatchenko Member Откуда: Сообщений: 169 |
Александр Гладченко, исходя из такого кейса предусмотреть возможность вместе с кластерным индексом ребилдить и все некластерные? Если я вас правильно понял. Текущий функционал по обновлению статистики работает только для таблиц где нет секционирования. Думаю в дальшейнем можно будет заморочится и сделать все по феншую, но тут вопрос стоит ли? Насколько часто нужно по секциям обновлять статистику? У меня в практике такое редко было. Чаще всего, фильтрованную статистику только отдельно обновлял построенное по выбранным секциям. |
14 май 19, 14:28 [21884456] Ответить | Цитировать Сообщить модератору |
Александр Гладченко Member Откуда: Сообщений: 10765 Блог |
Я не призывал ребилдить все некластерные индексы. Речь шла о статистиках. Секционирование зависит от функции секционирования, а она может быть далеко не тривиальной и "работать" может не одна секция... В природе ещё встречаются всякие распределённые секционированные представления, что будет со статистикой на их индексах, если отребилдить кластерный, который в основе представления - задайтесь таким вопросом... Вопрос в том, кто будет отвечать на вопросы пользователей, когда ребилд индекса, выполненный с помощью Вашей утилиты, приведёт к простою промышленной базы? ...проконсультируйтесь на эту тему с хорошим юристом в этой области... |
||
14 май 19, 14:39 [21884480] Ответить | Цитировать Сообщить модератору |
zzzzzzzzzz Member Откуда: Сообщений: 356 |
[quot Mind] >>Я не против обслуживания индексов как такового, я просто про то что в большинстве случаев ребилды всего подряд по бездумному правилу 5% - 30% не имеют особого смысла. Я с вами уже почти согласен :) Зависит от конкретного случая.
при выборе индекса опимизатор стотрит на статистику и количество страниц индекса которое вырастет при фрагментации (где-то было в ссылках выше). Само абсолютное значение фрагментации в %% не смотрит |
||
14 май 19, 14:53 [21884498] Ответить | Цитировать Сообщить модератору |
zzzzzzzzzz Member Откуда: Сообщений: 356 |
https://sqlperformance.com/2017/12/sql-indexes/impact-fragmentation-plans в комментариях |
||
14 май 19, 17:02 [21884620] Ответить | Цитировать Сообщить модератору |
Mind Member Откуда: Лучший город на Земле Сообщений: 2322 |
Короче, если у вас огромное хранилище данных и много сканов, то возможно стоит дефрагментировать, лучше во время загрузки данных в то хранилище :) Если у вас огромная, но правильно спроектированная OLTP база, и сканов нет, то смысл создавать лишнюю нагрузку без очевидного выигрыша, особенно если это 24/7 и нет больших технических окон? Если же есть сканы, тогда возможно лишняя нагрузка от сканов перевешивает ребилды, но тоже не факт. Как было написано в одной из статей, SSD может сгладить негативный эффект от фрагментированных индексов если дисковая не сильно нагружена. |
||||
14 май 19, 21:53 [21884807] Ответить | Цитировать Сообщить модератору |
Sergey Syrovatchenko Member Откуда: Сообщений: 169 |
Тут коллега интересную идею предложил. Прикрутить конструктор условий, т.е. есть грид в котором мы задаем народ из условий и выбираем действие для исправления этой ситуации. Была ли такая штука полезной? Может есть идеи как по удобнее реализовать. |
15 май 19, 17:02 [21885580] Ответить | Цитировать Сообщить модератору |
Ролг Хупин Member Откуда: Чебаркуль Сообщений: 3970 |
как говорят(ц) не тот народ попался в гриде ![]() |
||
16 май 19, 08:33 [21885850] Ответить | Цитировать Сообщить модератору |
Sergey Syrovatchenko Member Откуда: Сообщений: 169 |
Ролг Хупин, реально классно что на форуме нельзя править сообщения. Иногда такие перлы попадаются ))) Если же серьезно, то появилась идея сделать тул более функциональным и кастомизируемым. Планирую добавить контрол в котором можно задавать набор условий и действие которое нужно сделать над индексом, когда эти условия выполняются. В порядке определенного приоритета. И тут есть пара противоречий. Размер индекса (с ... по ... ) является обязательным параметром. Остальные условия можно кастомизировать. Нужно ли уровень фрагментации делать обязательным параметром для каждого условия? Примеры таких условий может кто-то предложить? Скажем когда выгоднее делать обновление статистики а не ребилд, потому что все очень сильно зависит от системы и нагрузки. |
16 май 19, 09:23 [21885890] Ответить | Цитировать Сообщить модератору |
Mind Member Откуда: Лучший город на Земле Сообщений: 2322 |
UnusedPagesCount = CASE WHEN ABS(a.ReservedPages - a.UsedPages) > 32 THEN a.ReservedPages - a.UsedPages ELSE 0 END Как у вас хитро количество неиспользуемых страниц превращается в неиспользуемое индексное пространство. ![]() Да мне как то по барабану сколько там пустых страниц в индексе, они то ну вообще никак не влияют ни на скорость выполнения запросов ни на количество используемой памяти. Дефрагментировать по этому признаку это все равно что ногти подстригать чтобы гимморой вылечить.
Вот скажем та же опция задавать fill factor вручную. Для 95% индексов самый лучший fill factor это дефолтный. Ребилдить все с fill factor = 80 это несусветная глупость. Для того чтобы настроить fill factor для каждого индекса индивидуально нужно потратить кучу времени. Есть ли смысл это делать? |
||||||||||||
16 май 19, 23:34 [21886700] Ответить | Цитировать Сообщить модератору |
Sergey Syrovatchenko Member Откуда: Сообщений: 169 |
Я вроде DevEx еще никому не впаривал :) У самого есть лицензия (правда старая). Тем более на библиотеки не распространяются ограничения если продукт был сделан на основе лицензии. Тем кому эти компоненты не нравятся можно прикрутить хоть WPF хоть что угодно другое. К слову это тоже в будующих планах - свои контролы сделать. |
||
17 май 19, 09:02 [21886840] Ответить | Цитировать Сообщить модератору |
Ролг Хупин Member Откуда: Чебаркуль Сообщений: 3970 |
От DevEx надо избавляться, тем более, что приложение мало контролов использует, грид, еще 2-3. Можно прикрутить, что-то простое и бесплатное. |
||||
17 май 19, 12:12 [21887105] Ответить | Цитировать Сообщить модератору |
Sergey Syrovatchenko Member Откуда: Сообщений: 169 |
Увы, тут вы правы. Не все вещи в DevEx хорошие. Возможно в будующем как коммандную строку сделаю, то на WPF переведу проект. |
||
17 май 19, 13:03 [21887176] Ответить | Цитировать Сообщить модератору |
Mind Member Откуда: Лучший город на Земле Сообщений: 2322 |
|
||||
17 май 19, 18:28 [21887550] Ответить | Цитировать Сообщить модератору |
TaPaK Member Откуда: Kiev Сообщений: 6801 |
Mind, Так и не понял чем плох devexpres... Немного используем telerik под win и web. Лицензия все позволяет |
17 май 19, 18:33 [21887555] Ответить | Цитировать Сообщить модератору |
Mind Member Откуда: Лучший город на Земле Сообщений: 2322 |
|
||
17 май 19, 19:13 [21887581] Ответить | Цитировать Сообщить модератору |
Sergey Syrovatchenko Member Откуда: Сообщений: 169 |
Mind, никаких лицензий не нужно. Я специально все нужные либы приложил, чтобы можно было скомпилить прогу. Сорри, я просто вначале не понял вашего вопроса относительно DevEx. |
17 май 19, 19:43 [21887591] Ответить | Цитировать Сообщить модератору |
Sergey Syrovatchenko Member Откуда: Сообщений: 169 |
Выложил версию 1.0.0.36:![]() Отдельно вопрос. Нужно ли показывать инфу о том какие индексы имеют статус NORECOMPUTE? |
19 май 19, 15:57 [21888228] Ответить | Цитировать Сообщить модератору |
ЕвгенийGEM Member Откуда: Сообщений: 94 |
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 |
22 май 19, 17:09 [21891022] Ответить | Цитировать Сообщить модератору |
ЕвгенийGEM Member Откуда: Сообщений: 94 |
Sergey Syrovatchenko, и еще хорошо бы аналогичное по анализу и оптимизации существующих статистик |
22 май 19, 17:09 [21891025] Ответить | Цитировать Сообщить модератору |
Sergey Syrovatchenko Member Откуда: Сообщений: 169 |
Запрос точно не мой :) У меня в коде базы получаются так: 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
Замечание важное. Погляжу как это затрагивает мою текущую логику
То есть обслуживать системные обьекты? Потому как пользовательские обьекты в системных базах обслуживать можно.
В ближайших планах что-то сделать в этом направлении. Есть идея показывать статистику просто как отдельную строку и фильтровать по степени устаревания и тому сколько изменений было на уровне индекса.
Увы это пока реализовать быстро не получится, но на перспективу учтем.
Можно точное сообщение об ошибке показать. У меня просто с таким проблем не было на 2017й студии. |
||||||||||||
22 май 19, 17:27 [21891052] Ответить | Цитировать Сообщить модератору |
ЕвгенийGEM Member Откуда: Сообщений: 94 |
Sergey Syrovatchenko, трассировка запускалась на изолированной среде, чтобы как раз исследовать все запросы от Вашей тулзы. Потому все запросы от Вашей тулзы) Лучше на Core переписать. А в будущем сделать платную ветвь в стиле сервер-клиент на ASP.NET Core, куда добавить мониторинг подобный Spotlight и даже лучше) Но вообще за тулзу больфуфий респект!) Предлагаю код ошибки и прочие детали в личке обсудить |
22 май 19, 21:43 [21891282] Ответить | Цитировать Сообщить модератору |
ЕвгенийGEM Member Откуда: Сообщений: 94 |
Sergey Syrovatchenko, еще вспомнил-лучше отсеивать отключенные индексы и те базы, которые недоступны на редактированине (как в целом БД, так и отдельный ее файл). Не помню было ли в коде этл учтено. И еще пока не разглядел-если индекс секционированный, то есть возможность выбирать какие секции и что с каждым делать и каким образом делать? |
22 май 19, 22:30 [21891312] Ответить | Цитировать Сообщить модератору |
ЕвгенийGEM Member Откуда: Сообщений: 94 |
Sergey Syrovatchenko, на счет фильтруемых индексов. Достаточно часто встречал, когда фильтруемый индекс непросто не используется оптимизатором, а даже через подсказки не может план построить и вылетает ошибка выполнения запроса. Аналогично и фидьтрация репликации слияния. Потому уже выработался инстинкт-никаких фильтруемых индексов и реплик. Надо-отдельная табдица или секции. А для сложной и устойчивой реплики обычно используют сторонние тулзы или при возможности свою пилят (если конечно AlwaysOn недоступен или его недосиаточно по каким-то условиям) |
22 май 19, 23:38 [21891360] Ответить | Цитировать Сообщить модератору |
ЕвгенийGEM Member Откуда: Сообщений: 94 |
SELECT DB_NAME() as DB, o.name AS ObjectName , i.name AS IndexName , i.index_id AS IndexID , dm_ius.user_seeks AS UserSeek , dm_ius.user_scans AS UserScans , dm_ius.user_lookups AS UserLookups , dm_ius.user_updates AS UserUpdates ,last_user_seek ,last_user_scan ,last_user_lookup , p.TableRows , 'DROP INDEX ' + QUOTENAME(i.name) + ' ON ' + QUOTENAME(s.name) + '.' + QUOTENAME(OBJECT_NAME(dm_ius.OBJECT_ID)) AS 'drop statement' FROM sys.dm_db_index_usage_stats dm_ius INNER JOIN sys.indexes i ON i.index_id = dm_ius.index_id AND dm_ius.OBJECT_ID = i.OBJECT_ID INNER JOIN sys.objects o ON dm_ius.OBJECT_ID = o.OBJECT_ID INNER JOIN sys.schemas s ON o.schema_id = s.schema_id INNER JOIN (SELECT SUM(p.rows) TableRows, p.index_id, p.OBJECT_ID FROM sys.partitions p GROUP BY p.index_id, p.OBJECT_ID) p ON p.index_id = dm_ius.index_id AND dm_ius.OBJECT_ID = p.OBJECT_ID WHERE OBJECTPROPERTY(dm_ius.OBJECT_ID,'IsUserTable') = 1 AND dm_ius.database_id = DB_ID() AND i.type_desc in('clustered', 'nonclustered') AND i.is_unique_constraint = 0 --AND (o.name='EmailMessageAttachments') ORDER BY (dm_ius.user_seeks + dm_ius.user_scans + dm_ius.user_lookups) ASC Т к представление dm_db_index_usage_stats среди прочего показывает и уровни индекса. Т е просто по данному представлению можно получить что один и тот же индекс используется и не используется, т к вывод был для разных уровней. Сам в свое время сильно ошибся, интерпретируя неверно показатели. Анализ статистики завтра скину |
22 май 19, 23:45 [21891366] Ответить | Цитировать Сообщить модератору |
Mind Member Откуда: Лучший город на Земле Сообщений: 2322 |
|
||
23 май 19, 03:03 [21891399] Ответить | Цитировать Сообщить модератору |
Mind Member Откуда: Лучший город на Земле Сообщений: 2322 |
|
||
23 май 19, 03:12 [21891400] Ответить | Цитировать Сообщить модератору |
andy st Member Откуда: Сообщений: 806 |
Sergey Syrovatchenko, а не было мысли второй закладкой прикрутить анализ по индексам на основе sys.dm_db_missing_index_group_stats и сотоварищей? |
23 май 19, 06:15 [21891411] Ответить | Цитировать Сообщить модератору |
Sergey Syrovatchenko Member Откуда: Сообщений: 169 |
Мысль была. Думаю сделать можно будет опционально:
Отключенные индексы в итоговую выборку и так не попадают из-за условий rows > 0 + предварительной фильтрации по размеру. У отключенного индекса размера нет как такового. Базы которые недоступны для редактирования я тоже игнорю еще на этапе выбора за счет проверки на права + state = 0
Все операции делаются в разрезе секции, поэтому можно для каждой секции задать свое действие. Увы не автоматически, а ручками.
Есть идея: Примерно как-то так это себе вижу. Получится правда монстр зато весьма функциональный. Пока не начал делать хотелось бы мнение комьюнити спросить. |
||||||||
23 май 19, 10:14 [21891569] Ответить | Цитировать Сообщить модератору |
ЕвгенийGEM Member Откуда: Сообщений: 94 |
Sergey Syrovatchenko, как и обещал-вот один из примеров обновления индексов:
Здесь лучше переписать на курсор, чем удалять каждый раз значение из временной таблицы, но мне было лень) Сообщение было отредактировано: 23 май 19, 12:47 |
|
23 май 19, 11:58 [21891729] Ответить | Цитировать Сообщить модератору |
Гавриленко Сергей Алексеевич Member Откуда: Moscow Сообщений: 37143 |
Сообщение было отредактировано: 23 май 19, 16:40 |
|
23 май 19, 16:39 [21892268] Ответить | Цитировать Сообщить модератору |
ЕвгенийGEM Member Откуда: Сообщений: 94 |
Гавриленко Сергей Алексеевич, по первому предложению полностью согласен. По второму может статью опубликую по багам скуля. P.S.: мне пофиг на чужое мнение, которое не сталкивалось с тем фактом, который я в свое время зарегистрировал |
23 май 19, 16:44 [21892283] Ответить | Цитировать Сообщить модератору |
komrad Member Откуда: Сообщений: 5496 |
не лучше https://www.sqlbook.com/advanced/sql-cursors-how-to-avoid-them/ |
||
23 май 19, 16:56 [21892296] Ответить | Цитировать Сообщить модератору |
Ролг Хупин Member Откуда: Чебаркуль Сообщений: 3970 |
"Баги скуля" - про собак ![]() |
||
23 май 19, 17:28 [21892334] Ответить | Цитировать Сообщить модератору |
ЕвгенийGEM Member Откуда: Сообщений: 94 |
komrad, в данной статье описывается блокировка на таблицу. Но если положить во временную и потом по ней курсором-это часто быстрее (по крайней мере подобное что ы привел сверху будет быстрее-проверял на других подобных запросах). |
23 май 19, 18:05 [21892373] Ответить | Цитировать Сообщить модератору |
ЕвгенийGEM Member Откуда: Сообщений: 94 |
komrad, прошу прощения-опучатался выше: вместо "по крайней мере подобное что ы привел сверху будет быстрее" надо "по крайней мере подобное что я привел сверху будет быстрее" |
23 май 19, 18:10 [21892374] Ответить | Цитировать Сообщить модератору |
Mind Member Откуда: Лучший город на Земле Сообщений: 2322 |
![]() |
||
24 май 19, 22:40 [21893559] Ответить | Цитировать Сообщить модератору |
ЕвгенийGEM Member Откуда: Сообщений: 94 |
еще предложение-для большей гибкости в использовании предлагаю обернуть в библиотеки, и вывести в команды PowerShell, как это сделано напр здесь: https://dbatools.io/commands/ |
30 май 19, 15:00 [21897741] Ответить | Цитировать Сообщить модератору |
Sergey Syrovatchenko Member Откуда: Сообщений: 169 |
Выложил версию 1.0.0.37: Реализована поддержка коммандной строки Можно ресайзить колонки Мелкие улучшения в GUI ![]() В ближайших планах заняться реализацией функционала по обслуживанию статистики и показывать missing indexes с возможностью их создавать. Еще есть идея добавить функционал по перемещению индекса в другую файловую группу при ребилде. Такое кому-то будет полезным? |
1 июн 19, 22:34 [21899625] Ответить | Цитировать Сообщить модератору |
Den_KP Member Откуда: Планета Земля, Евразийский материк Сообщений: 214 |
Sergey Syrovatchenko, Огромное спасибо за труды! Дело стоящее! Кратко пробежался по 4-м страницам, хотелось бы увидеть небольшой help в программе. Думаю на 2-х языках вполне достаточно. Поставил себе, буду пробовать вникать и ждать мануальчик) |
3 июн 19, 11:43 [21900248] Ответить | Цитировать Сообщить модератору |
Sergey Syrovatchenko Member Откуда: Сообщений: 169 |
Den_KP, спасибо за отзыв. Справки делать не планировал. Старался изначально, чтобы все было более-менее очевидным. Возможно в будующем добавлю. В планах статью написать на хабре/доу о том с каким трешом все делалось :) |
3 июн 19, 12:05 [21900283] Ответить | Цитировать Сообщить модератору |
Den_KP Member Откуда: Планета Земля, Евразийский материк Сообщений: 214 |
Ссылочку на хабр ждем))) Справка просто поможет донести до аудитории все труды и что с чем едят. Уже первый анализ провел, запланировал задачи по нескольким БД на ночь. Правда пока что Джоб по Ola методики запущу. Есть маленький вопрос, возможно я упустил в переписки. Каким образом происходит rebuild кучи? что он дает? |
3 июн 19, 14:20 [21900522] Ответить | Цитировать Сообщить модератору |
Sergey Syrovatchenko Member Откуда: Сообщений: 169 |
Как минимум он консолидирует свободное место. Плюс убирает всякие неприятные вещи вроде forwarded records: https://www.mssqltips.com/sqlservertip/2984/identify-and-correct-sql-server-forwarded-records/ https://www.brentozar.com/archive/2016/07/fix-forwarded-records/ |
||
3 июн 19, 15:11 [21900591] Ответить | Цитировать Сообщить модератору |
Mind Member Откуда: Лучший город на Земле Сообщений: 2322 |
|
||
3 июн 19, 22:35 [21900974] Ответить | Цитировать Сообщить модератору |
Den_KP Member Откуда: Планета Земля, Евразийский материк Сообщений: 214 |
При чем тут "не устраивает", смысл фразы в том что запускается не средствами Index Manager. |
4 июн 19, 05:43 [21901074] Ответить | Цитировать Сообщить модератору |
Den_KP Member Откуда: Планета Земля, Евразийский материк Сообщений: 214 |
Sergey Syrovatchenko, Спасибо за информацию! По результатам, ночного запуска, вижу улучшение по метрикам. Также за кучи отдельное спасибо, на одной коробочной базе нашел на данный момент 2 кучи, которые как оказалось очень сильно просили кластерный индекс. Выборка по одной таблицы всех значений занимает 1сек, вместо 2 минут 42 секунд ранее. Юзеры тоже заметили профит, правда Page Life Expentance сбросился, сейчас стал набирать. |
4 июн 19, 08:22 [21901130] Ответить | Цитировать Сообщить модератору |
Sergey Syrovatchenko Member Откуда: Сообщений: 169 |
Забавный кейс. У меня такой импакт был только на колумнсторе, когда все его rowgroup'ы были открыты из-за чрезмерной модификации. Может просто данные по таблице лежали на медленной области диска? То такая статистика роста перфоманса чуток настораживает :) |
||
4 июн 19, 08:25 [21901134] Ответить | Цитировать Сообщить модератору |
Den_KP Member Откуда: Планета Земля, Евразийский материк Сообщений: 214 |
Там поданный лун с массива, и диски так быстро бы не перетекли на быстрые. Правда я выборку делал просто всех полей, но в обоих случаях. 1-й исключая индекс, второй по умолчанию. |
4 июн 19, 09:09 [21901163] Ответить | Цитировать Сообщить модератору |
Ролг Хупин Member Откуда: Чебаркуль Сообщений: 3970 |
SQL - язык, и утилита работает только с SQL Server, лучше может назвать SQL Server Index manager |
||
4 июн 19, 11:00 [21901302] Ответить | Цитировать Сообщить модератору |
Den_KP Member Откуда: Планета Земля, Евразийский материк Сообщений: 214 |
Всеми руками вверх! Кстати хочу порекомендовать такую софтину SolarWinds DPA, там есть интересные реализации по индексам, так же очень интересно реализован просчет wait time. Может оттуда пригоядтся практики для реализации Вашей программы. |
4 июн 19, 12:04 [21901391] Ответить | Цитировать Сообщить модератору |
Sergey Syrovatchenko Member Откуда: Сообщений: 169 |
Это больше как монитор, в прогу не хотелось бы пихать все что только можно. В планах реально добавить обслуживание статистики и создание индексов по данным из missing indexes.
Замечение корректное, название по правде еще будет корректироваться. |
||||
4 июн 19, 12:50 [21901454] Ответить | Цитировать Сообщить модератору |
ЕвгенийGEM Member Откуда: Сообщений: 94 |
Mind, потому что все вроде есть готовое и шаблонное, но на деле к конкретной ситуации не самым лучшим образом подходит. Например, из аналитики как минимум у каждой системы будет свои определения: 1) странные запросы, которые через какое-то время станут проблемой для других 2) странная активность в журнале событий скуля, которые говорят о наступлении скорых проблем Аналогично и по индексам и как их оптимизировать и как определять что их надо оптимизировать, и какой планируемый выигрыш от этого+анализ постфактум на сколько стало хорошо. Аналогично и по статистикам. И не стоит забывать что в одной системе хорошо, для другой будет смертью. А готовое и шаблонное одинаково как хорошо, так и плохо для всех или большинства случаев. Сам Ola пользуюсь+другими решениями, но обычно на небольших системах или пока не сделал свою более оптимальную для данной системы. |
4 июн 19, 17:57 [21901786] Ответить | Цитировать Сообщить модератору |
northern Member Откуда: Сообщений: 70 |
Как раз сейчас разбиваем крупные таблицы на секции. MS Axapta, 24/7, бд уже больше 4ТБ, одна реплика в асинхронном режиме. По монитору активности в пик около 70 тыс пакетов/сек. Почти все таблицы имеют кластерный индекс Разбиваем большие таблицы по одной таблице ночью, к утру зеркало успевает догнать примари ноду. Действительно, ломаются планы. Но достаточно сделать ребилд после секционирования и планы становятся нормальными. Катастрофы не случилось. Юристы не понабились )) |
||
5 июн 19, 06:38 [21902063] Ответить | Цитировать Сообщить модератору |
Sergey Syrovatchenko Member Откуда: Сообщений: 169 |
Выложил версию 1.0.0.38: Добавил возможность удалять неиспользуемые индексы Добавил новые столбцы, чтобы можно видеть по каким полям индекс построен Мелкие улучшения в GUI и багфикс Небольшой пример из жизни как можно новым функционалом пользоваться: ![]() |
8 июн 19, 15:04 [21905147] Ответить | Цитировать Сообщить модератору |
komrad Member Откуда: Сообщений: 5496 |
Sergey Syrovatchenko, неиспользуемые индексы : это с момента последнего рестарта инстанса? не обратил внимания: подсвечиваются ли индексы-дубликаты? |
8 июн 19, 22:33 [21905260] Ответить | Цитировать Сообщить модератору |
Ролг Хупин Member Откуда: Чебаркуль Сообщений: 3970 |
да, как вы определяете неиспользуемые? |
||
10 июн 19, 09:11 [21905668] Ответить | Цитировать Сообщить модератору |
Sergey Syrovatchenko Member Откуда: Сообщений: 169 |
Да. Информация традиционно из sys.dm_db_index_usage_stats получается.
Нет, но могу такую функционально добавить в будующих билдах. Нужно ли это просто пока хз. |
||||
10 июн 19, 09:12 [21905670] Ответить | Цитировать Сообщить модератору |
Ролг Хупин Member Откуда: Чебаркуль Сообщений: 3970 |
кстати, 1 может быть опасно, 2 да, бывает полезно |
||||||
10 июн 19, 09:22 [21905682] Ответить | Цитировать Сообщить модератору |
Sergey Syrovatchenko Member Откуда: Сообщений: 169 |
Спорить конечно же не буду. Там приколов с этим системным представлением много (когда база AUTO_CLOSE, когда индексы пересоздаются и тд), но тем не менее :) Эта инфа для наглядности показывается, а там пользователь уже сам решает. |
||
10 июн 19, 09:32 [21905689] Ответить | Цитировать Сообщить модератору |
andy st Member Откуда: Сообщений: 806 |
А можно попросить первую картинку из статьи на хабре поставить в качестве заставки к программе. |
18 июн 19, 10:54 [21910382] Ответить | Цитировать Сообщить модератору |
Sergey Syrovatchenko Member Откуда: Сообщений: 169 |
Сегодня не пятница, но накинуть хайпа необходимо :) Для всех кому интересно выложил на Хабре трушную историю о том как делал туловину свою и почему. https://habr.com/en/post/455339/ Технический пост о том как все устроено тоже скоро будет. |
18 июн 19, 10:56 [21910387] Ответить | Цитировать Сообщить модератору |
Sergey Syrovatchenko Member Откуда: Сообщений: 169 |
Я подумаю ))) Главное чтобы народ пользовался тулом ![]() |
||
18 июн 19, 10:59 [21910391] Ответить | Цитировать Сообщить модератору |
Sergey Syrovatchenko Member Откуда: Сообщений: 169 |
Выложил версию 1.0.0.39: Добавил возможность создавать индексы на основе информации из missing index Мелкие улучшения в GUI Новый функционал на небольшом примере: ![]() Выложил перевод предыдущей статьи вдруг кому-то будет интересно: https://habr.com/en/post/457206/ Планирую порефакторить приложение и прикрутить поддержку обслуживания статистики. Хочется узнать мнение. Может стоит отдельную приложуху сделать для просмотра и обслуживания статистики? Или прилепить в текущем приложении все что можно прилепить? И очень хочется получить фитбек от всех желающих в плане... что еще в прогу добавить... что удобно / неудобно... баги / фичи и тд. Заранее спасибо. |
23 июн 19, 10:53 [21913533] Ответить | Цитировать Сообщить модератору |
andy st Member Откуда: Сообщений: 806 |
Sergey Syrovatchenko, Вариант сделать для missing index отдельную закладку с отдельным адекватным набором столбиков не рассматривался? По двойному клику на строке - детализация по индексу. там же опция по оценке изменения типа сжатия... |
24 июн 19, 13:26 [21914014] Ответить | Цитировать Сообщить модератору |
komrad Member Откуда: Сообщений: 5496 |
это дельная мысль а то на лицо перенасыщение данными "усложнять - просто, упрощать - сложно" (с) Мейер |
||
24 июн 19, 13:34 [21914036] Ответить | Цитировать Сообщить модератору |
Sergey Syrovatchenko Member Откуда: Сообщений: 169 |
Честно так и хотел делать, но в коде завязка на основной грид и весь UI на нем основывается. Возможно в будующем разобью на закладки.
В планах сделать. У каждой строки есть дриллдаун в котором показывается статистика по индексу в виде графика и таблицы + различная инфа, вроде сжатия, всякой интернал информации и тд. К слову если есть какие-то хотелки в плане доп. информации, которую хотелось бы в деталях видеть - напишите пжл. Еще была идея показывать на графике распределение статистики и то что по факту в таблице.
В плане? :) Столбцы каждый пользователь под себя может настроить. Да согласен что инфы много, но старался так чтобы каждый для себя можно увидеть все что только возможно. Если есть что-то явно лишнее на UI смело говорите, постараюсь исправить. |
||||||
25 июн 19, 15:32 [21914991] Ответить | Цитировать Сообщить модератору |
komrad Member Откуда: Сообщений: 5496 |
тут дело в позиционировании приложения если оно для опытных дба, то и "инженерный" вид не помеха если для облегчения жизни регулярных админов, то надо от простого к сложному, как в SQLCoPilot, например - https://sqlpadre.wordpress.com/2014/02/06/sql-copilota-software-review/ вышесказанное из моего личного опыта написания "аналога" диагностической тулзы типа solarwinds и подобных коллега ДБА посмотрев на интерфейс, сказал что слишком сложно другой же сказал - норм! такие дела |
||||
25 июн 19, 16:44 [21915043] Ответить | Цитировать Сообщить модератору |
Sergey Syrovatchenko Member Откуда: Сообщений: 169 |
Изначально планировалось для новичков, но по мере добавления новых фич получилось, как мне хочется надеяться, что-то универсальное. Сразу хочется пошутить словами коллеги "универсальные вещи работают универсально плохо" ![]() С другой стороны для новичков настройки по дефолту относительно приемлимые. Для опытных коллег есть мелкие фичи - вроде работы с компрессией и колумнсторами. Постараюсь скоро добавить возможность обслуживания статистики хотя бы в черновом виде, а там будет видно что народ скажет за функционал. Если что буду очень рад фитбекам :) |
||
25 июн 19, 20:45 [21915168] Ответить | Цитировать Сообщить модератору |
andy st Member Откуда: Сообщений: 806 |
Sergey Syrovatchenko, по индексам можно еще показывать используемые файловые группы и файлы + свободное место на дисках с этими файлами. В настройки - критический % свободного места на дисках и подсветка красненьким, что мол близится "ойвсё!" Если считать, что управление дисковым пространством относится к обслуживанию индексов, то можно сохранять статистику свободному месту и, как вариант, на основе пары-тройки срезов, между которыми больше суток, считать прогноз по заполнению диска. Исторические данные по самим индексам тоже могут пригодиться для каких-нибудь веселых картинок. |
26 июн 19, 06:33 [21915260] Ответить | Цитировать Сообщить модератору |
Yuri Abele Member Откуда: Латвия> Литва > Тольятти > Wiesbaden > Karlsruhe Сообщений: 1661 |
Я бы еще сильно рекомендовал в генерящихся T-SQL скриптах поменять всеPRINT '.....'на RAISERROR(N'.....', 0,1) WITH NOWAIT; Дело в том, что PRINT он буферезируется, и, частенько, в больших и нагруженных скриптах, сообщения копятся, копятся в буфере а потом, только, разом выдаются. Т.е. мы не видим процесс, а, только, по окончанию, видим как оно отработало. |
26 июн 19, 10:58 [21915401] Ответить | Цитировать Сообщить модератору |
Sergey Syrovatchenko Member Откуда: Сообщений: 169 |
В следующем билде эта правка будет.
Идея принята. Подумаю как ее можно будет оформить в рамках приложения + было бы полезно видеть на этапе выбора баз данных свободное место в файлах данных и логе? (если да, то выгребание этой инфы чуток замедлит основной запрос) |
||||
26 июн 19, 12:14 [21915459] Ответить | Цитировать Сообщить модератору |
Yuri Abele Member Откуда: Латвия> Литва > Тольятти > Wiesbaden > Karlsruhe Сообщений: 1661 |
Если использовать ту логику (перехватывается через Profiler), которую SSMS в отчете "Disk usage by Table" использует, то задержка будет, практически, не заметна. |
||
26 июн 19, 14:20 [21915587] Ответить | Цитировать Сообщить модератору |
Sergey Syrovatchenko Member Откуда: Сообщений: 169 |
Если говорить за этот отчет, то там все через sys.allocation_units данные выгребаются, но вопрос стоит в том чтобы подсчитать занимаемое место по всем базам одним запросом. А это делать прийдется итерационно (других способов увы не знаю) |
||
26 июн 19, 14:33 [21915605] Ответить | Цитировать Сообщить модератору |
Sergey Syrovatchenko Member Откуда: Сообщений: 169 |
Имел ввиду такого рода код:IF OBJECT_ID('tempdb.dbo.#space') IS NOT NULL DROP TABLE #space CREATE TABLE #space ( database_id INT PRIMARY KEY , data_used_size DECIMAL(18,2) , log_used_size DECIMAL(18,2) ) DECLARE @SQL NVARCHAR(MAX) SELECT @SQL = STUFF(( SELECT ' USE [' + d.name + '] INSERT INTO #space (database_id, data_used_size, log_used_size) SELECT DB_ID() , SUM(CASE WHEN [type] = 0 THEN space_used END) , SUM(CASE WHEN [type] = 1 THEN space_used END) FROM ( SELECT s.[type], space_used = SUM(FILEPROPERTY(s.name, ''SpaceUsed'') * 8. / 1024) FROM sys.database_files s GROUP BY s.[type] ) t;' FROM sys.databases d WHERE d.[state] = 0 FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)'), 1, 2, '') EXEC sys.sp_executesql @SQL SELECT d.database_id , d.name , d.state_desc , d.recovery_model_desc , t.total_size , t.data_size , s.data_used_size , t.log_size , s.log_used_size FROM ( SELECT database_id , log_size = CAST(SUM(CASE WHEN [type] = 1 THEN size END) * 8. / 1024 AS DECIMAL(18,2)) , data_size = CAST(SUM(CASE WHEN [type] = 0 THEN size END) * 8. / 1024 AS DECIMAL(18,2)) , total_size = CAST(SUM(size) * 8. / 1024 AS DECIMAL(18,2)) FROM sys.master_files GROUP BY database_id ) t JOIN sys.databases d ON d.database_id = t.database_id LEFT JOIN #space s ON d.database_id = s.database_id ORDER BY t.total_size DESC |
26 июн 19, 14:45 [21915615] Ответить | Цитировать Сообщить модератору |
komrad Member Откуда: Сообщений: 5496 |
посмотрите в сторону sys.dm_db_file_space_usage |
||
26 июн 19, 15:29 [21915637] Ответить | Цитировать Сообщить модератору |
Sergey Syrovatchenko Member Откуда: Сообщений: 169 |
Этот вариант тоже рассматривал. Табличная функция выбирает данные в разрезе текущей базы. |
||
26 июн 19, 15:50 [21915656] Ответить | Цитировать Сообщить модератору |
komrad Member Откуда: Сообщений: 5496 |
да, промашка, проверил как у себя реализовано - подход такой же, через use [db], но только в цикле и без varchar(max):
|
|||||
26 июн 19, 17:15 [21915716] Ответить | Цитировать Сообщить модератору |
andy st Member Откуда: Сообщений: 806 |
А как же веяния в разработке "современных" приложений - долго не запускаться, сразу чтонить показать, остальное показать "как-нибудь" и в фоне догрузить? Так и тут: старый запрос по бд, показ таблички с всеми столбиками, включая свободное место с надписью "получение данных". И фоновым потоком уже читать детализацию по базам и подменять "получение.." на циферки. Жаждет человек увидеть данные по свободному месту - дождется, не актуально - сразу пойдет дальше. |
||
27 июн 19, 06:20 [21915895] Ответить | Цитировать Сообщить модератору |
Sergey Syrovatchenko Member Откуда: Сообщений: 169 |
Выложил версию 1.0.0.40:![]() Есть подозрение что расширенный запрос по получению списка баз может тормозить. У кого есть возможность проверьте плиз. Особенно если у вас есть много баз в AUTO_CLOSE. |
29 июн 19, 13:44 [21917467] Ответить | Цитировать Сообщить модератору |
Sergey Syrovatchenko Member Откуда: Сообщений: 169 |
Выложил версию 1.0.0.41. Чуток поправил GUI. |
29 июн 19, 15:37 [21917489] Ответить | Цитировать Сообщить модератору |
Yuri Abele Member Откуда: Латвия> Литва > Тольятти > Wiesbaden > Karlsruhe Сообщений: 1661 |
Здорово! Спасибо! |
1 июл 19, 16:34 [21918332] Ответить | Цитировать Сообщить модератору |
andy st Member Откуда: Сообщений: 806 |
Sergey Syrovatchenko, А можно еще показать свободное место на диске расположения файлов базы и логов? Правда, придётся переделывать табличку, чтобы файлы и файловые группы прикрутить. Ну и печалит невозможность сортировать по полю "selection". Типа сначала выбранные, потом остальные. Как по базам, так и по индексам. фишка: create index по missing опцию online=on игнорирует |
2 июл 19, 07:16 [21918668] Ответить | Цитировать Сообщить модератору |
Mind Member Откуда: Лучший город на Земле Сообщений: 2322 |
|
||
2 июл 19, 22:37 [21919499] Ответить | Цитировать Сообщить модератору |
komrad Member Откуда: Сообщений: 5496 |
да, к сожалению, последний раз он откликался в октябре 2018 https://web.archive.org/web/2018*/www.sqlcopilot.com странно, что у них произошло такого, чтобы сайт забросить |
||||
3 июл 19, 01:20 [21919536] Ответить | Цитировать Сообщить модератору |
uaggster Member Откуда: Сообщений: 952 |
Сергей, если б в этом случае она показывала "почти синонимы", т.е. индексы, похожие на missing index, но отличающиеся includ'ом, или дополнительным "вторичным" полем в самом индексе - цены б ей не было. Вообще, поиск синонимов и почти синонимов в индексах - был бы очень нужной штукой. |
||
8 июл 19, 11:44 [21922544] Ответить | Цитировать Сообщить модератору |
Sergey Syrovatchenko Member Откуда: Сообщений: 169 |
Пока не планирую такое добавлять, потому как тяжело понять как этим пользоваться. Если можете нарисовать примерный мокап с предлагаемым функционалом, то буду благодарен.
Пробовал исправить, увы не получилось.
Сделано. В следующем билде будет. |
||||||
8 июл 19, 15:42 [21922812] Ответить | Цитировать Сообщить модератору |
Sergey Syrovatchenko Member Откуда: Сообщений: 169 |
То есть хотелось бы видеть в общем списки дубликаты индексов? Если индексы по полям идентичны (порядок может различаться), то такое могу реализовать подстветкой. |
||
8 июл 19, 15:45 [21922818] Ответить | Цитировать Сообщить модератору |
Mind Member Откуда: Лучший город на Земле Сообщений: 2322 |
А что значит индексы отличаются дополнительным вторичным полем и что вам собственно это даст? Огласите все критерии похожести. |
||||
8 июл 19, 23:03 [21923113] Ответить | Цитировать Сообщить модератору |
uaggster Member Откуда: Сообщений: 952 |
Хотелось бы видеть ситуации типа такой: 1. Полные синонимы (т.е. абсолютно идентичные индексы, дубликаты). 2. Синонимы, отличающиеся списком INCLUDE: CREATE UNIQUE NONCLUSTERED INDEX [ix_I1] ON [dbo].[SCHET] ( [ID_SCHET] ASC ) INCLUDE ( [CODE_O], [YEAR], [MONTH], [NSCHET], [DSCHET] ); CREATE NONCLUSTERED INDEX [ix_I2] ON [dbo].[SCHET] ( [ID_SCHET] ASC ); CREATE UNIQUE NONCLUSTERED INDEX [ix_I4] ON [dbo].[SCHET] ( [ID_SCHET] ASC ) INCLUDE ( [CODE_O], [DATE_CONTRACT] ); 3. Частичные синонимы: CREATE UNIQUE NONCLUSTERED INDEX [ix_I11] ON [dbo].[SCHET] ( [ID_SCHET] ASC, [CODE_O] ASC ) INCLUDE ( [YEAR], [MONTH], [NSCHET], [DSCHET] ); CREATE NONCLUSTERED INDEX [ix_I12] ON [dbo].[SCHET] ( [ID_SCHET] ASC ); CREATE UNIQUE NONCLUSTERED INDEX [ix_I13] ON [dbo].[SCHET] ( [ID_SCHET] ASC ) INCLUDE ( [CODE_O], [DATE_CONTRACT] ); Эти 3 индекса могут быть заменены одним, без ущерба для производительности: CREATE UNIQUE NONCLUSTERED INDEX [ix_I21] ON [dbo].[SCHET] ( [ID_SCHET] ASC, [CODE_O] ASC ) INCLUDE ( [YEAR], [MONTH], [NSCHET], [DSCHET], [DATE_CONTRACT] ); 4. Ситуации, когда индексы, включая include, содержат одни и те же поля. Я понимаю, что индексы: CREATE UNIQUE NONCLUSTERED INDEX [ix_I1] ON [dbo].[SCHET] ( [ID_SCHET] ASC, [CODE_O] ASC ) INCLUDE ( [YEAR], [MONTH], [NSCHET], [DSCHET] ) И: CREATE UNIQUE NONCLUSTERED INDEX [ix_I1] ON [dbo].[SCHET] ( [CODE_O] ASC, [ID_SCHET] ASC ) INCLUDE ( [YEAR], [MONTH], [NSCHET], [DSCHET] ) - существенно неэквивалентны в общем случае. Но об их существовании - мне бы хотелось знать. Потому что в частном конкретном случае - они могут оказаться еще как эквивалентны. Нечто подобное умеет sp_Blitz, но "настоящая" утилита - была бы полезной. |
||||
9 июл 19, 09:42 [21923221] Ответить | Цитировать Сообщить модератору |
Sergey Syrovatchenko Member Откуда: Сообщений: 169 |
Такое сделать можно. Я даже за. Какого типа разукрашки хотели бы видеть в каждом из описанных случаев? Если развивать тему, то можно выделять индексы которые не используются вообще (при условии что другие индексы в рамках таблицы используются). Главное тут понимать как показывать о проблеме. Думаю можно в имени индекса показывать иконку восклицания + тултип. |
||
9 июл 19, 11:31 [21923289] Ответить | Цитировать Сообщить модератору |
uaggster Member Откуда: Сообщений: 952 |
Разумеется, 1 ситуация - это красный уровень, 2 - оранжевый, 3 - желтый, а четвертая - не знаю, серый какой-нибудь. И парно (эээ... N-но) подсвечиваться, при наведении или выделении. И какой-нибудь одновременный просмотр определения, с подсветкой различий. Сам рефакторинг, и тем паче - автоматический рефакторинг, конечно, не нужен. Только обнаружение. Я, прошу прощения, это, конечно, возможно, не тема данной утилиты, просто наболело. У меня больше полусотни разных баз на куче серверов. Ситуация когда "внезапно" выясняется, что база вдруг раздулась неприлично, или быстродействие на каких либо заливках - упало - чуть ли не ежедневно проявляется. Новый мальчик (девочка) у разработчиков -> новый отчет -> куча новых индексов. Такая обычная цепочка. Я понимаю, что такие проблемы решаются чисто административно, в смысле "бумажно-административно", методом расстреляния нерадивых, но, к сожалению, не могу довести эту прогрессивную методику до промышленного внедрения. Разработчики очень возражают. Поэтому какой-нибудь дашборд, который индицировал бы ситуацию "вот тут новое говно, неотличимое от старого" - очень нужно. По крайней мере, чтоб я мог отдать его молодым обезьянкам, чтобы скинуть эту проблему со своего старого обезьяньего хвоста. Идея с "совсем не используемыми индексами" - она, конечно, замечательна, но нужно тогда, чтобы приложение куда-то засасывало статистику использования индексов, и хранило между перезапусками сервера. Ну и типа порог срабатывания: "оповещать после квартала неиспользования" (настраиваемо). Я прощу прощения за некоторую эмоциональность. Просто как в том анекдоте: "...И прошу прощения за неровный почерк, потому что даже прямо сейчас..." |
9 июл 19, 13:17 [21923389] Ответить | Цитировать Сообщить модератору |
Sergey Syrovatchenko Member Откуда: Сообщений: 169 |
uaggster, сделаем :) Мне идея понравилась. Как быстро получится пока гарантировать не смогу, но будет. Сейчас новым тулом начал заниматься, который откладывал более двух лет. |
11 июл 19, 09:43 [21924553] Ответить | Цитировать Сообщить модератору |
Sergey Syrovatchenko Member Откуда: Сообщений: 169 |
Могу лишь предложить посмотреть на бесплатный аналог от RedGate: https://www.red-gate.com/products/dlm/dlm-dashboard/ |
||
11 июл 19, 09:45 [21924561] Ответить | Цитировать Сообщить модератору |
Sergey Syrovatchenko Member Откуда: Сообщений: 169 |
Выложил версию 1.0.0.42:![]()
Исправлено
Планирую на следующий билд |
||||
17 июл 19, 13:28 [21928518] Ответить | Цитировать Сообщить модератору |
архивариус Member Откуда: Сообщений: 159 |
Спасибо за утилиту. Побуду тестером: 1. Два таймаута на 2 табличках в 2 базах из 20 баз идентичных (разные типы компрессий, и размер) при анализе (сервер не шустрый, может из за него): Execution Timeout Expired. The timeout period elapsed prior to completion of the operation or the server is not responding. Ничего примечательного в этих таблицах кроме 5 и 6 млрд. row, точно такая же табличка в другой базе, но 1,7 млрд. row без таймаута. Размер небольшой, меньше 10 GB. Эти три базы CSA (ColumnStoreArchive clustered). 2. [ 15:54:28.514 ] Elapsed time: 00:00:00:443. Pre-descibe: 0. Post-describe: 2 наверное r пропущено 3. Select Databases не настраивается/изменяется размер окна, занимает половину высоты окошка 1920х1080. imho, либо resize возможность хотелось бы, либо не половину, а всю высоту окна занимать? |
17 июл 19, 16:26 [21928747] Ответить | Цитировать Сообщить модератору |
архивариус Member Откуда: Сообщений: 159 |
вопрос снимается, увидел настройку таймаута. |
||
17 июл 19, 17:23 [21928805] Ответить | Цитировать Сообщить модератору |
Sergey Syrovatchenko Member Откуда: Сообщений: 169 |
Выложил версию 1.0.0.43:
В процессе.
Что мог исправил. Спасибо за отзыв. |
||||
17 июл 19, 20:03 [21928889] Ответить | Цитировать Сообщить модератору |
Sergey Syrovatchenko Member Откуда: Сообщений: 169 |
Выложил версию 1.0.0.44:![]()
Чуток решил упростить, но надеюсь будет норм по юзабельности. Там еще пара багов осталась в визуализации так что сорри. Спешил. |
||
19 июл 19, 15:31 [21930372] Ответить | Цитировать Сообщить модератору |
Sergey Syrovatchenko Member Откуда: Сообщений: 169 |
Выложил версию 1.0.0.45: |
19 июл 19, 16:54 [21930501] Ответить | Цитировать Сообщить модератору |
Sergey Syrovatchenko Member Откуда: Сообщений: 169 |
Выложил версию 1.0.0.46: |
28 июл 19, 20:09 [21936330] Ответить | Цитировать Сообщить модератору |
ЕвгенийGEM Member Откуда: Сообщений: 94 |
Sergey Syrovatchenko, провел независимый обзор тулзы: https://habr.com/ru/post/461277/ |
31 июл 19, 12:17 [21938736] Ответить | Цитировать Сообщить модератору |
Sergey Syrovatchenko Member Откуда: Сообщений: 169 |
Выложил версию 1.0.0.47:![]() Очень буду рад фитбекам. Потому как в прошлом билде накосячил со STATISTICS_NORECOMPUTE и никто даже не сказал :) Не стесняйтесь конструктивно выражать свое фи. |
3 авг 19, 10:15 [21941098] Ответить | Цитировать Сообщить модератору |
eddie Member Откуда: пенза Сообщений: 275 |
1. мне кажется нелогичным, что фильтрация происходит на моменте сканирования по фрагментации и размеру индексов. это, очевидно, из-за того, что во главу угла ставится фрагментация, но статистика тоже важна/интересна; 2. reorganize - обязательная опция, зачем? (нельзя поставить: индексы, фрагментированные на 30%+ ребилдим, остальные не трогаем); 3. нельзя выделить несколько строчек (чтобы проставить всем один Fix, или поставить/снять галочки). |
5 авг 19, 01:29 [21941763] Ответить | Цитировать Сообщить модератору |
Sergey Syrovatchenko Member Откуда: Сообщений: 169 |
Это было сделано для перфоманса, чтобы не захватывать сильно большие и сильно маленькие индексы.
Недавно начал новый функционал делать где можно отдельно от индексов обслуживать статистику. Но пока времени свободного нет нормально долелать. Как будет готово я выложу новый билд.
Здесь можно поступить проще. Получаете список индексов потом фильтруете по колонке Fix. Выбираете все строки и это как раз тот кейс о котором вы говорите.
Мысль хорошая, но пока as desing. Есть много ограничений в DevExpress. Первоначально я так и хотел сделать. |
||||||||
5 авг 19, 09:24 [21941864] Ответить | Цитировать Сообщить модератору |
andy st Member Откуда: Сообщений: 806 |
Sergey Syrovatchenko, 1. Цветовая расцветка понятна только читающим этот топик. Легенду бы подписать. 2. При клике на раскрашенную строку можно предложить фильтрануть и оставить только те индексы, на основании которых была выставлена такая расцветка. 3. Там же по правой кнопке можно предложить скопировать либо текст ячейки, либо запилить в буфер обмена скрипт на create/disable/drop. Ну или то, что можно через выбор в Fix, но "побыстрому" и только в буфер обмена. 4. Поля таблицы имеют ограничение на максимальную ширину. Пичалька. Приходится ждать либо всплывающей подсказки, либо накликивать скрипт на индекс. 5. Отсутствие подсветки текущей строки тоже печалит, особенно если полей в таблице много и они широкие. Определить активную строку можно только по полю Fix. Частично решит проблему настройка количества фиксированных полей слева, которые отображаются всегда на месте при скроллировании влево-вправо. Но если будет и такое, и подсветка активной строки - будет приятнее. |
5 авг 19, 14:02 [21942093] Ответить | Цитировать Сообщить модератору |
Sergey Syrovatchenko Member Откуда: Сообщений: 169 |
Сделаем.
Как-то муторно по правде. Думаю не вариант.
Подумаю как это можно реализовать.
Исправим.
Подумаю как это можно будет сделать. |
||||||||||
6 авг 19, 09:27 [21942614] Ответить | Цитировать Сообщить модератору |
andy st Member Откуда: Сообщений: 806 |
внезапно :( Дополнительный столбик с "Цветовые группы" с подписями типа "Нет", "Дубликат 1" (для группы дублей 1, а их может быть несколько), "Частично 1",2,3,4... и фильтр по нему. Еще по правой кнопке из менюшки содержимое ячейки текущей строки "добавить/удалить" в фильтр столбика. Я это всё к чему веду... надо гуй гуёвым делать, а не "слабое подобие левой руки" в виде "слехка покрасявше sqlcmd". Чтоб было приятно делать Analyze. |
||||
6 авг 19, 14:28 [21942975] Ответить | Цитировать Сообщить модератору |
Sergey Syrovatchenko Member Откуда: Сообщений: 169 |
Сорри, теперь понял :) Спасибо. Буду думать как сделать |
||
6 авг 19, 15:03 [21943010] Ответить | Цитировать Сообщить модератору |
Mind Member Откуда: Лучший город на Земле Сообщений: 2322 |
Так сказать в тему: Managing Index Fragmentation |
14 авг 19, 18:54 [21949564] Ответить | Цитировать Сообщить модератору |
Sergey Syrovatchenko Member Откуда: Сообщений: 169 |
Выложил версию 1.0.0.51: Те вещи, которые мы обсуждали ранее, но не вошедшие в этот билд, бережно записаны у меня в беклоге. И, со временем, в том или ином виде, будут реализованы. Поэтому не ленитесь фитбеки присылать :) Еще раз спасибо! ![]() ![]() ![]() ![]() ![]() |
31 авг 19, 12:25 [21961068] Ответить | Цитировать Сообщить модератору |
komrad Member Откуда: Сообщений: 5496 |
DU |
31 авг 19, 21:29 [21961286] Ответить | Цитировать Сообщить модератору |
andy st Member Откуда: Сообщений: 806 |
Sergey Syrovatchenko, Если фрагментация индекса ниже нижней границы reorganize, то мы никогда не узнаем, что это индекс является дублем какого-то другого. Хотя, не мешало бы. Может для разделения аспектов запилить еще одну закладку, на которой уже и отображать дубли, перекрытия и неиспользуемые индексы. А первую оставить на анализ фрагментации. Ну или 2 режима одной таблички: фрагментация/проблемы. Увеличенной максимальной ширины колонок не хватает :( OVERLAP это кончено хорошо, но фильтрануть индексы, которые попадают под конкретный OVERLAP не получается - только глазками. По двойному клику на ячейку можно закидывать её содержимое в фильтр. Если для ячейки такой фильтр предусмотрен. |
2 сен 19, 09:04 [21961631] Ответить | Цитировать Сообщить модератору |
Sergey Syrovatchenko Member Откуда: Сообщений: 169 |
Пока бы не хотелось этого делать. Скорее всего черед время обыграю этот кейс по другому.
А можно скрин чтобы понять по каким колонкам проблемы? Или просто списком...
Думаю это сделать можно будет. Постараюсь в следующим билде.
Идея хорошая, но сейчас двойной клик это выделение строки. Подумаю в общем... как можно прилепить. |
||||||||
2 сен 19, 09:39 [21961643] Ответить | Цитировать Сообщить модератору |
andy st Member Откуда: Сообщений: 806 |
Там простая и слегка извращенная фантазия разработчиков, не ограниченная по поводу длины названий полей и наталкивания их в индексы для быстрого OLAP во времена до-columnstore...
выпадающая менюшка по правой кнопке - наше всё. |
||||||||
2 сен 19, 11:42 [21961740] Ответить | Цитировать Сообщить модератору |
Sergey Syrovatchenko Member Откуда: Сообщений: 169 |
Выложил версию 1.0.0.52: |
8 сен 19, 11:13 [21966254] Ответить | Цитировать Сообщить модератору |
Sergey Syrovatchenko Member Откуда: Сообщений: 169 |
Выложил версию 1.0.0.53: |
3 ноя 19, 13:09 [22008982] Ответить | Цитировать Сообщить модератору |
Den_KP Member Откуда: Планета Земля, Евразийский материк Сообщений: 214 |
Sergey Syrovatchenko, Спасибо! Я уже в другую контору ушел, но и тут пригождается Ваш помощник, Ваше творение. Еще раз спасибо! |
8 ноя 19, 06:47 [22012018] Ответить | Цитировать Сообщить модератору |
Sergey Syrovatchenko Member Откуда: Сообщений: 169 |
Den_KP, рад что Вам прога оказалось полезной :) Надеюсь чуток свое разгребу и попробую еще наваять пару фич что просили ранее. В планах ближайших - это сканирование по нескольким серверам за раз + оптимизация работы с колумнсторами (это то что сейчас мне не хватает). Если будет что новое из идей накидывайте :) |
10 ноя 19, 09:24 [22012944] Ответить | Цитировать Сообщить модератору |
NaM-Cat Member Откуда: Сообщений: 9 |
Доброго времени суток! Полезная, интересная утилита. Пользуюсь сейчас ей, но на мой взгляд самый главный её недостаток, что нельзя с её помощью установить план мероприятий, расписание по которому проводить эти работы, чтобы автоматизировать. Пусть это пока и будет никак не связанно/завязанно на студию, но автоматизация наше всё) Для админа это часто определяющий фактор. |
11 ноя 19, 09:06 [22013240] Ответить | Цитировать Сообщить модератору |
Гулин Федор Member Откуда: МИНСК Сообщений: 1297 |
поставил вижу как генерить скрпиты но не вижу как запускать из гуи ? 1?) это спецом так ? запустил кластерный индекс с дефрагментацией 99.4% RAISERROR(N'BI_Distribution_Buffer | dbo.MerchVisit | PK_MerchVisit | 37.73 MB', 0, 1) WITH NOWAIT ALTER INDEX [PK_MerchVisit] ON [dbo].[MerchVisit] REBUILD PARTITION = ALL WITH (SORT_IN_TEMPDB = ON, PAD_INDEX = OFF, DATA_COMPRESSION = NONE, ONLINE = OFF, MAXDOP = 0); и ничего не изменилось это особенность класетрынх индексов 3?) Какой самый простой сценарий использования на SQL 2012 найти где больше всего дефрагментации - ометить - скоприовать скрпит и запусить с SSMS ? ps не знаю баг или фича после тогк как на sql 2012 RAISERROR(N'BI_Distribution_Buffer | dbo.MerchPartnerAudit_Detail | PK_MerchPartnerAudit_Detail | 181.91 MB', 0, 1) WITH NOWAIT ALTER INDEX [PK_MerchPartnerAudit_Detail] ON [dbo].[MerchPartnerAudit_Detail] REORGANIZE PARTITION = ALL WITH (LOB_COMPACTION = ON); GO данный индекс пропадает из списка как класс и все т.е он становится не фрагментированным - а показыватся толкьо Top 100 ??? Сообщение было отредактировано: 11 ноя 19, 14:32 |
11 ноя 19, 14:23 [22013578] Ответить | Цитировать Сообщить модератору |
Yasha123 Member Откуда: Сообщений: 1955 |
37.73 MB это меньше экстента и дефрагментировать его бессмысленно |
||||
11 ноя 19, 16:34 [22013715] Ответить | Цитировать Сообщить модератору |
msLex Member Откуда: Сообщений: 8702 |
|
||||
11 ноя 19, 16:59 [22013750] Ответить | Цитировать Сообщить модератору |
Yasha123 Member Откуда: Сообщений: 1955 |
да уж ![]() но все равно это мало в страницах/мегабайтах. короче, не надо его трогать |
||||||||
11 ноя 19, 17:08 [22013758] Ответить | Цитировать Сообщить модератору |
NaM-Cat Member Откуда: Сообщений: 9 |
Еще пожелания к приложению: 1. Агрегирующая строка по высвобожденному месту, неиспользуемому индексу и т.п., где это имеет смысл. 2. Показывать время выполнения фикса индекса. (пусть не в реальном времени, пусть каждые 5-10-60 секунд обновляется). Например, когда происходит ребилд - непонятно сколько времени он уже пытается отребилбить индекс, только разве что обходными путями - посмотрев когда закончилась предыдущая операция и на текущее время. 3. По-возможности. Отражать дату последнего ребилда/реорганайза индекса/кучи. Можно и отследить как быстро индекс снова повысил фрагментацию, а для кучи можно понять, что она уже проводилась и повторная не требуется, потому что это минимум. |
12 ноя 19, 07:29 [22014088] Ответить | Цитировать Сообщить модератору |
Гулин Федор Member Откуда: МИНСК Сообщений: 1297 |
я брал для примера НЕ большие таблицы но с бОльшим процентом дефрагментации - чисто для теста есть и приличные таблицы с Кластерным индексом где показыает процент дефрагментации > 90% вопрос скорее об этом - будет ли какой то гешефт после REbuild или Reorganize и если да - то как его увидеть в этом же UI И каков простейший сценарий использования этой тулзы |
||||||||
12 ноя 19, 11:49 [22014279] Ответить | Цитировать Сообщить модератору |
Sergey Syrovatchenko Member Откуда: Сообщений: 169 |
Есть поддержка коммандной строки и ничего не мешает сделать батник и запускать через него прогу. Ну а сам батник в виндовом шедулере крутить или как нравится. Хоть через дженкинс запускать...
Идея хорошая. На досуге попробую прикрутить что-то не сильно сложное для аналитики
Очень не скоро появится. Есть проблемы с многопоточностью и пока не прикручу нормальный движок который бы расспаралеливал запуск скриптов делать это пока не буду.
В метаданных нет инфы когда индекс когда последний раз REBUILD/REORGANIZE. Есть лишь один косвенный признак когда индекс ребилдился - это дата обновления статистики.
Кнопка справа от рефреша
Вот статейка как пользоваться прогой на подобие моей: https://towardsdatascience.com/sql-server-index-analysis-and-optimization-1edd84d9da |
||||||||||||
13 ноя 19, 17:56 [22015651] Ответить | Цитировать Сообщить модератору |
Sergey Syrovatchenko Member Откуда: Сообщений: 169 |
Выложил версию 1.0.0.54:
|
7 дек 19, 17:39 [22034876] Ответить | Цитировать Сообщить модератору |
Sergey Syrovatchenko Member Откуда: Сообщений: 169 |
Выложил версию 1.0.0.55:
|
15 дек 19, 13:18 [22040648] Ответить | Цитировать Сообщить модератору |
Sergey Syrovatchenko Member Откуда: Сообщений: 169 |
Выложил версию 1.0.0.56:
![]() Возможно будут косяки потому рад отзывам В планах со следующего года засесть на более масштабную прогу в которой будет Index Manager и много статистики в реалтайме Еще раз спасибо за Ваши фидбеки и помощь в развитии продукта! Всех с наступающими праздниками :) |
29 дек 19, 18:33 [22051142] Ответить | Цитировать Сообщить модератору |
Sergey Syrovatchenko Member Откуда: Сообщений: 169 |
Выложил версию 1.0.0.57:
|
7 янв 20, 22:15 [22054653] Ответить | Цитировать Сообщить модератору |
Sergey Syrovatchenko Member Откуда: Сообщений: 169 |
Изменения в 1.0.0.58:
Изменения в 1.0.0.59:
|
2 фев 20, 21:28 [22071264] Ответить | Цитировать Сообщить модератору |
Sergey Syrovatchenko Member Откуда: Сообщений: 169 |
Выложил версию 1.0.0.60:
|
13 фев 20, 10:19 [22079013] Ответить | Цитировать Сообщить модератору |
imcat Member Откуда: Сообщений: 12 |
Добрый день! А можно пару примеров по работе с командной строкой? |
27 фев 20, 17:43 [22088580] Ответить | Цитировать Сообщить модератору |
Sergey Syrovatchenko Member Откуда: Сообщений: 169 |
Работа с коммандной строкой описана на гите. Вот мини пример:SQLIndexManager.exe /connection "Data Source=localhost;Integrated Security=True;" /databases "database1;database2" |
2 мар 20, 15:52 [22090770] Ответить | Цитировать Сообщить модератору |
Sergey Syrovatchenko Member Откуда: Сообщений: 169 |
Выложил версию 1.0.0.61:
В теории это последний билд стабильный. По мере сил начну ломать то что есть и перепедаливать на новую архитектуру с учетом многопоточности, работы с несколькими серверами за раз и всеми плюшками что скопились. |
29 мар 20, 12:38 [22107592] Ответить | Цитировать Сообщить модератору |
Sergey Syrovatchenko Member Откуда: Сообщений: 169 |
Выложил версию 1.0.0.62:
|
11 май 20, 09:46 [22130476] Ответить | Цитировать Сообщить модератору |
Sergey Syrovatchenko Member Откуда: Сообщений: 169 |
Выложил версию 1.0.0.63:
|
31 май 20, 12:09 [22142982] Ответить | Цитировать Сообщить модератору |
Sergey Syrovatchenko Member Откуда: Сообщений: 169 |
Выложил версию 1.0.0.64:
Вопрос насколько это кому нужно? |
7 июн 20, 08:42 [22146976] Ответить | Цитировать Сообщить модератору |
Korkunov Member Откуда: Сообщений: 2 |
Sergey Syrovatchenko, Hi. Сергей, пож-та распиши более подробно по командной строке. В частности, мне нужно подключиться к скуль-серверу MSSQLSERVER пользователем User1 с паролем 123. Спасибо. |
13 июн 20, 10:30 [22150073] Ответить | Цитировать Сообщить модератору |
Korkunov Member Откуда: Сообщений: 2 |
И еще прошу уточнить по статистике: STATISTIC_NORECOMPUTE - это НЕ ОБНОВЛЯТЬ СТАТИСТИКУ ? STATISTIC_SAMPLE_PERCENT - не понятно на что влияет И на что влияют это два параметра ? Я хочу понять: обновляется ли статистика при работе вашей программы в автомате (запуск с командной строки SQLIndexManager.exe /connection "Data Source=localhost;Integrated Security=True" /databases "tmp1" ). При ручном запуске ваша программа сама определяет что делать с индексами (Колонка Fix), не зависимо от того как установлен STATISTIC_NORECOMPUTE в колонке Fix у меня проставляется REBUILD или REORGANIZE. А статистика обновляется или нет ? Не понятно... Или нужно руками для каждого индекса в колонке Fix выбирать UPDATE STATISTIC ***? Но это очень не удобно... Сообщение было отредактировано: 16 июн 20, 10:59 |
16 июн 20, 10:53 [22151424] Ответить | Цитировать Сообщить модератору |
Александр Гладченко Member Откуда: Сообщений: 10765 Блог |
Korkunov, читайте документацию в BOL: https://docs.microsoft.com/ru-ru/sql/relational-databases/indexes/set-index-options?view=sql-server-ver15 |
16 июн 20, 13:52 [22151603] Ответить | Цитировать Сообщить модератору |
NaM-Cat Member Откуда: Сообщений: 9 |
Достаточно указывать какое-то одно время. Также предлагаю рассмотреть новую функциональность - отстрела процесса. Бываю случаи запуска обслуживания через ваш интерфейс в рабочее время и в случае долгого прохождения перестроения индекса хочется его исключить в этот проход и запустить позже, когда нагрузка на сервер от пользователей будет меньше, а остальные индексы чтобы продолжили обслуживаться. Сейчас приходится делать это вручную через студию. |
||||
17 июн 20, 09:12 [22152142] Ответить | Цитировать Сообщить модератору |
NaM-Cat Member Откуда: Сообщений: 9 |
Также прошу рассмотреть возможность сохранения настроек по-умолчанию, которые есть возможность менять через интерфейс. Для нового релиза приходится обновлять ПО и все настройки естественно слетают. Видимо отдельный файл с конфигом или еще как. |
17 июн 20, 09:34 [22152151] Ответить | Цитировать Сообщить модератору |
Sergey Syrovatchenko Member Откуда: Сообщений: 169 |
Выложил версию 1.0.0.65:
Там все достаточно просто и примеры я приводил. В вашем случае будет что-то такое: /connection "Data Source=HOMEPC\SQL_2017;User Id=user1;Password=pass1"
Нет
Но идея добавить reorganize + update stats мне понравилась. Как время появится сделаю
Если вы хотите сбросить настройки по умолчанию. Есть несколько вариантов. Закрываем приложение удаляем файлы config в котором хранятся настройки и коннекшены. И по желанию файл layout в котором текущие настройки грида (то же можно сделать если в контекстном меню выбрать restore default layout)
На данный момент физически это сделать не могу из-за недостатка времени. В будующем возможно такое появится |
||||||||||
29 июн 20, 13:20 [22159017] Ответить | Цитировать Сообщить модератору |
Sergey Syrovatchenko Member Откуда: Сообщений: 169 |
Отдельно выложил мини вики по приложению |
29 июн 20, 13:21 [22159018] Ответить | Цитировать Сообщить модератору |
NaM-Cat Member Откуда: Сообщений: 9 |
Подскажите, параметр / commandtimeout в командной строке и EXECUTION_TIMEOUT в интерфейсе одно и тоже? Если да, то в интерфейсе есть ограничение на 1800 сек, действует ли это ограничение на командную строку? |
8 окт 20, 08:16 [22210566] Ответить | Цитировать Сообщить модератору |
Юзер9 Member Откуда: Сообщений: 6 |
Почему программа может не запускаться под Win 10? |
12 окт 20, 15:21 [22212787] Ответить | Цитировать Сообщить модератору |
Sergey Syrovatchenko Member Откуда: Сообщений: 169 |
Прошу прощения что с запозданием отвечаю. commandtimeout и EXECUTION_TIMEOUT это одно и тоже. Просто хреново назвал когда названия придумывал. На командную строку ограничения не действуют из настроек. Если параметр задан, то используется он. Если нет, то берется дефолтный - 120с. |
||
15 окт 20, 17:22 [22214994] Ответить | Цитировать Сообщить модератору |
Sergey Syrovatchenko Member Откуда: Сообщений: 169 |
Юзер9, причин может быть куча. Как вариант есть ли у вас права администратора? Антивирус не блокирует (цифровой же подписи нет)? Что пишет event log? |
15 окт 20, 17:23 [22214995] Ответить | Цитировать Сообщить модератору |
Юзер9 Member Откуда: Сообщений: 6 |
Sergey Syrovatchenko, права администратора есть, антивирус сообщений никаких на выдаёт. Event log где расположен? |
16 окт 20, 18:01 [22215646] Ответить | Цитировать Сообщить модератору |
Sergey Syrovatchenko Member Откуда: Сообщений: 169 |
Юзер9, C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Administrative Tools\Event Viewer.lnk |
18 окт 20, 10:09 [22216190] Ответить | Цитировать Сообщить модератору |
Юзер9 Member Откуда: Сообщений: 6 |
Спасибо. |
19 окт 20, 22:13 [22217086] Ответить | Цитировать Сообщить модератору |
NaM-Cat Member Откуда: Сообщений: 9 |
Я уж потерял надежду получить ответ =) Дело в том, что попытался этот параметр выставить в значение 2500 в командной строке, а по факту у меня срабатывал 120с, вот и хочу понять, как всё же его обойти.
|
||||||
20 окт 20, 12:36 [22217357] Ответить | Цитировать Сообщить модератору |
startDBA Member Откуда: Сообщений: 174 |
Sergey Syrovatchenko, спасибо за отличную программу! |
21 дек 20, 13:14 [22251462] Ответить | Цитировать Сообщить модератору |
Sergey Syrovatchenko Member Откуда: Сообщений: 169 |
Странно. Я проверял и у меня нормик все работало. По свободе пересмотрю еще раз
Велкомс. Рад что понравилось с ней работать. Если есть предложения в плане того что стоило бы добавить смело предлагайте |
||||
21 дек 20, 15:39 [22251612] Ответить | Цитировать Сообщить модератору |
Топик располагается на нескольких страницах: 1 2 3 4 5 6 7 8 [все] |
Все форумы / Microsoft SQL Server | ![]() |