Повратната точка е термин, който за първи път чух, използван от гуруто за настройка на производителността на SQL Server и дългогодишния член на консултативния съвет на SentryOne Кимбърли Трип – тя има страхотна серия от блогове за това тук. Точката на преобръщане е прагът, при който планът на заявката ще се „отклони“ от търсене на непокриващ неклъстериран индекс към сканиране на клъстерирания индекс или купчина. Основната формула, която не е твърдо и бързо правило, тъй като има различни други влияещи фактори, е следната:
- Клъстерно сканиране на индекс (или таблица) често се случва, когато прогнозните редове надвишават 33% от броя на страниците в таблицата
- Често се случва неклъстерирано търсене плюс ключово търсене, когато прогнозните редове са под 25% от страниците в таблицата
- Между 25% и 33% може да върви и в двете посоки
Имайте предвид, че има и други „повратни точки“ на оптимизатора, като например при покриване индекс ще препоръча от търсене към сканиране или когато заявката ще върви паралелно, но този, върху който сме фокусирани, е непокриващия неклъстериран индекс сценарий, защото има тенденция да е най-често срещаният – трудно е да се обхване всяка заявка! Освен това е потенциално най-опасно за производителността и когато чуете някой да се позовава на повратната точка на индекса на SQL Server, обикновено това има предвид.
Повратната точка в предишни версии на Plan Explorer
Plan Explorer по-рано показа нетния ефект от критичната точка, когато се използва подслушване на параметри в Индексния анализ раздела, по-специално чрез Прогнозна(имирана) операция ред в Параметри панел:
Прогнозната операция за компилираните и параметрите по време на изпълнение, въз основа на броя на редовете
Ако все още не сте проучили модула за анализ на индексите, препоръчвам ви да го направите. Въпреки че диаграмата на плана и другите функции на Plan Explorer са страхотни, честно казано, анализът на индексите е мястото, където трябва да прекарвате по-голямата част от времето си, когато настройвате заявки и индекси. Вижте тук задълбочения преглед на функциите и сценариите на Арън Бертран и страхотен урок за покриващ индекс от Девън Лиън Уилсън тук.
Зад кулисите, ние правим математиката на повратната точка и прогнозираме операцията на индекса (търсене или сканиране) въз основа на приблизителните редове и броя на страниците в таблицата както за компилираните, така и за параметрите по време на изпълнение, и след това цветово кодираме свързаните клетки, така че можете бързо да видите дали съвпадат. Ако не го направят, както в примера по-горе, това може да е силен индикатор, че имате проблем с подслушването на параметри.
Хистограмата на статистиката диаграмата отразява разпределението на стойностите за водещия ключ на индекса, като се използват колони за равни редове (оранжево) и редове с диапазон (теален цвят). Това са същите стойности, които ще получите от DBCC SHOW_STATISTICS или sys.dm_db_stats_histogram . Частите от дистрибуцията, които са засегнати както от компилираните, така и от параметрите по време на изпълнение, са подчертани, за да ви дадат приблизителна представа колко реда са включени за всеки. Просто изберете или Компилираната стойност или Стойност по време на изпълнение колона, за да видите избрания диапазон:
Хистограмна диаграма, показваща обхвата, засегнат от параметрите по време на изпълнение
Нови контроли и визуални елементи
Горните функции бяха хубави, но от известно време чувствах, че можем да направим повече, за да направим нещата по-ясни. И така, в най-новата версия на Plan Explorer (2020.8.7), в долната част на панела с параметри има някои нови контроли със свързани визуализации на диаграмата на хистограмата:
Нови контроли за визуализации на хистограма
Имайте предвид, че хистограмата, показана по подразбиране, е за индекса, използван от заявката за достъп до избраната таблица, но можете да щракнете върху всяка друга заглавка на индекс или колона на таблицата в мрежата, за да видите друга хистограма.
Обхват на повратната точка
Обхватът на повратната точка квадратчето за отметка превключва светлочервената лента, показана на диаграмата на хистограмата:
Превключване за диапазон на точката на преобръщане
Ако очакваните редове са под този диапазон, оптимизаторът ще предпочита търсене + търсене и над него сканиране на таблица. В рамките на обхвата всеки може да гадае.
Прогнозни (изчислени)/действителни редове
Прогнозни/действителни редове квадратчето за отметка превключва показването на прогнозни редове (от компилираните параметри) и действителните редове (от параметрите по време на изпълнение). Стрелките в диаграмата по-долу илюстрират връзката между тази контрола и свързаните елементи:
Превключване за приблизителни и действителни редове на диаграмата на хистограмата
В този пример е ясно, че оценените редове са под точката на преобръщане, а действително върнатите редове са над нея, което се отразява в разликата между изброените прогнозни и действителни операции (търсене срещу сканиране). Това е класическо подслушване на параметри, илюстрирано!
В една бъдеща публикация ще разгледам как това корелира с това, което виждате в диаграмата на плана и мрежата на изявленията. Междувременно ето файл за сесия на Plan Explorer, който съдържа този пример (смъркане на параметър за търсене за сканиране), както и пример за сканиране за търсене. И двете използват разширената база данни WideWorldImporters.
Редове за диапазон или редове за среден диапазон
Предишните версии на Plan Explorer подреждаха равни редове и редове с диапазон в една колона, за да представят общия брой редове в кофа на хистограма. Това работи добре, когато имате предикат за неравенство или диапазон, както е показано по-горе, но за предикатите за равенство няма много смисъл. Това, което наистина искате да видите, са редовете за среден диапазон, тъй като това е, което оптимизаторът ще използва за оценката. За съжаление нямаше начин да се получи това.
В новата хистограма на Plan Explorer вместо подредена серия от колони сега използваме клъстерирани колони с равни редове и редове с диапазон един до друг, а вие контролирайте дали да се показват редовете за общия или средния диапазон според случая, като използвате Редове за диапазон / Средни редове за диапазон селектор. Повече за това скоро...
Приключване
Наистина се вълнувам от тези нови функции и се надявам да ги намерите полезни. Изпробвайте ги, като изтеглите новия Plan Explorer. Това беше само кратко въведение и с нетърпение очаквам да разгледам някои различни сценарии тук. Както винаги, уведомете ни какво мислите!