Як я читаю вартість запиту і чи завжди це відсоток?


34

Зараз я навчаюсь на SQL 70-433 (іспит з сертифікації Microsoft), і мене дуже бентежить показник ефективності "вартість запиту".

Згідно з будь-якою документацією, яку я міг знайти за допомогою Google, вартість запиту - це відсотковий показник і становить відсоток від усієї партії, яку займає будь-яка її частина. Це вже здавалося мені трохи дивним, тому що мене цікавить абсолютна заслуга конкретного запиту, а не його заслуга щодо інших запитів, які трапляються поряд із ним.

Але тоді я подумав: ну, можливо, те, що ти очікуєш зробити, - це розмістити два альтернативних запити поруч, запустити їх як "партію", а потім той, хто має вартість менше 50%, є переможцем.

Але обговорення вартості запиту в 6-му розділі, уроці першого навчального набору SQL 70-433 Microsoft, схоже, не має до цього ніякого відношення.

Ось приклад: Вони показують запит, що містить два співвіднесених підзапиту, а потім покращують його, замінюючи підзапити на зовнішній додаток. Результат: "Цей запит коштує приблизно 76, тоді як вартість першого запиту була вдвічі більшою, приблизно, 151." Потім вони ще більше покращують запит і знижують вартість з 76 до 3,6. Вони не означають, що ці цифри є відсотками, тоді як вони означають, що вони є абсолютними цифрами, які відносяться до запиту як до окремого об'єкта, без посилання на будь-які інші запити. І як би там не було, як перший запит мав би вартість 151%?

Пізніше в цьому розділі вони показують скріншот плану виконання, який має три частини. Перший каже "Вартість: 0%", другий говорить "Вартість: 1%", а останній говорить "Вартість: 99%", але текст (самої книги) нижче скріншота "Вартість цього запиту 0,56" . Я здогадуюсь, що вони означають якусь іншу вартість, але я не можу знайти посилання на неї в іншому місці.

Може хтось допоможе? Я ретельно розгублений.


PS Припускаючи, що вони посилаються на щось інше, ніж відсотки, показані в планах виконання ... як я можу отримати SSMS, щоб показати мені цифри, які вони цитують? Чи потрібно мені щось на кшталт SET STATISTICS TIME ON, але з якоюсь іншою командою, яка покаже мені цифру "вартість" на вкладці Повідомлення?

Відповіді:


43

Про вартість запиту повідомляється у планах виконання як "кошторисна вартість піддіаграму". Це абсолютна цифра на кшталт 1.5. У презентації SQLBits Конор Каннінгем згадував, що спочатку він посилався на кількість секунд, необхідних для виконання на машині конкретного працівника Майкрософт ( " машина Ніка" ) на SQL Server 7 днів

введіть тут опис зображення

але зараз слід трактувати як безроздільну міру загальної вартості.

План виконання - дерево. Кожному ітератору в дереві надається орієнтовна вартість процесора та орієнтовна вартість вводу-виводу, і вони додаються разом, щоб отримати загальну вартість (відносні ваги можна відрегулювати за допомогою декількох недокументованих команд DBCC ). Орієнтовна вартість піддерева включає вартість самого ітератора та всіх його нащадків. Щоб побачити приклад використовуваних формул калькуляції, ви можете подивитися в цій статті .

Щоб визначити орієнтовну вартість цілого запиту в SSMS, виберіть кореневий ітератор (наприклад, SELECTітератор) зліва від графічного плану та подивіться на цей показник у вікні властивостей SSMS.

При запуску декількох запитів (в одній партії чи ні) відсоток обчислюється шляхом додавання всіх цих значень та обчислення відсотка, як ви очікували.

Вам слід пам’ятати, що навіть у фактичних планах виконання цей показник вартості базується на кошторисах, і використовуючи це для порівняння відносних достоїнств двох різних запитів, може бути жахливо помилковим у випадках, коли оцінки неточні.


Дякую, це справді корисно. І зовсім не очевидно! Цікаво, чому ця цифра не позначена чіткіше?

4
Я завжди цікавився одиниці виміру, радий нарешті дізнатися. Я пояснював це людям (комічно), що це "долари SQL". Якщо вартість запиту становить 1,0, це як платити 1 долар за чашку кави. Непогана ціна. Ви б заплатили 300 доларів за чашку? У жодному разі!
datagod
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.