Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: Ctrl  назад   1 2 [3] 4   вперед  Ctrl      все
 Re: Что есть "умение оптимизировать запросы"  [new]
andrew shalaev
Member

Откуда: Moscow
Сообщений: 610
Ivan Durak
это отдельная и большая тема... кто, как и зачем использует и нагружает темпдб и как с этим жить


Ссылку можно?
22 май 12, 15:10    [12595180]     Ответить | Цитировать Сообщить модератору
 Re: Что есть "умение оптимизировать запросы"  [new]
SamMan
Member

Откуда: Moscow
Сообщений: 759
is_me
Определение хороших/ненужных индексов - это никак не оптимизация запроса.


Shakill
к оптимизации запросов... а вот построение индексов и обновление статистик - относятся


Вот и понимай, что им там на собеседованиях требуется.
22 май 12, 19:13    [12596881]     Ответить | Цитировать Сообщить модератору
 Re: Что есть "умение оптимизировать запросы"  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6724
Проблема в том что собеседники говорят о разных стратегиях, целях и ограничениях оптимизации.

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

Можно "копать" по оптимизации глубоко и свободно с этим справляться, а можно поверхностно. У кого-то наполеоновские замашки у кого-то лишь бы "сдать" побыстрее. Хотя можно и по этапам разделить и их расписать.

Много было затронуто о средствах оптимизации, мало о процессе оптимизации.

Т.к. изначально ТС не указал цели (ограничения) оптимизации, то возможно хватало просто перечислить средства.
Хотя процесс оптимизации можно расписать и в общем виде, академическим языком.
22 май 12, 19:42    [12596951]     Ответить | Цитировать Сообщить модератору
 Re: Что есть "умение оптимизировать запросы"  [new]
Mind
Member

Откуда: Лучший город на Земле
Сообщений: 2322
Shakill
Ivan Durak
пропущено...

Ну только на "план" мольтся не стоит. Управлять загрузкой того же TempDB нужно? Нужно. А в плане его использования не увидишь, а тем не менее это к оптимизации запросов относиться.


это вы про какое управление сейчас? вообще в планах есть признаки использования tempdb
Начиная с версии 2012 признаки в плане есть, но я сомневаюсь, что все уже на неё перешли.
23 май 12, 03:30    [12598113]     Ответить | Цитировать Сообщить модератору
 Re: Что есть "умение оптимизировать запросы"  [new]
aleks2
Guest
Mnior
Хотя процесс оптимизации можно расписать и в общем виде, академическим языком.

Сделать так, шоб быстро работало.
23 май 12, 10:27    [12598824]     Ответить | Цитировать Сообщить модератору
 Re: Что есть "умение оптимизировать запросы"  [new]
Дедушка
Member

Откуда: Город трёх революций
Сообщений: 5115
aleks2
Сделать так, шоб быстро работало.
+много 12593533
23 май 12, 10:36    [12598917]     Ответить | Цитировать Сообщить модератору
 Re: Что есть "умение оптимизировать запросы"  [new]
SamMan
Member

Откуда: Moscow
Сообщений: 759
aleks2
Сделать так, шоб быстро работало.


Ну тогда нет вопросов (в смысле понятно что нужно). Но тогда собеседующим не нужно умничать и говорить "знание и умение применения методов оптимизации SQL-запросов, хранимых процедур и функций". А говорить просто: "сейчас медленно - хочу быстро. И мне все-равно как. Выделить деньги на доп. железо можем/не можем".
23 май 12, 11:21    [12599319]     Ответить | Цитировать Сообщить модератору
 Re: Что есть "умение оптимизировать запросы"  [new]
Shakill
Member

Откуда: мск
Сообщений: 1887
Mind
Shakill
пропущено...


это вы про какое управление сейчас? вообще в планах есть признаки использования tempdb
Начиная с версии 2012 признаки в плане есть, но я сомневаюсь, что все уже на неё перешли.


2012? а наличие в плане table spool, например, не есть признак использования tempdb?
23 май 12, 12:26    [12600073]     Ответить | Цитировать Сообщить модератору
 Re: Что есть "умение оптимизировать запросы"  [new]
defragmentator
Member

