Как получить статистическую информацию о вводе-выводе (логическое чтение) для хранимой процедуры, которая использует скалярные функции? - PullRequest
0 голосов
/ 11 июля 2020

Я устраняю проблемы производительности для хранимых процедур (которые я не писал). Хранимая процедура включает несколько вызовов скалярных функций в предложениях Select, Join, Where и Order By.

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

Есть ли какие-то стратегии для преодоления этого и получения ВСЕГО логических чтений хранимой процедуры, включая функция вызывает?

EDIT - используя SQL Server 2017

1 Ответ

0 голосов
/ 11 июля 2020

Статистика ввода-вывода уже включает в себя общее количество логических чтений хранимой процедуры с функциями внутри. Поместите функцию в JOIN, в WHERE, в ORDER BY, это может вызвать проблемы с производительностью, потому что в предыдущих версиях SQL Server оценка мощности функции была 1 (до SQL 2012) и 100 (после SQL 2012 и раньше из SQL 2017), и движок может сгенерировать плохой план выполнения. В SQL 2017 Microsoft представила функцию, называемую чередованным выполнением, для получения более точной оценки, но есть еще кое-что, что нужно улучшить.

Я советую вам удалить функции и попытаться поместить операторы внутри хранимых процедур , используя CTE, временные таблицы, промежуточные этапы расчета, e cc .. если вам нужно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...