|
SQL Index Manager - бесплатная утилита по обслуживанию индексов для SQL Server и Azure
|
|||
---|---|---|---|
#18+
Ролг Хупин, реально классно что на форуме нельзя править сообщения. Иногда такие перлы попадаются ))) Если же серьезно, то появилась идея сделать тул более функциональным и кастомизируемым. Планирую добавить контрол в котором можно задавать набор условий и действие которое нужно сделать над индексом, когда эти условия выполняются. В порядке определенного приоритета. И тут есть пара противоречий. Размер индекса (с ... по ... ) является обязательным параметром. Остальные условия можно кастомизировать. Нужно ли уровень фрагментации делать обязательным параметром для каждого условия? Примеры таких условий может кто-то предложить? Скажем когда выгоднее делать обновление статистики а не ребилд, потому что все очень сильно зависит от системы и нагрузки. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.05.2019, 09:23 |
|
SQL Index Manager - бесплатная утилита по обслуживанию индексов для SQL Server и Azure
|
|||
---|---|---|---|
#18+
Sergey SyrovatchenkoНа данный момент и в дальнейшем, SQL Index Manager полностью бесплатный . DevExpress тоже бесплатный? Sergey SyrovatchenkoMindМожет ради пустого места в индексах и можно заморочиться, но не ради фрагментации как таковой. Пустое место критично хотя бы, потому что память занимает. Тут я с Вами солидарен. Из этих соображений я и добавил отдельную колонку Unused Place по которой можно быстро найти индексы, где много свободного места. Код: sql 1.
Как у вас хитро количество неиспользуемых страниц превращается в неиспользуемое индексное пространство. Да мне как то по барабану сколько там пустых страниц в индексе, они то ну вообще никак не влияют ни на скорость выполнения запросов ни на количество используемой памяти. Дефрагментировать по этому признаку это все равно что ногти подстригать чтобы гимморой вылечить. 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.05.2019, 23:34 |
|
SQL Index Manager - бесплатная утилита по обслуживанию индексов для SQL Server и Azure
|
|||
---|---|---|---|
#18+
MindDevExpress тоже бесплатный? Я вроде DevEx еще никому не впаривал :) У самого есть лицензия (правда старая). Тем более на библиотеки не распространяются ограничения если продукт был сделан на основе лицензии. Тем кому эти компоненты не нравятся можно прикрутить хоть WPF хоть что угодно другое. К слову это тоже в будующих планах - свои контролы сделать. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.05.2019, 09:02 |
|
SQL Index Manager - бесплатная утилита по обслуживанию индексов для SQL Server и Azure
|
|||
---|---|---|---|
#18+
Sergey SyrovatchenkoMindDevExpress тоже бесплатный? Я вроде DevEx еще никому не впаривал :) У самого есть лицензия (правда старая). Тем более на библиотеки не распространяются ограничения если продукт был сделан на основе лицензии. Тем кому эти компоненты не нравятся можно прикрутить хоть WPF хоть что угодно другое. К слову это тоже в будующих планах - свои контролы сделать. От DevEx надо избавляться, тем более, что приложение мало контролов использует, грид, еще 2-3. Можно прикрутить, что-то простое и бесплатное. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.05.2019, 12:12 |
|
SQL Index Manager - бесплатная утилита по обслуживанию индексов для SQL Server и Azure
|
|||
---|---|---|---|
#18+
Ролг ХупинОт DevEx надо избавляться Увы, тут вы правы. Не все вещи в DevEx хорошие. Возможно в будующем как коммандную строку сделаю, то на WPF переведу проект. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.05.2019, 13:03 |
|
SQL Index Manager - бесплатная утилита по обслуживанию индексов для SQL Server и Azure
|
|||
---|---|---|---|
#18+
Sergey SyrovatchenkoMindDevExpress тоже бесплатный? Я вроде DevEx еще никому не впаривал :) У самого есть лицензия (правда старая).Я за вас рад... ... |
|||
:
Нравится:
Не нравится:
|
|||
17.05.2019, 18:28 |
|
SQL Index Manager - бесплатная утилита по обслуживанию индексов для SQL Server и Azure
|
|||
---|---|---|---|
#18+
Mind, Так и не понял чем плох devexpres... Немного используем telerik под win и web. Лицензия все позволяет ... |
|||
:
Нравится:
Не нравится:
|
|||
17.05.2019, 18:33 |
|
SQL Index Manager - бесплатная утилита по обслуживанию индексов для SQL Server и Azure
|
|||
---|---|---|---|
#18+
TaPaKMind, Так и не понял чем плох devexpres... Немного используем telerik под win и web. Лицензия все позволяетТак он бесплатный или нет? Мне лицензию нужно покупать чтобы скомпилировать бесплатную программу? Или мне все переписывать? ... |
|||
:
Нравится:
Не нравится:
|
|||
17.05.2019, 19:13 |
|
SQL Index Manager - бесплатная утилита по обслуживанию индексов для SQL Server и Azure
|
|||
---|---|---|---|
#18+
Mind, никаких лицензий не нужно. Я специально все нужные либы приложил, чтобы можно было скомпилить прогу. Сорри, я просто вначале не понял вашего вопроса относительно DevEx. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.05.2019, 19:43 |
|
SQL Index Manager - бесплатная утилита по обслуживанию индексов для SQL Server и Azure
|
|||
---|---|---|---|
#18+
Выложил версию 1.0.0.36 : Добавил новые поля в гриде (операции Seeks/Scans/Lookups в разрезе индекса) При выборе баз показывается Recovery Model в гриде Возможность автоматически задавать DATA_COMPRESSION для индексов при ребилде Возможность фильтрации скана только по выбранным схемам Фикс при фильтрации не учитывались схемы с юникодными именами Отдельно вопрос. Нужно ли показывать инфу о том какие индексы имеют статус NORECOMPUTE? ... |
|||
:
Нравится:
Не нравится:
|
|||
19.05.2019, 15:57 |
|
SQL Index Manager - бесплатная утилита по обслуживанию индексов для SQL Server и Azure
|
|||
---|---|---|---|
#18+
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.05.2019, 17:09 |
|
SQL Index Manager - бесплатная утилита по обслуживанию индексов для SQL Server и Azure
|
|||
---|---|---|---|
#18+
Sergey Syrovatchenko, и еще хорошо бы аналогичное по анализу и оптимизации существующих статистик ... |
|||
:
Нравится:
Не нравится:
|
|||
22.05.2019, 17:09 |
|
SQL Index Manager - бесплатная утилита по обслуживанию индексов для SQL Server и Azure
|
|||
---|---|---|---|
#18+
ЕвгенийGEM SELECT * FROM sys.databases WHERE DB_NAME() not in ('master', 'tempdb', 'model', 'msdb', 'mssqlsystemresource'); Запрос точно не мой :) У меня в коде базы получаются так: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15.
ЕвгенийGEM скорее всего нужно учитывать неудаленные, т е у которых [type]<>0 Замечание важное. Погляжу как это затрагивает мою текущую логику ЕвгенийGEM сделать возможным обслуживание системных БД (master, msdb) То есть обслуживать системные обьекты? Потому как пользовательские обьекты в системных базах обслуживать можно. ЕвгенийGEMсделать возможным выборочно обновлять статистики не только для индексов и также разными способами (полностью обновлять или частично) В ближайших планах что-то сделать в этом направлении. Есть идея показывать статистику просто как отдельную строку и фильтровать по степени устаревания и тому сколько изменений было на уровне индекса. ЕвгенийGEMсделать возможным не только выбирать БД, но и разные сервера (это очень удобно, когда много экземпляров скулей). Увы это пока реализовать быстро не получится, но на перспективу учтем. ЕвгенийGEMвыдавая код ошибки, который расшифровывается как проблема с лицензией компонентов DevExpress Можно точное сообщение об ошибке показать. У меня просто с таким проблем не было на 2017й студии. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.05.2019, 17:27 |
|
SQL Index Manager - бесплатная утилита по обслуживанию индексов для SQL Server и Azure
|
|||
---|---|---|---|
#18+
Sergey Syrovatchenko, трассировка запускалась на изолированной среде, чтобы как раз исследовать все запросы от Вашей тулзы. Потому все запросы от Вашей тулзы) Лучше на Core переписать. А в будущем сделать платную ветвь в стиле сервер-клиент на ASP.NET Core, куда добавить мониторинг подобный Spotlight и даже лучше) Но вообще за тулзу больфуфий респект!) Предлагаю код ошибки и прочие детали в личке обсудить ... |
|||
:
Нравится:
Не нравится:
|
|||
22.05.2019, 21:43 |
|
SQL Index Manager - бесплатная утилита по обслуживанию индексов для SQL Server и Azure
|
|||
---|---|---|---|
#18+
Sergey Syrovatchenko, еще вспомнил-лучше отсеивать отключенные индексы и те базы, которые недоступны на редактированине (как в целом БД, так и отдельный ее файл). Не помню было ли в коде этл учтено. И еще пока не разглядел-если индекс секционированный, то есть возможность выбирать какие секции и что с каждым делать и каким образом делать? ... |
|||
:
Нравится:
Не нравится:
|
|||
22.05.2019, 22:30 |
|
SQL Index Manager - бесплатная утилита по обслуживанию индексов для SQL Server и Azure
|
|||
---|---|---|---|
#18+
Sergey Syrovatchenko, на счет фильтруемых индексов. Достаточно часто встречал, когда фильтруемый индекс непросто не используется оптимизатором, а даже через подсказки не может план построить и вылетает ошибка выполнения запроса. Аналогично и фидьтрация репликации слияния. Потому уже выработался инстинкт-никаких фильтруемых индексов и реплик. Надо-отдельная табдица или секции. А для сложной и устойчивой реплики обычно используют сторонние тулзы или при возможности свою пилят (если конечно AlwaysOn недоступен или его недосиаточно по каким-то условиям) ... |
|||
:
Нравится:
Не нравится:
|
|||
22.05.2019, 23:38 |
|
SQL Index Manager - бесплатная утилита по обслуживанию индексов для SQL Server и Azure
|
|||
---|---|---|---|
#18+
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.05.2019, 23:45 |
|
SQL Index Manager - бесплатная утилита по обслуживанию индексов для SQL Server и Azure
|
|||
---|---|---|---|
#18+
ЕвгенийGEMSergey Syrovatchenko, на счет фильтруемых индексов. Достаточно часто встречал, когда фильтруемый индекс непросто не используется оптимизатором, а даже через подсказки не может план построить и вылетает ошибка выполнения запроса.Ну если создать неправильный индекс, а потом заставить сервер его использовать то конечно оно с ошибкой свалится. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.05.2019, 03:03 |
|
SQL Index Manager - бесплатная утилита по обслуживанию индексов для SQL Server и Azure
|
|||
---|---|---|---|
#18+
ЕвгенийGEM Т к представление dm_db_index_usage_stats среди прочего показывает и уровни индекса. Уровни? Какие еще уровни показывает это представление? ... |
|||
:
Нравится:
Не нравится:
|
|||
23.05.2019, 03:12 |
|
SQL Index Manager - бесплатная утилита по обслуживанию индексов для SQL Server и Azure
|
|||
---|---|---|---|
#18+
Sergey Syrovatchenko, а не было мысли второй закладкой прикрутить анализ по индексам на основе sys.dm_db_missing_index_group_stats и сотоварищей? ... |
|||
:
Нравится:
Не нравится:
|
|||
23.05.2019, 06:15 |
|
SQL Index Manager - бесплатная утилита по обслуживанию индексов для SQL Server и Azure
|
|||
---|---|---|---|
#18+
andy stа не было мысли второй закладкой прикрутить анализ по индексам на основе sys.dm_db_missing_index_group_stats и сотоварищей? Мысль была. Думаю сделать можно будет опционально: В настройках добавляется опция MISSING INDEXES Cканируем записи из этого представления и показываем их в том же гриде что и всю отсальную информацию В отличии от обычных индексов для этой группы будет две команды CREATE INDEX / CREATE STATISTICS (потому как не всегда индекс имеет смысл создавать) Будут добавлены новые колонки Index Columns / Included Columns как для существующих записей, так и для тех индексов которые представление рекомендует создать (для наглядности это думаю нужно будет) ЕвгенийGEM лучше отсеивать отключенные индексы и те базы, которые недоступны на редактированине (как в целом БД, так и отдельный ее файл). Отключенные индексы в итоговую выборку и так не попадают из-за условий rows > 0 + предварительной фильтрации по размеру. У отключенного индекса размера нет как такового. Базы которые недоступны для редактирования я тоже игнорю еще на этапе выбора за счет проверки на права + state = 0 ЕвгенийGEMесли индекс секционированный, то есть возможность выбирать какие секции и что с каждым делать и каким образом делать? Все операции делаются в разрезе секции, поэтому можно для каждой секции задать свое действие. Увы не автоматически, а ручками. ЕвгенийGEMсделать возможным выборочно обновлять статистики не только для индексов и также разными способами (полностью обновлять или частично) Есть идея: Добавить в настройки новый тип STATISTICS Показывать в том же гриде статистику где и индексы выводятся Фильтровать статистику с сервера на клиент на основе устаревания (то есть выведи мне все что старее н-дней) либо показывать где статистика не совпадает с текущим кол-во строк у таблицы Будет показываться как статистика закрепленная за индексом (есть проблема с автоинкрементальной), так и пользовательская Если вдруг мы делаем ребилд индекса и выбрали дальше еще апдейт статистики с фуллсканом то обновление статистики делаться не будет (то есть нужно будет предусмотреть чтобы лишних операций не было) Примерно как-то так это себе вижу. Получится правда монстр зато весьма функциональный. Пока не начал делать хотелось бы мнение комьюнити спросить. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.05.2019, 10:14 |
|
SQL Index Manager - бесплатная утилита по обслуживанию индексов для SQL Server и Azure
|
|||
---|---|---|---|
#18+
Sergey Syrovatchenko, как и обещал-вот один из примеров обновления индексов: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. 111. 112. 113. 114. 115. 116. 117.
Здесь лучше переписать на курсор, чем удалять каждый раз значение из временной таблицы, но мне было лень) ... |
|||
:
Нравится:
Не нравится:
|
|||
23.05.2019, 11:58 |
|
SQL Index Manager - бесплатная утилита по обслуживанию индексов для SQL Server и Azure
|
|||
---|---|---|---|
#18+
Модератор: ЕвгенийGEM, ваш список "аномальных" фич MSSQL и связанное с ним обсуждения я отсюда вырезаю: в этой теме неуместно. Если все еще хотите подискутировать, создайте отдельню тему, хотя я бы на вашем месте с таким уровнем аргументации "аномальности" не стал -- засмеют. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.05.2019, 16:39 |
|
SQL Index Manager - бесплатная утилита по обслуживанию индексов для SQL Server и Azure
|
|||
---|---|---|---|
#18+
Гавриленко Сергей Алексеевич, по первому предложению полностью согласен. По второму может статью опубликую по багам скуля. P.S.: мне пофиг на чужое мнение, которое не сталкивалось с тем фактом, который я в свое время зарегистрировал ... |
|||
:
Нравится:
Не нравится:
|
|||
23.05.2019, 16:44 |
|
SQL Index Manager - бесплатная утилита по обслуживанию индексов для SQL Server и Azure
|
|||
---|---|---|---|
#18+
ЕвгенийGEMЗдесь лучше переписать на курсор, чем удалять каждый раз значение из временной таблицы, но мне было лень) не лучше https://www.sqlbook.com/advanced/sql-cursors-how-to-avoid-them/ ... |
|||
:
Нравится:
Не нравится:
|
|||
23.05.2019, 16:56 |
|
|
start [/forum/topic.php?fid=46&msg=39813853&tid=1683782]: |
0ms |
get settings: |
10ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
30ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
74ms |
get tp. blocked users: |
1ms |
others: | 14ms |
total: | 163ms |
0 / 0 |