Откуда:
Сообщений: 20504
SamMan
aleks2
Сделать так, шоб быстро работало.


Ну тогда нет вопросов (в смысле понятно что нужно). Но тогда собеседующим не нужно умничать и говорить "знание и умение применения методов оптимизации SQL-запросов, хранимых процедур и функций". А говорить просто: "сейчас медленно - хочу быстро. И мне все-равно как. Выделить деньги на доп. железо можем/не можем".


Да мне всё равно, главное, чтоб на программиста (то есть меня) деньги выделяли:)
23 май 12, 13:27    [12600710]     Ответить | Цитировать Сообщить модератору
 Re: Что есть "умение оптимизировать запросы"  [new]
Ivan Durak
Member

Откуда: Minsk!!!
Сообщений: 3752
Mind
Shakill
пропущено...


это вы про какое управление сейчас? вообще в планах есть признаки использования tempdb
Начиная с версии 2012 признаки в плане есть, но я сомневаюсь, что все уже на неё перешли.

Круть!! И можно узнать сколько в темпдб Хэш джоин или сортировка отожрет???
23 май 12, 13:44    [12600901]     Ответить | Цитировать Сообщить модератору
 Re: Что есть "умение оптимизировать запросы"  [new]
Ivan Durak
Member

Откуда: Minsk!!!
Сообщений: 3752
опять же уровни изоляции и тип версионности сильно на первоманс влияют. Как их в плане увидеть.....
23 май 12, 13:45    [12600914]     Ответить | Цитировать Сообщить модератору
 Re: Что есть "умение оптимизировать запросы"  [new]
Мистер Хенки
Member

Откуда: канализация
Сообщений: 6615
Ivan Durak
Mind
пропущено...
Начиная с версии 2012 признаки в плане есть, но я сомневаюсь, что все уже на неё перешли.

Круть!! И можно узнать сколько в темпдб Хэш джоин или сортировка отожрет???

тут ишел разговор об управлении загрузкой tempdb и потому интересно знать на примере соединения хешированием как это сделать?
23 май 12, 14:08    [12601160]     Ответить | Цитировать Сообщить модератору
 Re: Что есть "умение оптимизировать запросы"  [new]
kain111
Member

Откуда:
Сообщений: 227
имхо. под умением оптимизировать запросы, понимается умение читать план выполнения запроса.
И как более конкретная задача, если запрос написан "до", умение разобраться в нем, понять к каким табличкам он и с какой логикой соединения обращается и по возможности сократить время выполнения, за счет замены к примеру использования более выгодных индексов, исключения вложенных запросов( которые копят tempdb) и тд. В плане четко описаны характеристики того или иного процесса.
Создание индексов я считаю уже задача не программиста и должна решаться в сотрудничестве с DBA( программист в рамках свой узкой задачи может не знать другие обращения к этой табличке) и уж тем более конфигурирование файловых групп.

зы вложенные вопросы это типа
select * from sales where distr in (select distr from sales where date between date1 and date2)
т.е. все продажи дистров за все время у которых были продажи за определенный период.
23 май 12, 14:27    [12601377]     Ответить | Цитировать Сообщить модератору
 Re: Что есть "умение оптимизировать запросы"  [new]
defragmentator
Member

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

а если DBA нет, чего делать?
23 май 12, 14:46    [12601656]     Ответить | Цитировать Сообщить модератору
 Re: Что есть "умение оптимизировать запросы"  [new]
Мистер Хенки
Member

Откуда: канализация
Сообщений: 6615
kain111
...и по возможности сократить время выполнения, за счет замены к примеру использования более выгодных индексов, исключения вложенных запросов( которые копят tempdb) и тд...
зы вложенные вопросы это типа
select * from sales where distr in (select distr from sales where date between date1 and date2)
т.е. все продажи дистров за все время у которых были продажи за определенный период.

И что вы так плохо к вложенным запросам относитесь. Если заджоинить sales с sales c фильтром на date between date1 and date2 тот же самый план получится. Другое дело если будет большое количество записей обрабатываться может получится план с hash или merge join когда задействуется tempdb
23 май 12, 15:08    [12601976]     Ответить | Цитировать Сообщить модератору
 Re: Что есть "умение оптимизировать запросы"  [new]
