Saltar al contenido

Diario de un DBA

Problemas y soluciones para SQL Server

Menú
  • Inicio
  • Consultoria gratuita
  • tempdb
  • Curso Azure DP-300
  • Rendimiento
  • Seguridad
  • Sobre Mi
Menú

Detectar procesos bloqueados en SQL Server

Publicada el septiembre 5, 2022junio 22, 2024 por solracamo

Contenido del post:

Toggle
  • ¿Qué es un bloqueo de procesos en SQL Server?
  • ¿Cómo detectar procesos bloqueados?
  • ¿Todavía tienes dudas?

Los procesos bloqueados son uno de los problemas más comunes en SQL Server y aunque muchas veces puedes ser simplemente puntuales, otras veces pueden causar problemas de rendimiento y de malfunción que pueden afectar bastante a la instancia. En este articulo te explicaré por qué ocurren y cómo puedes detectarlos.

¿Qué es un bloqueo de procesos en SQL Server?

Un bloqueo de procesos ocurre cuando 2 o más procesos estás intentando acceder al mismo recurso de una base de datos. Cuando esto ocurre, uno de los procesos tendrá que esperar a que el otro finalice antes de poder acceder a ese recurso, lo que provoca que se pueda producir una cola de procesos que genere, por ejemplo, problemas de rendimiento.

Esto es muy cómun, por ejemplo, cuando se lanza una sentencia pero no se hace commit o rollbacks (cosas de devs).

Esto no sólo puede provocar problema de rendimiento, también puede provocar fallos en los backups o problemas en los jobs de mantenimiento del la instancia.

¿Cómo detectar procesos bloqueados?

Si tenemos sospechas de que esto puede estar ocurriendo, bien porque detectamos problemas de rendimiento o vemos jobs que están tardando más de lo normal en ejecutarse , podemos usar la siguiente consulta en SQL Server para detectar procesos que están siendo bloqueados por otros.

SET NOCOUNT ON

SELECT 
    DB_NAME(dbid) as [DBname],
    spid,
    CASE 
        WHEN (ecid > 0) THEN 'Parallel process, false alert'
        ELSE ''
    END as 'Parallel?',
    blocked,
    loginame,
    hostname,
    program_name,
    cmd,
    status,
    login_time,
    last_batch,
    GETDATE() as [current_time],
    waittime,
    lastwaittype,
    waitresource
FROM sys.sysprocesses 
WHERE blocked <> 0 
OR spid IN (SELECT blocked FROM sys.sysprocesses)

Si existen procesos bloqueados, la consulta mostrará un resultado similar a este:

procesos bloqueados SQL server

Cómo podeis ver, la consulta nos muestra toda la información relevante de todas las sesiones que están bloqueando o siendo bloqueadas.

Esto nos ayudará a identificar que sesiones están causando los bloqueos y a tomar una decisión (o ayudar al cliente a que tome una decisión) sobre lo que hacer con estas sesiones.

¿Todavía tienes dudas?

Si este post no ha solucionado tu problema o todavía tienes dudas sobre este o cualquier otro asunto relacionado con SQL Server, puedes enviarme un mensaje o solicitar una consultoría gratuita haciendo clic aquí.

1 comentario en «Detectar procesos bloqueados en SQL Server»

  1. Pingback: 💻SQL Server - Comprobar que está ejecutando una sesión en SQL Server - Diario de un DBA

Deja una respuesta Cancelar la respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Consultoria Gratis

¿Tienes un problema o una consulta sobre tu servidor SQL Server? ¿Necesitas hacer algún tipo de mantenimiento o tarea en tu instancia, pero no tienes claro cómo hacerlo?

Envíame un email con tu caso y te contestaré lo antes posible de forma totalmente gratuita.

Puedes utilizar el formulario que encontrarás haciendo click aquí.

Sobre mi

Efectivamente, soy un muñeco de slack con la camiseta de Fernando Alonso en Renault, pero también soy una DBA mid level que vive y trabaja en inglaterra como consultor SQL Server.

El objetivo de este blog es escribir los problemas con los que me he ido encontrando y cómo los solucioné. Si estas soluciones han servido para mí, es posible que también lo hagan para ti, ¿no?

Otras soluciones

  • Recuperar la password de la cuenta SA en SQL Serveroctubre 5, 2024
  • Always On en SQL Server. Todo lo que necesitas saberagosto 24, 2024
  • Recuperar una tabla borrada en SQL Serveragosto 18, 2024
  • Mover bases de datos a otro disco en SQL Serveragosto 11, 2024
  • Comprobar los últimos backups tomados en una instancia SQL Serverjunio 29, 2024
  • Comprobar fragmentación en SQL Serverjunio 23, 2024

Curso Azure DP-300 Gratis

  • Azure DP-300 curso en Español – Parte 1noviembre 17, 2022
  • Crear una máquina virtual con SQL server en Azurenoviembre 17, 2022
  • Crear un servidor SQL Server en Azure.noviembre 22, 2022
  • Azure DP-300 curso en Español – Parte 2noviembre 24, 2022
  • Azure DP-300 curso en Español – Parte 3diciembre 1, 2022
  • Azure DP-300 curso en Español – Parte 4diciembre 14, 2022

Consulta las páginas que nadie consulta:
Privacidad
Cookies

Escríbeme!
Contacto

© 2025 Diario de un DBA
x