Автоматизация учета

SQL сервер: Сбор и анализ статистики по выполняемым процедурам на продуктивном сервере

С ростом баз данных вопросы производительности рано или поздно возникают, тем более, что разработчики, зачастую, уделяют недостаточное внимание вопросам производительности, откладывая оптимизацию на потом. Кроме этого, во время разработки архитектуры базы, зачастую, неизвестно какие именно поля лучше проиндексировать.

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

Перед нами стоит задача выявить «тяжелые» или часто используемые запросы в продуктивной среде,  проанализировать данные и выявить способ оптимизации.

По мотивам Finding the Causes of Poor Performance in SQL Server, Part 1 https://www.simple-talk.com/sql/performance/finding-the-causes-of-poor-performance-in-sql-server,-part-1/

Получение данных трассировки

С этой целью мы могли бы воспользоваться SQL Server Profiler, однако в условиях продуктивной среды его использование не рекомендуется 

Мы будем использовать трассировку на стороне сервера (server-side trace)

Создание скрипта трассировки

Для создания скрипта трассировки мы можем воспользоваться SQL server Profiler на тестовом сервере

Можно установить фильтр по базе данных.

После того как мы запустили и остановили трассировку, можно сгенерировать скрипт трассировки

После его открытия в SQL query мы получим сгенерированный скрипт:

/****************************************************/

/****************************************************/
/* Created by: SQL Server 2012  Profiler          */
/* Date: 22/09/2014  09:40:38         */
/****************************************************/


-- Create a Queue
declare @rc int
declare @TraceID int
declare @maxfilesize bigint
set @maxfilesize = 5 

-- Please replace the text InsertFileNameHere, with an appropriate
-- filename prefixed by a path, e.g., c:MyFolderMyTrace. The .trc extension
-- will be appended to the filename automatically. If you are writing from
-- remote server to local drive, please use UNC path and make sure server has
-- write access to your network share

exec @rc = sp_trace_create @TraceID output, 0, N'InsertFileNameHere', @maxfilesize, NULL 
if (@rc != 0) goto error

-- Client side File and Table cannot be scripted

-- Set the events
declare @on bit
set @on = 1
exec sp_trace_setevent @TraceID, 146, 1, @on
exec sp_trace_setevent @TraceID, 146, 3, @on
exec sp_trace_setevent @TraceID, 146, 12, @on
exec sp_trace_setevent @TraceID, 146, 14, @on
exec sp_trace_setevent @TraceID, 146, 51, @on
exec sp_trace_setevent @TraceID, 10, 1, @on
exec sp_trace_setevent @TraceID, 10, 3, @on
exec sp_trace_setevent @TraceID, 10, 12, @on
exec sp_trace_setevent @TraceID, 10, 13, @on
exec sp_trace_setevent @TraceID, 10, 14, @on
exec sp_trace_setevent @TraceID, 10, 16, @on
exec sp_trace_setevent @TraceID, 10, 17, @on
exec sp_trace_setevent @TraceID, 10, 18, @on
exec sp_trace_setevent @TraceID, 10, 48, @on
exec sp_trace_setevent @TraceID, 10, 51, @on
exec sp_trace_setevent @TraceID, 12, 1, @on
exec sp_trace_setevent @TraceID, 12, 3, @on
exec sp_trace_setevent @TraceID, 12, 12, @on
exec sp_trace_setevent @TraceID, 12, 13, @on
exec sp_trace_setevent @TraceID, 12, 14, @on
exec sp_trace_setevent @TraceID, 12, 16, @on
exec sp_trace_setevent @TraceID, 12, 17, @on
exec sp_trace_setevent @TraceID, 12, 18, @on
exec sp_trace_setevent @TraceID, 12, 48, @on
exec sp_trace_setevent @TraceID, 12, 51, @on


-- Set the Filters
declare @intfilter int
declare @bigintfilter bigint

set @intfilter = 6
exec sp_trace_setfilter @TraceID, 3, 0, 0, @intfilter

set @bigintfilter = 1000
exec sp_trace_setfilter @TraceID, 13, 0, 4, @bigintfilter

-- Set the trace status to start
exec sp_trace_setstatus @TraceID, 1

-- display trace id for future references
select TraceID=@TraceID
goto finish

error: 
select ErrorCode=@rc

finish: 
go

