ADD SOME TEXT THROUGH CUSTOMIZER
ADD SOME TEXT THROUGH CUSTOMIZER

Este tutorial explica cómo preparar AdventureWorks 2022 en un contenedor Docker y conectarlo a tu aplicación Monitor SQL para realizar pruebas de rendimiento y estrés.


1. Requisitos Previos

  • Docker Desktop funcionando.

  • SQL Server Management Studio (SSMS) o Azure Data Studio instalado.

  • Archivo .bak: AdventureWorks2022.bak descargado.


2. Preparación del Contenedor

Paso A: Copiar el backup al contenedor

Desde la terminal de Windows (PowerShell), mueve el archivo descargado al sistema de archivos interno de Docker:

PowerShell

docker cp "C:\Ruta\A\Tu\Descarga\AdventureWorks2022.bak" sql_server_dev:/var/opt/mssql/data/AdventureWorks2022.bak

Paso B: Ajustar permisos

Asegúrate de que el motor de SQL pueda leer el archivo:

PowerShell

docker exec -u 0 -it sql_server_dev chown mssql /var/opt/mssql/data/AdventureWorks2022.bak

3. Restauración en SSMS

Abre una Nueva Consulta (New Query) en SSMS y ejecuta el siguiente script para crear la base de datos:

SQL

USE [master];
GO

RESTORE DATABASE [AdventureWorks]
FROM DISK = N'/var/opt/mssql/data/AdventureWorks2022.bak'
WITH FILE = 1,
MOVE N'AdventureWorks2022' TO N'/var/opt/mssql/data/AdventureWorks.mdf',
MOVE N'AdventureWorks2022_Log' TO N'/var/opt/mssql/data/AdventureWorks_log.ldf',
NOUNLOAD, STATS = 5;
GO

4. Configuración del Monitor SQL (Python)

Para ver los datos en tu aplicación, configura la conexión en el Sidebar de la siguiente manera:

Campo Valor
Host localhost o 127.0.0.1
Puerto 1433
Usuario sa
Contraseña TuPasswordFuerte123!
Base de Datos AdventureWorks

Importante: Si dejas la base de datos como master, el monitor no podrá ver las tablas de ventas y te dará error Invalid object name.


5. Scripts de Prueba de Rendimiento

Simular Carga Constante (Lecturas)

Ejecuta esto en una pestaña de SSMS para ver actividad en el monitor:

SQL

USE AdventureWorks;
GO
WHILE 1=1
BEGIN
    SELECT TOP 100 p.Name, s.OrderDate, d.LineTotal
    FROM Sales.SalesOrderHeader s
    JOIN Sales.SalesOrderDetail d ON s.SalesOrderID = d.SalesOrderID
    JOIN Production.Product p ON d.ProductID = p.ProductID
    ORDER BY s.TotalDue DESC;
    
    WAITFOR DELAY '00:00:01'; -- Ejecutar cada segundo
END

Simular un Bloqueo (Alerta Roja)

Para probar la detección de bloqueos en tu App:

  1. Pestaña 1 (Bloqueador):

    SQL

    USE AdventureWorks;
    BEGIN TRANSACTION;
    UPDATE Production.Product SET Name = 'LOCK_TEST' WHERE ProductID = 1;
    
  2. Pestaña 2 (Bloqueado):

    SQL

    USE AdventureWorks;
    SELECT * FROM Production.Product WHERE ProductID = 1;
    
  3. Observa el Monitor: Verás la sesión de la Pestaña 2 en estado SUSPENDED o Wait Type: LCK_M_S.


6. Solución de Problemas Comunes

  • Error 208 (Invalid object): Asegúrate de escribir USE AdventureWorks; antes de tus queries o de haber seleccionado la DB en el monitor.

  • Error 3169 (Version incompatible): Estás usando un .bak de SQL 2025 en un servidor 2022. Descarga la versión 2022.

  • Login Failed: Verifica que no haya espacios al final de la contraseña en el formulario de la App (el código usa .strip() pero siempre es bueno revisar).

Deja una respuesta

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