Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Помогите пожалуйста составить конструкцию для запроса / 9 сообщений из 9, страница 1 из 1
19.06.2018, 20:24
    #39662690
gnux
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите пожалуйста составить конструкцию для запроса
Всем привет.
Помогите пожалуйста составить конструкцию для запроса.

Задача:
Есть запрос (поиск тяжелых запросов).
Запрос может вывести несколько строк.
Необходимо проверять эти строки и при нахождении определенного запроса запускать следующее действие.


Как я это вижу:
1) SELECT * FROM.....
2) результат: N1, Nx
3) Анализ на условие
4) Если строка Nx соответствует критерию, запустить alter index....


Спасибо.
...
Рейтинг: 0 / 0
20.06.2018, 02:45
    #39662767
Щукина Анна
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите пожалуйста составить конструкцию для запроса
gnux,

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

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

Если всё так, то вам правильнее будет смотреть в сторону регулярного обслуживания индексов и пересчету статистик. Скриптов по поиску фрагментированных индексов и устаревших статистик - в интернете тьма. Если сами не уверены в качестве найденных решений - несите их сюда, местные гуру помогут оценить "качество" найденных скриптов :)
...
Рейтинг: 0 / 0
20.06.2018, 04:57
    #39662775
982183
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите пожалуйста составить конструкцию для запроса
Возможно он хочет другого.
Запустить некий бенчмарк, после которого принять решение - стоит ли индексировать или нет.
Т.Е понять, дошла ли база до состояния, требующего индексации.
"Регулярное обслуживание" несомненно вещь нужная и полезная.
Но есть и нерегулярный ввод данных и затратность/длительность самого процесса индексации.
Поэтому он и пытается решить задачу "а стоит ли индексировать?"
Причем данный ответ может как и ускорить сроки "регулярного обслуживания", так и отменить его.
...
Рейтинг: 0 / 0
20.06.2018, 05:41
    #39662781
Щукина Анна
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите пожалуйста составить конструкцию для запроса
982183,

Красивая теория. Меня смущает лишь тот факт, что ALTER INDEX в неё плохо вписывается. Но это можно списать на опечатку ТС, конечно же.
...
Рейтинг: 0 / 0
20.06.2018, 05:52
    #39662784
982183
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите пожалуйста составить конструкцию для запроса
Согласен. Исходил из DBREINDEX.
А alter index автоматом это уже ИИ.
...
Рейтинг: 0 / 0
20.06.2018, 17:34
    #39663202
DaniilSeryi
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите пожалуйста составить конструкцию для запроса
982183Согласен. Исходил из DBREINDEX.
А alter index автоматом это уже ИИ.

Alter index / rebuild index автоматом - это не ИИ, а скрипт на пару десятков строк. где-то на просторах форума валяется. или в FAQ даже.

Сами сможете переписать код так, чтобы код из столбца run_it выполнялся в курсоре?
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
SELECT distinct
    QUOTENAME(s.name) + '.' + OBJECT_NAME(p.object_id) as Table_name,
    p.index_id AS indexid,
    sys.indexes.name,
    partition_number AS partitionnum,
    avg_fragmentation_in_percent AS frag,
    'ALTER INDEX [' + sys.indexes.name + '] on ' + s.name + '.' + OBJECT_NAME(p.object_id) + case when avg_fragmentation_in_percent <15 then ' Reorganize' else ' Rebuild' end as 'Run_it'
FROM sys.dm_db_index_physical_stats (DB_ID(), NULL, NULL , NULL, 'LIMITED') as p
inner join sys.indexes 
on p.index_id=sys.indexes.index_id and p.[object_id]=sys.indexes.[object_id]
        inner join sys.objects AS o
        on p.object_id=o.object_id
        inner JOIN sys.schemas as s ON s.schema_id = o.schema_id
WHERE 
avg_fragmentation_in_percent > 5.0 AND
 p.index_id > 0; 



А Вам, на самом деле, более актуальна тема поиска missing index-ов, что-то вроде

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
select e.*, 
DB_NAME(database_id) as 'DB_Name', [statement], equality_columns, inequality_columns, included_columns,
'CREATE NONCLUSTERED INDEX ' + 'i' + OBJECT_NAME([OBJECT_ID]) + '_' + replace(replace(replace(ISNULL(equality_columns,''),',','_'),'[','') ,']','')
+ replace(replace(replace(ISNULL(inequality_columns,''),',','_'),'[','') ,']','') + 
' ON ' + [statement] +' ('+ISNULL(equality_columns,'') + case when not (equality_columns is null) and not (inequality_columns is null) then ',' else '' end 
+ ISNULL(inequality_columns,'') +') ' + case when included_columns is null then '' else ' INCLUDE( ' + included_columns + ')' end as 'Draft_for_Script'
FROM
(select  sys.dm_db_missing_index_group_stats.*, avg_total_user_cost*avg_user_impact*(user_seeks + user_scans) as Zatraty
from sys.dm_db_missing_index_group_stats
) as e
inner join sys.dm_db_missing_index_groups
on e.group_handle=sys.dm_db_missing_index_groups.index_group_handle
inner join sys.dm_db_missing_index_details
on sys.dm_db_missing_index_groups.index_handle =sys.dm_db_missing_index_details.index_handle
where DB_NAME(database_id)='test' and last_user_seek>='2014-04-01'
order by /*[statement],*/ avg_total_user_cost*avg_user_impact*(user_seeks + user_scans) desc
...
Рейтинг: 0 / 0
20.06.2018, 17:38
    #39663207
DaniilSeryi
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите пожалуйста составить конструкцию для запроса
gnux,

а... насчёт поиска долго выполняющихся запросов и заодно, блокировок - смотрим результаты
Код: sql
1.
exec sp_who2
...
Рейтинг: 0 / 0
20.06.2018, 23:46
    #39663320
Eleanor
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите пожалуйста составить конструкцию для запроса
DaniilSeryiА Вам, на самом деле, более актуальна тема поиска missing index-ов, что-то вроде...
Причем, ТС придется учесть, что в результатах sys.dm_db_missing_index* бывают:
индексы, которые на самом деле уже существуют

индексы, которые в части INCLUDE избыточно включают поле первичного ключа

множество очень похожих индексов с немного отличающимся набором полей

широкие поля, которые ТС может не захотеть включать в индекс

Поэтому лучше начать с ручного анализа индексов и их создания. Сразу написать качественный автоматический скрипт создания индексов не получится.
...
Рейтинг: 0 / 0
21.06.2018, 09:26
    #39663392
DaniilSeryi
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите пожалуйста составить конструкцию для запроса
Eleanor,

Ну хоть можно будет посмотреть, что имеет смысл создать.
Другая сторона вопроса - анализ того, насколько востребованны ранее СОЗДАННЫЕ индексы, но и здесь не без нюансов, типа индекса, который используется только раз в месяц для очень тяжёлой выборки.
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Помогите пожалуйста составить конструкцию для запроса / 9 сообщений из 9, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]