Перед запуском его необходимо доработать. Добавим:

--указываем путь и имя файла
SET @OutputFileName = 'E:MSSQL_Trace' +
    CONVERT(VARCHAR(20), GETDATE(),112) +
    REPLACE(CONVERT(VARCHAR(20), GETDATE(),108),':','')

--время окончания через 30 мин
SET @EndTime = DATEADD(mi,30,getdate())

SELECT *
FROM   sys.traces;

Окончательная версия скрипта:

-- Create a Queue
declare @rc int
declare @TraceID int
declare @maxfilesize bigint

DECLARE @OutputFileName NVARCHAR(256) 
DECLARE @EndTime DATETIME

set @maxfilesize = 100

--указываем путь и имя файла
SET @OutputFileName = 'E:MSSQL_Trace' +
    CONVERT(VARCHAR(20), GETDATE(),112) +
    REPLACE(CONVERT(VARCHAR(20), GETDATE(),108),':','')

--время окончания через 30 мин
SET @EndTime = DATEADD(mi,30,getdate())

--трассировка прекратится при наступлении времени окончания
exec @rc = sp_trace_create @TraceID output, 0, @OutputFileName, @MaxFileSize, @EndTime

-- Set the events
declare @on bit
set @on = 1
exec sp_trace_setevent @TraceID, 146, 1, @on
exec sp_trace_setevent @TraceID, 146, 3, @on
exec sp_trace_setevent @TraceID, 146, 12, @on
exec sp_trace_setevent @TraceID, 146, 14, @on
exec sp_trace_setevent @TraceID, 146, 51, @on
exec sp_trace_setevent @TraceID, 10, 1, @on
exec sp_trace_setevent @TraceID, 10, 3, @on
exec sp_trace_setevent @TraceID, 10, 12, @on
exec sp_trace_setevent @TraceID, 10, 13, @on
exec sp_trace_setevent @TraceID, 10, 14, @on
exec sp_trace_setevent @TraceID, 10, 16, @on
exec sp_trace_setevent @TraceID, 10, 17, @on
exec sp_trace_setevent @TraceID, 10, 18, @on
exec sp_trace_setevent @TraceID, 10, 48, @on
exec sp_trace_setevent @TraceID, 10, 51, @on
exec sp_trace_setevent @TraceID, 12, 1, @on
exec sp_trace_setevent @TraceID, 12, 3, @on
exec sp_trace_setevent @TraceID, 12, 12, @on
exec sp_trace_setevent @TraceID, 12, 13, @on
exec sp_trace_setevent @TraceID, 12, 14, @on
exec sp_trace_setevent @TraceID, 12, 16, @on
exec sp_trace_setevent @TraceID, 12, 17, @on
exec sp_trace_setevent @TraceID, 12, 18, @on
exec sp_trace_setevent @TraceID, 12, 48, @on
exec sp_trace_setevent @TraceID, 12, 51, @on


-- Set the Filters
declare @intfilter int
declare @bigintfilter bigint

set @intfilter = 6
exec sp_trace_setfilter @TraceID, 3, 0, 0, @intfilter

set @bigintfilter = 1
exec sp_trace_setfilter @TraceID, 13, 0, 4, @bigintfilter

-- Set the trace status to start
exec sp_trace_setstatus @TraceID, 1


SELECT *
FROM   sys.traces;

Осталось запустить трассировку в пик нагрузки и подождать полчаса.

Расшифровка трассировки

Поместим данные расшифровки в таблицу SQL. Я использую отдельную вспомогательную базу.

USE [ExchangeDB]

CREATE TABLE TraceResults (
 EventClass VARCHAR(100),
 TextData VARCHAR(4000),
 PlanXML XML,
 Duration INT,
 RowCounts INT,
 Reads INT,
 Writes INT,
 CPU INT,
 StartTime DATETIME,
 ProcedureName VARCHAR(100),
 EventSequence INT
)
GO

DECLARE @FileName NVARCHAR(256) 
SET @FileName = 'E:MSSQL_Trace20140922101559.trc'
 
INSERT INTO TraceResults
	(EventClass, TextData, Duration, Reads, RowCounts, Writes, CPU, StartTime, EventSequence)
SELECT EventClass, Convert(VARCHAR(4000),TextData) as TextData, 
	Duration, RowCounts, Reads, Writes, CPU, StartTime, EventSequence
FROM fn_trace_gettable(@FileName,1)
WHERE EventClass 146

UPDATE TraceResults
	SET ProcedureName =
	Convert(VARCHAR(100),TextData)
WHERE ProcedureName is NULL

INSERT INTO TraceResults
	(EventClass, PlanXML, EventSequence)
SELECT EventClass, 
	Convert(XML,TextData) as PlanXML,
	EventSequence
FROM fn_trace_gettable(@FileName,1)
WHERE EventClass = 146

Теперь осталось сформировать несколько запросов к нашей таблице для анализа результатов трассировки. Простые запросы приводить не буду, покажу лишь два примера. Первый отбирает запросы по длительности в порядке убывания:

SELECT        
	 TR1.EventSequence
	,TR2.EventSequence
	,TR1.TextData
	,TR2.PlanXML
	,TR1.Duration AS Duration
	,TR1.Reads
	,TR1.Writes
	,TR1.CPU
	,TR1.StartTime
FROM  dbo.TraceResults AS TR1 
     LEFT OUTER JOIN
        dbo.TraceResults AS TR2 
		ON TR1.EventSequence-1 = TR2.EventSequence

WHERE (TR1.TextData IS NOT NULL 
      AND TR2.PlanXML IS NOT NULL)

ORDER BY Duration Desc

Второй группирует по полю ProcedureName и суммирует данные по показателям

USE [ExchangeDB]


SELECT
	 TR1.EventSequence
	,TR2.EventSequence 
	,TR1.ProcedureName
	,TR2.PlanXML 
	,TR1.DurationTot
	,TR1.RowCountsTot
	,TR1.ReadsTot
	,TR1.WritesTot
	,TR1.CPUTot
FROM
(   SELECT 
	   ProcedureName 
	  ,MAX(EventSequence) AS EventSequence
         ,SUM(Duration) as DurationTot
         ,SUM(Reads) as ReadsTot
	  ,SUM(RowCounts) as RowCountsTot
         ,SUM(Writes) as WritesTot
         ,SUM(CPU) as CPUTot
   FROM TraceResults 
   GROUP BY ProcedureName) TR1
LEFT OUTER JOIN
			dbo.TraceResults AS TR2 
			ON TR1.EventSequence-1 = TR2.EventSequence
WHERE (TR1.ProcedureName IS NOT NULL 
      AND TR2.PlanXML IS NOT NULL)

ORDER BY DurationTot DESC

В нашем случае, по итогам двух запросов, лидирует вставка во временную таблицу #tt14 PlanXML из первой строчки:

В итоге мы имеем данные, с которыми можно дальше работать. В частности, на рисунке выше предлагается добавить индексы.

Начать дискуссию

Маркетплейс Ozon получил предупреждение от ФАС

Предприниматели пожаловались в ФАС на неопределенные условия в договорах с маркетплейсом Ozon, а также на навязчивые предложения поучаствовать в акции «Баллы за скидки».

Курсы повышения
квалификации

20
Официальное удостоверение с занесением в госреестр Рособрнадзора

Требования к комплектации укладок, наборов, комплектов и аптечек для оказания первой помощи на 2024 год

Предлагаем ознакомиться со всеми актуальными приказами Минздрава на 2024 год, которые содержат требования к комплектации укладок наборов комплектов и аптечек для оказания первой помощи.

Иллюстрация: freepik/freepik
НДФЛ

Налоговики сложат зарплату и доход от брокеров и доначислят НДФЛ 15%

За 2023 год налоговые агенты отдельно считают НДФЛ по каждой налоговой базе, а ФНС потом все суммирует и пересчитывает налог с дохода свыше 5 млн рублей.

Лучшие спикеры, новый каждый день

Спрос на акции «МТС банка» в 15 раз превысил объем выпуска

Размещение акций «МТС банка» на Мосбирже стало рекордным по числу заявок от инвесторов.

Перевод на удаленку: не все так просто

Согласно статье 312.1 Трудового Кодекса РФ, удалённо может работать любой сотрудник организации, в том числе занимающие руководящие должности и генеральный директор. Но для этого должно быть достаточно оснований, а также технических возможностей, чтобы обеспечить дистанционную работу сотрудника.

В ОАЭ завершился международный бизнес-форум «Мир возможностей»

Участники форума нашли точки соприкосновения для дальнейшего сотрудничества России и ОАЭ в медицине, образовании, спорте, торговле и деятельности по развитию искусственного интеллекта.

Опытом делятся эксперты-практики, без воды

Командировка на майские праздники: оплачиваем правильно

Командировка работника может выпасть на майские праздники или «захватить» несколько выходных дней. Оплачивать такие дни нужно по особым правилам.

Иллюстрация: Coworking Bansko/pexels

Учет офисных расходов при УСН

Офис — это не только место, в котором трудятся сотрудники. Это еще и дополнительные обязательные расходы, которые несет регулярно компания. Причем таких затрат бывает куда больше, чем может показаться на первый взгляд. В статье разъяснено, какие расходы на содержание офиса может понести налогоплательщик, если он находится на упрощенной системе налогообложения (УСН). Также прописано, как при данной системе учитывать подобные затраты.

Иллюстрация: Вера Ревина/Клерк.ру

Акция 3+1 только до конца мая!

Оформи рекламную кампанию на 3 месяца и получи дополнительный месяц гарантированных лидов в подарок!

Акция 3+1 только до конца мая!
Создать объявление

Какая сумма предельной базы для начисления взносов в 2024 году

Корректировка предельной базы для исчисления страховых взносов осуществляется ежегодно. 2024 год исключением не стал. В ее размер вновь были внесены изменения. Чтобы не столкнуться со сложностями, необходимо знать размер установленного лимита, а также правила, в соответствии с которыми происходит исчисление размера взносов. Расскажем, про сумму предельной базы для начисления взносов в 2024 году.

Иллюстрация: Вера Ревина/Клерк.ру

💥 Путин анонсировал второй масштабный этап расчистки нормативной базы

Президент поручил правительству улучшить законодательство и контрольно-надзорную деятельность с помощью механизма регуляторной гильотины.

Бесплатно с Фиксированные взносы ИП

Как теперь уменьшать налог по УСН на взносы ИП: разъяснения ФНС с примером

Временные прошлогодние правила по взносам 1% стали постоянными.

Как теперь уменьшать налог по УСН на взносы ИП: разъяснения ФНС с примером
7
Миникурсы, текстовые и видеоинструкции для бухгалтеров

При оплатах через СБП продавец должен применять ККТ: можно ли удаленно

Если клиент платит через систему быстрых платежей, то нужно применить ККТ. Но иногда эта ККТ может быть удаленная, иногда – находиться по месту расчетов.

К вопросу об оформлении договоров. Как нагляднее и удобнее оформлять введение и реквизиты

Данная статья посвящена оформлению договоров. Советы от нашей компании.

1
3-НДФЛ

Не делайте этих ошибок при заполнении 3-НДФЛ

До 2 мая включительно физлица должны сдать 3-НДФЛ за 2023 год, если в прошлом году была продажа имущества, получение недвижимости в дар не от близких родственников и т. д.

Центробанк сохранил ключевую ставку 16%

Банк России не будет снижать ключевую ставку до тех пор, пока не будет достигнута цель по инфляции вблизи 4%.

ВЭД

Президент поддержал создание координационного центра для работы российского бизнеса на новых рынках

Сейчас все министерства работают с новыми рынками, все крупные компании работают с новыми рынками, но это все происходит в рамках каждого из направлений, за которое отвечает то или иное ведомство или компания.

ФНС банкротит компанию, которая развивает сеть магазинов «Ноу-хау»

Московские налоговики хотят признать несостоятельной компанию «Мобиленд», связанную с магазинами электроники «Ноу-хау».

В госзакупках будут работать офсетные контракты

Чтобы IT-компании больше средств вкладывали в инновационные технологии, в законодательство о госзакупках добавят офсетные контракты.

Интересные материалы

Как ИП уменьшить налог по УСН за 1 квартал на взносы 1% за 2024 год, если уведомление уже сдано

Не все ИП оперативно среагировали на новые разъяснения ФНС про уменьшение налога по УСН на взносы 1% за 2024 год. Кто-то не учел новые правила и переплатил налог, кто-то еще не уплатил, но уведомление уже сдал. Уведомление можно пересдать, переплату вернуть.

Иллюстрация: Вера Ревина/Клерк.ру