O que é SQL Server Lock e Block?

Picture of Equipe Tripletech

Equipe Tripletech

[et_pb_section fb_built="1" _builder_version="4.9.0" _module_preset="default" global_colors_info="{}"][et_pb_row column_structure="2_5,3_5" _builder_version="4.9.0" _module_preset="default" global_colors_info="{}"][et_pb_column type="2_5" _builder_version="4.9.0" _module_preset="default" global_colors_info="{}"][et_pb_image src="https://tripletech.gulp.digital/wp-content/uploads/2021/08/02-SQL-Server-Lock-e-Block-300×282.jpg" alt="O que é SQL Server Lock e Block" title_text="SQL Server Lock e Block" _builder_version="4.9.0" _module_preset="default" animation_style="slide" global_colors_info="{}"][/et_pb_image][/et_pb_column][et_pb_column type="3_5" _builder_version="4.9.0" _module_preset="default" global_colors_info="{}"][et_pb_text _builder_version="4.9.0" _module_preset="default" hover_enabled="0" global_colors_info="{}" sticky_enabled="0"]

O que é SQL Server Lock e Block?

Por padrão, o SQL Server usa Locking de forma “pessimista” – suas queries são naturalmente protetoras. Isso pode levar a problemas de Blocking que impeçam você de escalonar seu banco de dados SQL Server.

O artigo está separado em: 

  • Contadores de desempenho relacionados a Lock

  • Scripts para usar Blocked Process Report

 

[/et_pb_text][/et_pb_column][/et_pb_row][et_pb_row _builder_version=”4.9.0″ _module_preset=”default” global_colors_info=”{}”][et_pb_column type=”4_4″ _builder_version=”4.9.0″ _module_preset=”default” global_colors_info=”{}”][et_pb_text _builder_version=”4.9.0″ _module_preset=”default” hover_enabled=”0″ global_colors_info=”{}” sticky_enabled=”0″]

Esses são alguns contadores de performance que podem ser muito úteis para configurar alerta no SQL Server. Com base nesses contadores o SQL Server pode notificá-lo quando o bloqueio ultrapassar os limites definidos.

  • SQL Server: General Statistics – Processes Blocked
  • SQL Server: Locks – Lock Wait Time (ms)
  • SQL Server: Locks – Number of Deadlocks/sec

[/et_pb_text][et_pb_image src="https://tripletech.gulp.digital/wp-content/uploads/2021/08/sql-server-count-performance.jpg" alt="contadores de performance do banco sql server" title_text="sql-server-count-performance" _builder_version="4.9.0" _module_preset="default" animation_style="fade" global_colors_info="{}"][/et_pb_image][et_pb_text _builder_version="4.9.11" _module_preset="default" hover_enabled="0" global_colors_info="{}" sticky_enabled="0"]

Script para usar Blocked Process Report

O “Blocked Process Report” existe há muito tempo no SQL Server – e ainda é uma ferramenta útil e usada por consultoria de banco de dados e consultores SQL Server.

Por padrão no SQL Server, o deadlock monitora a cada 5 segundos para verificar se suas queries estão em um “deadly embrace”. Você pode ativar uma opção no SQL Server para verificar o blocking e gerar um relatório.

AVISO: Você só deve ativar o relatório de Blocked Process quando o monitoramento for superior a cinco segundos. A Microsoft avisa que, se você definir de 1 a 4 segundos, poderá fazer com que o monitor de deadlock fique ativo continuamente e prejudique o desempenho do banco de dados.

Para usar o Blocked Process Report, é necessário configurar um trace que procure o evento “Relatório de Processo Bloqueado” em “Erros e Avisos”. Recomendamos usar um server side trace e usá-lo apenas quando for necessário.

[/et_pb_text][/et_pb_column][/et_pb_row][et_pb_row _builder_version="4.9.0" _module_preset="default" global_colors_info="{}"][et_pb_column type="4_4" _builder_version="4.9.0" _module_preset="default" global_colors_info="{}"][et_pb_testimonial portrait_url="https://tripletech.gulp.digital/wp-content/uploads/2016/05/email-Alertas.png" quote_icon="off" _builder_version="4.9.0" _module_preset="default" hover_enabled="0" global_colors_info="{}" sticky_enabled="0"]

Os scripts nesse artigo, são exemplos de como realizar essas tarefas – você deve testar e revisar de acordo com o seu ambiente de banco de dados. Sempre utilize ambiente de teste e/ou homologação e tenha backup de seu ambiente.

