Database
 sql >> база данни >  >> RDS >> Database

Рецензия на книгата:Бенджамин Неварез:Настройка и оптимизация на заявки

Моето копие на Microsoft SQL Server 2014 Query Tuning &Optimization (достъпно и на Kindle), от Бенджамин Неварез, пристигна миналата седмица. Не успях да стигна до него веднага, но през уикенда най-накрая успях да го преживея между смяната на пелените и пътуването до зоологическата градина.

TL;DR :Струва си парите

Бенджамин представя задълбочено обяснение на целия процес на оптимизация на заявки и голяма част от фона, от който ще се нуждаете, за да осмислите всичко. Той третира индекси, статистика и кеширане на планове, както и как да се справя с често срещани проблеми като подслушване на параметри. Той обяснява популярни опции като Оптимизиране за Ad Hoc работни натоварвания и принудителна параметризация и как те променят начина, по който плановете се кешират и използват повторно. Той също така обсъжда много недокументирани функции и флагове за проследяване, които могат да ви помогнат да разберете по-добре (или да принудите) подхода на SQL Server към вашата заявка и как да използвате Trace, Extended Events и DBCC команди, за да прегледате решенията, които оптимизаторът е взел, и въздействието им. имах.

Има също така голяма част от съдържание, посветено на много нови функции на SQL Server 2014, включително In-Memory OLTP („Hekaton“), клъстерирани индекси на columnstore, инкрементални статистики и новия оценител на мощността. Докато се пишеше книгата, примерните бази данни на AdventureWorks за SQL Server 2014 все още не бяха публикувани, но вече са налични.

Книгата завършва със сложна, но информативна глава за ограниченията на оптимизатора на заявки, които водят до неоптимални планове, и как да използвате съвети и ръководства за планиране, за да ги заобиколите.

Някои ограничения

Макар че е доста пълна обща препратка към настройката на заявката, имаше няколко неща, които смятах, че може да са по-добри:

  • Бенджамин говори за събирането на информация за ShowPlan от Trace и Extended Events и правилно посочва, че Profiler не е начинът, по който искате да стартирате трасирания, поради ужасяващата и добре документирана производителност. Това е хубаво нещо, тъй като trace е отхвърлено и Profiler е това, което хората обикновено използват по подразбиране. Има незначително предупреждение за режийните разходи на query_post_execution_showplan събитие, на което мисля, че можеше да се обърне малко повече внимание, с напомняния, че това трябва да се използва само за много целенасочена настройка и отстраняване на неизправности. Събирането на това за всяка заявка в работното ви натоварване вероятно ще донесе повече вреда, отколкото полза.
  • Той обсъжда филтрираните индекси и статистически данни, но пренебрегва факта, че те са проблематични, когато става въпрос за автоматични актуализации, тъй като не се използва специален алгоритъм, въпреки че индексът представлява само подмножество от таблицата. Microsoft потвърди, че това е проблем, но към този момент нямат планове да го поправят. За повече информация вижте Connect #509638 и Connect #333532. Вижте също тази публикация в блога за много други ограничения на филтриран индекс, които да вземете предвид.
  • Докато покритието на функциите от 2014 г. беше доста изчерпателно, бях изненадан да не открих никакво споменаване на sys.dm_exec_query_profiles , нов DMV за проследяване на напредъка на заявката в реално време – чак до отделния оператор. Това обаче не е съществена информация за всеки, тъй като не е изключително широк случай на употреба (IMHO наистина е полезен само за особено продължителни заявки).
  • Това е пълна придирка, но е често срещана сред техническите заглавия:индексът е леко неточен. Например препратката към SQL Sentry Plan Explorer сочи към страница 13, но съответното съдържание всъщност е на страница 14. Както казах, много незначителна придирка, просто ми изпъкна, защото това беше първото нещо, което погледнах нагоре в индекса. :-)

Не бих разгледал тези оплаквания сами по себе си. Никоя книга не може да съдържа до последния детайл за всичко. Така че, моля, обмислете ги за допълнения. :-)

Резюме

Това бързо се превърна в удобна справка за мен; кучешките уши вече заменят няколко от моите отметки към публикации в блогове, които случайно споменават някакъв неясен детайл или флаг за проследяване и в много случаи Бенджамин го е описал по-подробно и/или го е поставил в по-добър контекст. Между тази книга и няколко заглавия, посочени по-долу, мисля, че всеки, който е запознат с T-SQL, би могъл да се ускори доста бързо, дори да няма нулеви познания за оптимизатора, преди да се гмурне.

Допълнителни материали

Други книги, които бих препоръчал да допълнят това заглавие:

  • Предоставете настройката на производителността на заявките на SQL Server на Fritchey
  • Експертното индексиране на производителността на Jason Strate за SQL Server 2012
  • Предоставете плановете за изпълнение на SQL Server на Fritchey

И разбира се, има безкрайно количество публикации в блогове и други статии, които да ви помогнат да разберете за настройката и оптимизацията. Донякъде съм пристрастен към материала на Пол Уайт – те са толкова дълбоки, колкото простосмъртните биха искали да отидат, но можете да извлечете много от тях, като просто прегледате. Грант и Гейл Шоу също имат ценно съдържание за заявки и планове за изпълнение, а Кимбърли Трип и Ерин Стелато са страхотни ресурси за всичко, свързано с индекс или статистика.

  • Пол Уайт:SQLPerformance.com | sql.kiwi
  • Грант Фричи (и ресурси)
  • Гейл Шоу
  • Кимбърли Трип
  • Ерин Стелато

Може да откриете известно припокриване, но аз силно вярвам в консумирането на информация от множество източници. Понякога те представят една и съща информация, но крушката щрака въз основа на начина, по който го е казал един човек или контекста, който са дали. Вероятно съм пропуснал и около 50 други хора със страхотен материал.

О, и споменах ли нашия безплатен инструмент, Plan Explorer, също може да помогне с това? Моят актуализиран демо комплект разглежда куп примери.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Свързване на SQuirreL SQL към Microsoft Excel

  2. Предотвратяване на атаки с инжектиране на SQL с Python

  3. SQL език за управление на данни

  4. Удобно за честотната лента профилиране на заявки за Azure SQL база данни

  5. Проблемна група 1 – Идентифициране на обекти