kain111
Member

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

думаю проблема понятна, человек ,разрабатывая программу, знал какие запросы к таблице будут наиболее требовательны\часты и составил наилучшие для их работы индексы, а тут появляется умник и возможно, не видя всех модулей, программы меняет их.
Спросить у членов команды разработчиков, ну или поискать упоминание наименования таблички в коде и изучить его.
23 май 12, 15:13    [12602042]     Ответить | Цитировать Сообщить модератору
 Re: Что есть "умение оптимизировать запросы"  [new]
kain111
Member

Откуда:
Сообщений: 227
Мистер Хенки,

Соглашусь. я не до конца раскрыл тему tempdb.
23 май 12, 15:15    [12602064]     Ответить | Цитировать Сообщить модератору
 Re: Что есть "умение оптимизировать запросы"  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6724
SamMan
aleks2
Сделать так, шоб быстро работало.
Ну тогда нет вопросов (в смысле понятно что нужно).
Ну а может быть например и другое. При грамотном построении системы стараются делать "простые" по пониманию и наглядности запроса с минимальными признаками наличия костылей или иных "замудренных" формализациий задачи на языке SQL.

Если чел тупо вывернул задачу "на изнанку" и зашил в запросе план. То "кандидат не проходит" ибо нуно было понять в чём системная ошибка структуры БД и предложить изменения в рамках всех задач системы. Или показать ошибку в неправильном написании запроса к первоначальной бизнес задаче. Т.е. минимально изменить в первую очередь сам запрос (хотя это и не точно).

Хороший ракурс на изъяны стратегии.
23 май 12, 17:33    [12603402]     Ответить | Цитировать Сообщить модератору
 Re: Что есть "умение оптимизировать запросы"  [new]
Ivan Durak
Member

Откуда: Minsk!!!
Сообщений: 3752
Мистер Хенки
Ivan Durak
пропущено...

Круть!! И можно узнать сколько в темпдб Хэш джоин или сортировка отожрет???

тут ишел разговор об управлении загрузкой tempdb и потому интересно знать на примере соединения хешированием как это сделать?

если совсем просто - луп джоин темпдб не использует, хэш джоин активно использует большие объемы памяти которые бывает сваливаются и в темпдб. По-моему это не новость
23 май 12, 19:28    [12604031]     Ответить | Цитировать Сообщить модератору
 Re: Что есть "умение оптимизировать запросы"  [new]
SamMan
Member

Откуда: Moscow
Сообщений: 759
Ivan Durak
хэш джоин активно использует большие объемы памяти которые бывает сваливаются и в темпдб


Чуть поправлю - МОЖЕТ использовать большие объемы памяти и темпДБ. Но не обязано это делать для абсолютно любого запроса. Так что Хэш-соединение <> безоговорочная доп. нагрузка на tempdb, хотя вероятность этого (равенства обоих терминов) достаточно высока для средне-типичной реальной БД. Так что, опять же, если можно закупить терабайт RAM - может и так сойдет, ничего оптимизировать не надо.
23 май 12, 19:52    [12604146]     Ответить | Цитировать Сообщить модератору
 Re: Что есть "умение оптимизировать запросы"  [new]
Mind
Member

Откуда: Лучший город на Земле
Сообщений: 2322
Shakill
Mind
пропущено...
Начиная с версии 2012 признаки в плане есть, но я сомневаюсь, что все уже на неё перешли.


2012? а наличие в плане table spool, например, не есть признак использования tempdb?
Если есть, скажем, 10 различных механизмов которые используют tempdb, и table spool только один из них, вы действительно думаете что этого будет достаточно чтобы увидеть всю картину использования tempdb?
Даже то, что добавили в 2012, покрывает всего лишь одну проблему, но этого по сути недостаточно.
23 май 12, 20:59    [12604441]     Ответить | Цитировать Сообщить модератору
 Re: Что есть "умение оптимизировать запросы"  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
kain111
за счет замены к примеру использования более выгодных индексов
Это хинты типа WITH (INDEX=IndexName) что ли?
Это признак "умения оптимизировать запросы"?

