SQL Server: как получить метрики производительности программно;конкретно логическое чтение - PullRequest
0 голосов
/ 05 июня 2018

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

Испытание проводов: Я создал диагностическую хранимую процедуру, которая запускает хранимую процедуру с различными настройками параметров и сохраняет результаты вТаблица.Здесь записываются выходные данные и набор параметров, использованный для его генерации.

Чего мне не хватает: Я хочу получить метрики производительности программно.Я не хочу запускать каждый тест, а затем записывать их.У меня есть двадцать с лишним нечетных наборов параметров и растет.И я также сравниваю разные версии сохраненного процесса.

То, что я думаю, я хочу: «Установить статистику IO ON» дает мне то, что я ищу, но информация показываетвверх на вкладке «сообщения». Есть ли способ вернуть эту информацию, чтобы мой сохраненный процесс мог поместить эти значения в мою таблицу результатов?

Это пример запросов, созданных для проверки моего сохраненного процесса.Этот пример кода генерируется более 60 раз (один раз для набора параметров в тестовом процессе).Эта конкретная итерация проверяет хранимый процесс ORIGINAL с набором параметров № 11.

DECLARE @LSBA_table table (ViewStatementBalanceAllUid uniqueidentifier, AccountResponsiblePartyUid uniqueidentifier, FinancialCenterUid uniqueidentifier, FinancialCenterName varchar(255), Balance money, CycleTrigger BIT, LastStatementDate Date, AccountResponsiblePartyFullName varchar(255), LastName varchar(255), ExternalID varchar(25), PayerCreditBalance Money, StatementsByFinancialCenter bit, SendStatement bit);
INSERT INTO @LSBA_table EXEC LoadStatementBalanceAll_ORIGINAL  @nameRangeSearch = 'A-Bzzz',  @onDemand = 0, @daysBack=30, @financialCenterUid='7FAEF75C-914F-491F-8FE2-0A747FD84088;8709E580-13BC-4E4B-9325-D8F3AB1B2868', @minBalance=25.00
INSERT INTO CUS_LSBA_RESULTS (StoredProcName, ParameterId,ViewStatementBalanceAllUid,AccountResponsiblePartyUid,FinancialCenterUid,FinancialCenterName,Balance,CycleTrigger,LastStatementDate,AccountResponsiblePartyFullName,LastName,ExternalID,PayerCreditBalance,StatementsByFinancialCenter,SendStatement) (SELECT 'LoadStatementBalanceAll_ORIGINAL', 11, * FROM @LSBA_table)

1 Ответ

0 голосов
/ 05 июня 2018

Вы хотите автоматически сохранить результаты

 set statistic IO on

Нет способа сделать это.Но вы можете получить все результаты, создав трассировку профилировщика, которая может сохранить все, что вы хотите (каждую возможную статистику), от запуска разных версий одного и того же запроса.https://docs.microsoft.com/en-us/sql/tools/sql-server-profiler/sql-server-profiler?view=sql-server-2017

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