Lembre-se, a execução dos scripts é por sua própria conta e risco.

[/et_pb_testimonial][/et_pb_column][/et_pb_row][et_pb_row column_structure=”1_2,1_2″ _builder_version=”4.9.11″ _module_preset=”default” global_colors_info=”{}”][et_pb_column type=”1_2″ _builder_version=”4.9.11″ _module_preset=”default” global_colors_info=”{}”][et_pb_cta title=”Database Care” button_url=”https://tripletech.com.br/database-care.html” button_text=”Saiba mais!” _builder_version=”4.9.11″ _module_preset=”default” background_color=”#cc5b57″ custom_padding=”13px||16px|||” animation_style=”slide” border_radii=”on|30px|30px|30px|30px” box_shadow_style=”preset2″ text_shadow_style=”preset1″ global_colors_info=”{}”]

Seu banco de dados saudável e monitorado por uma equipe especializada em SQL Server e Oracle Database

[/et_pb_cta][/et_pb_column][et_pb_column type=”1_2″ _builder_version=”4.9.11″ _module_preset=”default” global_colors_info=”{}”][et_pb_cta title=”DBA Remoto” button_url=”https://tripletech.com.br/dba-remoto.html” button_text=”Saiba mais!” _builder_version=”4.9.11″ _module_preset=”default” background_color=”#cc5b57″ custom_padding=”13px||16px||false|false” animation_style=”slide” border_radii=”on|30px|30px|30px|30px” box_shadow_style=”preset2″ text_shadow_style=”preset1″ global_colors_info=”{}”]

Seu banco de dados em mãos especializadas. Tenhas as melhorias práticas do mercado aplicadas em seu SQL Server ou Oracle Database

[/et_pb_cta][/et_pb_column][/et_pb_row][et_pb_row use_custom_gutter=”on” gutter_width=”1″ _builder_version=”4.9.0″ _module_preset=”default” custom_margin=”0px||0px||false|false” global_colors_info=”{}”][et_pb_column type=”4_4″ _builder_version=”4.9.0″ _module_preset=”default” global_colors_info=”{}”][et_pb_text _builder_version=”4.9.0″ _module_preset=”default” custom_padding=”13px|||||” global_colors_info=”{}”]

Então, vamos lá!

Etapa 1 : ative Blocked Process Report

 

[/et_pb_text][et_pb_text _builder_version=”4.9.0″ _module_preset=”default” text_font=”Courier Prime||||||||” text_text_color=”#000000″ text_font_size=”10px” text_line_height=”1em” background_color=”#eff0f1″ custom_margin=”0px|||60px|false|false” custom_padding=”6px|10px|6px|10px|true|true” border_width_top=”10px” border_color_top=”#7CDA24″ global_colors_info=”{}”]

–Make sure you don’t have any pending changes

SELECT *

FROM sys.configurations

WHERE value <> value_in_use;

GO

exec sp_configure ‘show advanced options’, 1;

GO

RECONFIGURE

GO

 

exec sp_configure ‘blocked process threshold (s)’, 20;

GO

RECONFIGURE

GO

[/et_pb_text][/et_pb_column][/et_pb_row][et_pb_row use_custom_gutter=”on” gutter_width=”1″ _builder_version=”4.9.0″ _module_preset=”default” custom_margin=”0px||0px||false|false” global_colors_info=”{}”][et_pb_column type=”4_4″ _builder_version=”4.9.0″ _module_preset=”default” global_colors_info=”{}”][et_pb_text _builder_version=”4.9.0″ _module_preset=”default” custom_padding=”7px|||||” hover_enabled=”0″ global_colors_info=”{}” sticky_enabled=”0″]

Etapa 2 : configurar o rastreamento para o relatório de processo bloqueado. Execute-o como  server side trace.

  • Deve conter um evento: Errors and Warnings -> Blocked Process Report.
  • Precisa de apenas duas colunas: Text, spid

Este server side trace será executado por cinco minutos e parará automaticamente. Você deve alterar o caminho para um diretório em que o SQL Server tenha permissão de gravação.

 

[/et_pb_text][et_pb_text _builder_version=”4.9.0″ _module_preset=”default” text_font=”Courier Prime||||||||” text_text_color=”#000000″ text_font_size=”10px” text_line_height=”1em” background_color=”#eff0f1″ custom_margin=”0px|||60px|false|false” custom_padding=”6px|10px|6px|10px|true|true” border_width_top=”10px” border_color_top=”#7CDA24″ global_colors_info=”{}”]

— Create a Queue

declare @rc int

declare @TraceID int

declare @maxfilesize bigint

declare @DateTime datetime

 

———Added a function here:

set @DateTime = DATEADD(mi,5,getdate()); /* Run for five minutes */

set @maxfilesize = 5

 

— Please replace the text InsertFileNameHere, with an appropriate

— filename prefixed by a path, e.g., c:\MyFolder\MyTrace. 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

 

———–Set my filename here:

exec @rc = sp_trace_create @TraceID output, 0, N’S:\Traces\BlockedProcessReportDemo’, @maxfilesize, @Datetime

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, 137, 1, @on

exec sp_trace_setevent @TraceID, 137, 12, @on

 

— Set the Filters

declare @intfilter int

declare @bigintfilter bigint

 

— 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

[/et_pb_text][/et_pb_column][/et_pb_row][et_pb_row use_custom_gutter=”on” gutter_width=”1″ _builder_version=”4.9.0″ _module_preset=”default” custom_margin=”0px||0px||false|false” global_colors_info=”{}”][et_pb_column type=”4_4″ _builder_version=”4.9.0″ _module_preset=”default” global_colors_info=”{}”][et_pb_text _builder_version=”4.9.0″ _module_preset=”default” global_colors_info=”{}”]

Etapa 3 : Olhe os traces em execução e pegue o trace ID:

[/et_pb_text][et_pb_text _builder_version=”4.9.0″ _module_preset=”default” text_font=”Courier Prime||||||||” text_text_color=”#000000″ text_font_size=”10px” text_line_height=”1em” background_color=”#eff0f1″ custom_margin=”0px|||60px|false|false” custom_padding=”6px|10px|6px|10px|true|true” border_width_top=”10px” border_color_top=”#7CDA24″ global_colors_info=”{}”]

SELECT * from sys.traces;

GO

[/et_pb_text][/et_pb_column][/et_pb_row][et_pb_row use_custom_gutter=”on” gutter_width=”1″ _builder_version=”4.9.0″ _module_preset=”default” custom_margin=”0px||0px||false|false” global_colors_info=”{}”][et_pb_column type=”4_4″ _builder_version=”4.9.0″ _module_preset=”default” global_colors_info=”{}”][et_pb_text _builder_version=”4.9.0″ _module_preset=”default” global_colors_info=”{}”]

Pare um rastreamento, se necessário

[/et_pb_text][et_pb_text _builder_version=”4.9.0″ _module_preset=”default” text_font=”Courier Prime||||||||” text_text_color=”#000000″ text_font_size=”10px” text_line_height=”1em” background_color=”#eff0f1″ custom_margin=”0px|||60px|false|false” custom_padding=”6px|10px|6px|10px|true|true” border_width_top=”10px” border_color_top=”#7CDA24″ global_colors_info=”{}”]

–Plug in the correct traceid from the query above

EXEC sp_trace_setstatus @traceid =2, @status = 0; — stop trace (assuming it’s trace ID 2)
GO

EXEC sp_trace_setstatus @traceid =2, @status = 2; — close trace (assuming it’s trace ID 2)
GO

[/et_pb_text][/et_pb_column][/et_pb_row][et_pb_row use_custom_gutter=”on” gutter_width=”1″ _builder_version=”4.9.0″ _module_preset=”default” custom_margin=”0px||0px||false|false” global_colors_info=”{}”][et_pb_column type=”4_4″ _builder_version=”4.9.0″ _module_preset=”default” global_colors_info=”{}”][et_pb_text _builder_version=”4.9.0″ _module_preset=”default” global_colors_info=”{}”]Etapa 4 : Agora leia os  dados gerados pelo relatório do processos bloqueados.

Neste exemplo, vamos usar o visualizador de relatório de processo bloqueado gratuito de Michael J Swart .[/et_pb_text][et_pb_text _builder_version=”4.9.0″ _module_preset=”default” text_font=”Courier Prime||||||||” text_text_color=”#000000″ text_font_size=”10px” text_line_height=”1em” background_color=”#eff0f1″ custom_margin=”0px|||60px|false|false” custom_padding=”6px|10px|6px|10px|true|true” border_width_top=”10px” border_color_top=”#7CDA24″ global_colors_info=”{}”]

exec dbo.sp_blocked_process_report_viewer
@Source=’S:\Traces\BlockedProcessReportDemo.trc’;

GO

[/et_pb_text][/et_pb_column][/et_pb_row][et_pb_row use_custom_gutter=”on” gutter_width=”1″ _builder_version=”4.9.0″ _module_preset=”default” custom_margin=”0px||0px||false|false” global_colors_info=”{}”][et_pb_column type=”4_4″ _builder_version=”4.9.0″ _module_preset=”default” global_colors_info=”{}”][et_pb_text _builder_version=”4.9.0″ _module_preset=”default” global_colors_info=”{}”]

Etapa 5 : Limpe!

Não se esqueça desta etapa.

[/et_pb_text][et_pb_text _builder_version=”4.9.0″ _module_preset=”default” text_font=”Courier Prime||||||||” text_text_color=”#000000″ text_font_size=”10px” text_line_height=”1em” background_color=”#eff0f1″ custom_margin=”0px|||60px|false|false” custom_padding=”6px|10px|6px|10px|true|true” border_width_top=”10px” border_color_top=”#7CDA24″ global_colors_info=”{}”]

–Make sure your trace is gone
SELECT * from sys.traces;
GO

–Turn off the blocked process report when you’re not using it.
–Make sure you don’t have any pending changes
SELECT *
FROM sys.configurations
WHERE value <> value_in_use;
GO

exec sp_configure ‘blocked process threshold (s)’, 0;
GO
RECONFIGURE
GO

exec sp_configure ‘blocked process threshold (s)’;
GO

[/et_pb_text][et_pb_text _builder_version=”4.9.0″ _module_preset=”default” global_colors_info=”{}”]

Espero que nosso artigo tenha ajudado você a entender mais sobre Block e Locking.

Caso precise de uma consultoria em banco de dados SQL Server ou Oracle, fale conosco.

[/et_pb_text][/et_pb_column][/et_pb_row][et_pb_row _builder_version=”4.9.0″ _module_preset=”default” global_colors_info=”{}”][et_pb_column type=”4_4″ _builder_version=”4.9.0″ _module_preset=”default” global_colors_info=”{}”][et_pb_cta title=”Fale com um especialista” button_url=”https://tripletech.com.br/#depoimentos” button_text=”Fale agora!” _builder_version=”4.9.11″ _module_preset=”default” background_color=”#9e2525″ global_colors_info=”{}”]

Fale com um especialista agora, e tenha a melhor solução de TI para sua empresa.

[/et_pb_cta][/et_pb_column][/et_pb_row][et_pb_row _builder_version=”4.9.0″ _module_preset=”default” global_colors_info=”{}”][et_pb_column type=”4_4″ _builder_version=”4.9.0″ _module_preset=”default” global_colors_info=”{}”][et_pb_text _builder_version=”4.9.0″ _module_preset=”default” global_colors_info=”{}”]

Acompanhe a Tripletech nas redes sociais:

[/et_pb_text][et_pb_social_media_follow _builder_version=”4.9.0″ _module_preset=”default” text_orientation=”center” global_colors_info=”{}”][et_pb_social_media_follow_network social_network=”facebook” url=”https://www.facebook.com/tripletechti” _builder_version=”4.9.0″ _module_preset=”default” background_color=”#3b5998″ global_colors_info=”{}” follow_button=”off” url_new_window=”on”]facebook[/et_pb_social_media_follow_network][et_pb_social_media_follow_network social_network=”twitter” url=”https://www.twitter.com/tripletech” _builder_version=”4.9.0″ _module_preset=”default” background_color=”#00aced” global_colors_info=”{}” follow_button=”off” url_new_window=”on”]twitter[/et_pb_social_media_follow_network][et_pb_social_media_follow_network social_network=”linkedin” url=”https://www.linkedin.com/company/tripletech-it-solutions” _builder_version=”4.9.0″ _module_preset=”default” background_color=”#007bb6″ global_colors_info=”{}” follow_button=”off” url_new_window=”on”]linkedin[/et_pb_social_media_follow_network][et_pb_social_media_follow_network social_network=”instagram” url=”https://www.instagram.com/triple.tech/” _builder_version=”4.9.0″ _module_preset=”default” background_color=”#ea2c59″ global_colors_info=”{}” follow_button=”off” url_new_window=”on”]instagram[/et_pb_social_media_follow_network][/et_pb_social_media_follow][/et_pb_column][/et_pb_row][/et_pb_section]