По теме отмечу способность ставить и интерпретировать эксперименты (например, с запросами).
Вообще, это качество имеет намного более широкое применение в жизни. Очень это ценю.
23 май 12, 21:30    [12604559]     Ответить | Цитировать Сообщить модератору
 Re: Что есть "умение оптимизировать запросы"  [new]
Mind
Member

Откуда: Лучший город на Земле
Сообщений: 2322
Ivan Durak
Мистер Хенки
пропущено...

тут ишел разговор об управлении загрузкой tempdb и потому интересно знать на примере соединения хешированием как это сделать?

если совсем просто - луп джоин темпдб не использует, хэш джоин активно использует большие объемы памяти которые бывает сваливаются и в темпдб. По-моему это не новость
Насколько я знаю, в 2012 в планах можно увидеть только предупреждение о сваливании в tempdb, никаких цифр он не покажет. И план обязательно должен быть актуальный, а не предварительный.
Узнать заранее сколько именно в мегабайтах сожрет хэш или сортировка невозможно по определению ибо зависит это от того насколько реальные значения разойдутся с оценочными, причем не только по количеству строк, но и по размеру каждой строки.
Есть специальные трейс события (Hash/Sort warnings), а еще есть XEvents, но практического применения все это не имеет, это просто счетчик, типа 20 раз за последние 5 минут, и при этом ни черта не говорит о том насколько интенсивно использовалась tempdb. 

Единственный способ оценить хэш/сорт нагрузку на tempdb, это анализировать использование tempdb в момент выполнения запроса.
Для этой цели я использую скрипт, который каждые 30 секунд проверяет (internal_objects_alloc_page_count - internal_objects_dealloc_page_count) из sys.dm_db_task_space_usage, и если что-то находит то вытаскивает дополнительную инфу из 
sys.dm_exec_requests
sys.dm_exec_query_memory_grants
sys.dm_exec_sql_text
sys.dm_exec_text_query_plan
sys.dm_exec_sessions
и потом сохраняет все это в лог. После чего можно посмотреть историю использования tempdb по каждому запросу отдельно и, зная id сессии и время начала выполнения запроса можно объединить логи с дефолтным трейсом сервера (через fn_trace_gettable) и таким образом выяснить какие именно операции произошли (хэш/сорт) и в случае если это хэш, то еще и узнать Id нода из плана, а так как план тоже сохранен, то найти какой конкретно элемент в плане использует "слив" в tempdb (для 2012 это не столь интересно, элемент будет явно укзан прямо в плане)

Само собой, все это валидно для больших долгоиграющих запросов, свойственных OLAP базам. Наличие же больших Hash/Sort в транзакционных системах обычно свидетельствует о плохой оптимизации и/или плохом дизайне.
23 май 12, 22:30    [12604743]     Ответить | Цитировать Сообщить модератору
 Re: Что есть "умение оптимизировать запросы"  [new]
Mind
Member

Откуда: Лучший город на Земле
Сообщений: 2322
Кстати еще одно интересное наблюдение. В случае использования tempdb для хэш, ожидания вызванные интенсивной работой с дисковой подсистемой никак не отражаются в wait_stats. А как раз эти техники на основе ожиданий так любят рекомендовать для поиска узких мест в системе, а также используют некоторые тулзы типа Idera.
На самом же деле в момент нагрузки на tempdb в wait_type или last_wait_type можно увидеть только невразумительное CX_PACKET или SOS_SCHEDULER_YIELD, что делает этот показатель бессмысленным, если не сказать вредным.
24 май 12, 00:17    [12605011]     Ответить | Цитировать Сообщить модератору
 Re: Что есть "умение оптимизировать запросы"  [new]
kain111
Member

Откуда:
Сообщений: 227
iap
kain111
за счет замены к примеру использования более выгодных индексов
Это хинты типа WITH (INDEX=IndexName) что ли?
Это признак "умения оптимизировать запросы"?

Имеется ввиду понимание работы индексов и их наивыгоднейшее использование. К примеру даны пара таблиц и запрос, программист должен составить для этого запроса индекс с наименьшим количеством операций чтения.
24 май 12, 09:24    [12605629]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: Ctrl  назад   1 2 [3] 4   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить