En este tutorial se muestra cómo usar HammerDB para realizar pruebas de carga en una instancia de SQL Server de Compute Engine. Puedes consultar los siguientes tutoriales para saber cómo instalar una instancia de SQL Server:
Hay varias herramientas de pruebas de carga disponibles. Algunos son de código abierto y gratuitos, mientras que otros requieren licencias. HammerDB es una herramienta de código abierto que suele funcionar bien para demostrar el rendimiento de tu base de datos de SQL Server. En este tutorial se explican los pasos básicos para usar HammerDB, pero hay otras herramientas disponibles. Debes seleccionar las que mejor se adapten a tus cargas de trabajo específicas.
Configurar la instancia de SQL Server para realizar pruebas de carga
Antes de empezar, debes comprobar que las reglas del cortafuegos de Windows estén configuradas para permitir el tráfico de la dirección IP de la nueva instancia de Windows que has creado. A continuación, crea una base de datos para las pruebas de carga de TPCC y configura una cuenta de usuario siguiendo estos pasos:
- Haz clic con el botón derecho en la carpeta Bases de datos de SQL Server Management Studio y, a continuación, elige Nueva base de datos.
- Asigna el nombre "TPCC" a la nueva base de datos.
- Define el tamaño inicial del archivo de datos en 190.000 MB y el del archivo de registro en 65.000 MB.
Aumenta los límites de Crecimiento automático haciendo clic en los botones de puntos suspensivos, como se muestra en la siguiente captura de pantalla:
Define que el archivo de datos aumente en 64 MB hasta alcanzar un tamaño ilimitado.
Define el archivo de registro para inhabilitar el crecimiento automático.
Haz clic en Aceptar.
En el cuadro de diálogo Nueva base de datos, en el panel de la izquierda, elija la página Opciones.
Define el nivel de compatibilidad en SQL Server 2022 (160).
Define el Modelo de recuperación como Simple para que la carga no llene los registros de transacciones.
Haga clic en Aceptar para crear la base de datos TPCC. El proceso puede tardar unos minutos.
La imagen de SQL Server preconfigurada solo tiene habilitada la autenticación de Windows, por lo que tendrás que habilitar la autenticación en modo mixto en SSMS siguiendo esta guía.
Sigue estos pasos para crear una cuenta de usuario de SQL Server en tu servidor de bases de datos que tenga el permiso DBOwner. Asigna el nombre "loaduser" a la cuenta y ponle una contraseña segura.
Anota la dirección IP interna de SQL Server con el cmdlet
Get-NetIPAddress
, ya que es importante para el rendimiento y la seguridad usar la IP interna.
Instalar HammerDB
Puedes ejecutar HammerDB directamente en tu instancia de SQL Server. Sin embargo, para hacer una prueba más precisa, crea una instancia de Windows y prueba la instancia de SQL Server de forma remota.
Crear una instancia
Sigue estos pasos para crear una instancia de Compute Engine:
En la Google Cloud consola, ve a la página Crear una instancia.
En Nombre, escribe
hammerdb-instance
.En la sección Configuración de la máquina, selecciona el tipo de máquina con al menos la mitad del número de CPUs que tenga tu instancia de base de datos.
En la sección Disco de arranque, haz clic en Cambiar y, a continuación, haz lo siguiente:
- En la pestaña Imágenes públicas, elige un sistema operativo Windows Server.
- En la lista Versión, haz clic en Windows Server 2022 Datacenter.
- En la lista Tipo de disco de arranque, selecciona Disco persistente estándar.
- Para confirmar las opciones del disco de arranque, haz clic en Seleccionar.
Para crear e iniciar la VM, haz clic en Crear.
Instalar el software
Cuando esté listo, usa un cliente RDP para conectarte a tu nueva instancia de Windows Server e instala el siguiente software:
Ejecutar HammerDB
Después de instalar HammerDB, ejecuta el archivo hammerdb.bat
. HammberDB no aparece en la lista de aplicaciones del menú Inicio. Usa el siguiente comando
para ejecutar HammerDB:
C:\Program Files\HammerDB-VERSION
\hammerdb.bat
Sustituye VERSION
por la versión de HammerDB instalada.
Crear la conexión y el esquema
Cuando la aplicación se está ejecutando, el primer paso es configurar la conexión para crear el esquema.
- En el panel Benchmark (Benchmark), haga doble clic en SQL Server (SQL Server).
- Selecciona TPROC-C.
En el sitio de HammerDB:
TPROC-C es la carga de trabajo de OLTP implementada en HammerDB, derivada de la especificación de TPROC-C, con modificaciones para que la ejecución de HammerDB sea sencilla y rentable en cualquiera de los entornos de base de datos admitidos. La carga de trabajo TPROC-C de HammerDB es una carga de trabajo de código abierto derivada del estándar de referencia TPROC-C y, como tal, no se puede comparar con los resultados publicados de TPROC-C, ya que los resultados cumplen un subconjunto en lugar del estándar de referencia TPROC-C completo. El nombre de la carga de trabajo TPROC-C de HammerDB significa "Benchmark de procesamiento de transacciones derivado de la especificación "C" de TPC".
Haz clic en Aceptar.
Haz clic en Esquema y, a continuación, haz doble clic en Opciones.
Rellena el formulario con tu dirección IP, nombre de usuario y contraseña, tal como se muestra en la siguiente imagen:
Define el controlador ODBC de SQL Server como controlador ODBC 18 para SQL Server.
En este caso, el Número de almacenes (la escala) es 460, pero puedes elegir otro valor. Algunas directrices sugieren entre 10 y 100 almacenes por CPU. En este tutorial, asigna a este valor 10 veces el número de núcleos: 160 para una instancia de 16 núcleos.
En Usuarios virtuales para crear el esquema, elige un número que sea entre 1 y 2 veces el número de vCPUs del cliente. Puedes hacer clic en la barra gris situada junto al control deslizante para aumentar el número.
Desmarca la opción Usar opción BPC.
Haz clic en Aceptar.
Haz doble clic en la opción Compilación de la sección Compilación de esquema para crear el esquema y cargar las tablas. Cuando se complete, haz clic en el icono rojo de la linterna situado en la parte superior central de la pantalla para eliminar al usuario virtual y pasar al siguiente paso.
Si has creado la base de datos con el modelo de recuperación Simple
, puede que quieras volver a cambiarlo a Full
en este punto para obtener una prueba más precisa de un escenario de producción. Este cambio no se aplicará hasta que hagas una copia de seguridad completa o diferencial para activar el inicio de la nueva cadena de registros.
Crear la secuencia de comandos del controlador
HammerDB usa la secuencia de comandos del controlador para organizar el flujo de instrucciones SQL a la base de datos y generar la carga necesaria.
- En el panel Benchmark (Benchmark), despliega la sección Driver Script (Guion de controlador) y haz doble clic en Options (Opciones).
- Comprueba que los ajustes coincidan con los que has usado en el cuadro de diálogo Creación de esquema.
- Elige Timed Driver Script (Secuencia de comandos de controlador programada).
- La opción Punto de control al finalizar obliga a la base de datos a escribir todo en el disco al final de la prueba, así que solo debes marcarla si tienes previsto realizar varias pruebas seguidas.
- Para asegurarte de que la prueba sea exhaustiva, asigna el valor 5 a Minutos de tiempo de aumento y el valor 20 a Minutos de duración de la prueba.
- Haz clic en Aceptar para cerrar el cuadro de diálogo.
- En la sección Driver Script (Guion del controlador) del panel Benchmark (Benchmark), haz doble clic en Load (Cargar) para activar el guion del controlador.
Crear usuarios virtuales
Para crear una carga realista, normalmente se deben ejecutar secuencias de comandos como varios usuarios diferentes. Crea algunos usuarios virtuales para la prueba.
- Despliega la sección Usuarios virtuales y haz doble clic en Opciones.
- Si define el número de almacenes (escala) en 160, debe definir el valor de Usuarios virtuales en 16, ya que las directrices de TPROC-C recomiendan una proporción de 10:1 para evitar el bloqueo de filas. Selecciona la casilla Mostrar salida para habilitar los mensajes de error en la consola.
- Haz clic en Aceptar.
Recogida de estadísticas del tiempo de ejecución
HammerDB y SQL Server no recogen fácilmente estadísticas de tiempo de ejecución detalladas. Aunque las estadísticas están disponibles en SQL Server, deben obtenerse y calcularse periódicamente. Si aún no tienes un procedimiento o una herramienta para recoger estos datos, puedes usar el procedimiento de esta sección para recoger algunas métricas útiles durante las pruebas. Los resultados se escribirán en un archivo CSV en el directorio temp
de Windows. Puedes copiar los datos en una hoja de cálculo de Google con la opción Pegado especial > Pegar CSV.
Para usar este procedimiento, primero debe habilitar temporalmente los procedimientos de automatización OLE para escribir el archivo en el disco. Recuerde inhabilitarlo después de hacer las pruebas:
sp_configure 'show advanced options', 1; GO RECONFIGURE; GO sp_configure 'Ole Automation Procedures', 1; GO RECONFIGURE; GO
Este es el código para crear el procedimiento sp_write_performance_counters
en SQL Server Management Studio. Antes de iniciar la prueba de carga, debes ejecutar este procedimiento en Management Studio:
USE [master] GO SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO /*** LogFile path has to be in a directory that SQL Server can Write To. */ CREATE PROCEDURE [dbo].[sp_write_performance_counters] @LogFile varchar (2000) = 'C:\\WINDOWS\\TEMP\\sqlPerf.log', @SecondsToRun int =1600, @RunIntervalSeconds int = 2 AS BEGIN --File writing variables DECLARE @OACreate INT, @OAFile INT, @FileName VARCHAR(2000), @RowText VARCHAR(500), @Loops int, @LoopCounter int, @WaitForSeconds varchar (10) --Variables to save last counter values DECLARE @LastTPS BIGINT, @LastLRS BIGINT, @LastLTS BIGINT, @LastLWS BIGINT, @LastNDS BIGINT, @LastAWT BIGINT, @LastAWT_Base BIGINT, @LastALWT BIGINT, @LastALWT_Base BIGINT --Variables to save current counter values DECLARE @TPS BIGINT, @Active BIGINT, @SCM BIGINT, @LRS BIGINT, @LTS BIGINT, @LWS BIGINT, @NDS BIGINT, @AWT BIGINT, @AWT_Base BIGINT, @ALWT BIGINT, @ALWT_Base BIGINT, @ALWT_DIV BIGINT, @AWT_DIV BIGINT SELECT @Loops = case when (@SecondsToRun % @RunIntervalSeconds) > 5 then @SecondsToRun / @RunIntervalSeconds + 1 else @SecondsToRun / @RunIntervalSeconds end SET @LoopCounter = 0 SELECT @WaitForSeconds = CONVERT(varchar, DATEADD(s, @RunIntervalSeconds , 0), 114) SELECT @FileName = @LogFile + FORMAT ( GETDATE(), '-MM-dd-yyyy_m', 'en-US' ) + '.txt' --Create the File Handler and Open the File EXECUTE sp_OACreate 'Scripting.FileSystemObject', @OACreate OUT EXECUTE sp_OAMethod @OACreate, 'OpenTextFile', @OAFile OUT, @FileName, 2, True, -2 --Write the Header EXECUTE sp_OAMethod @OAFile, 'WriteLine', NULL,'Transactions/sec, Active Transactions, SQL Cache Memory (KB), Lock Requests/sec, Lock Timeouts/sec, Lock Waits/sec, Number of Deadlocks/sec, Average Wait Time (ms), Average Latch Wait Time (ms)' --Collect Initial Sample Values SET ANSI_WARNINGS OFF SELECT @LastTPS= max(case when counter_name = 'Transactions/sec' then cntr_value end), @LastLRS = max(case when counter_name = 'Lock Requests/sec' then cntr_value end), @LastLTS = max(case when counter_name = 'Lock Timeouts/sec' then cntr_value end), @LastLWS = max(case when counter_name = 'Lock Waits/sec' then cntr_value end), @LastNDS = max(case when counter_name = 'Number of Deadlocks/sec' then cntr_value end), @LastAWT = max(case when counter_name = 'Average Wait Time (ms)' then cntr_value end), @LastAWT_Base = max(case when counter_name = 'Average Wait Time base' then cntr_value end), @LastALWT = max(case when counter_name = 'Average Latch Wait Time (ms)' then cntr_value end), @LastALWT_Base = max(case when counter_name = 'Average Latch Wait Time base' then cntr_value end) FROM sys.dm_os_performance_counters WHERE counter_name IN ( 'Transactions/sec', 'Lock Requests/sec', 'Lock Timeouts/sec', 'Lock Waits/sec', 'Number of Deadlocks/sec', 'Average Wait Time (ms)', 'Average Wait Time base', 'Average Latch Wait Time (ms)', 'Average Latch Wait Time base') AND instance_name IN( '_Total' ,'') SET ANSI_WARNINGS ON WHILE @LoopCounter <= @Loops BEGIN WAITFOR DELAY @WaitForSeconds SET ANSI_WARNINGS OFF SELECT @TPS= max(case when counter_name = 'Transactions/sec' then cntr_value end) , @Active = max(case when counter_name = 'Active Transactions' then cntr_value end) , @SCM = max(case when counter_name = 'SQL Cache Memory (KB)' then cntr_value end) , @LRS = max(case when counter_name = 'Lock Requests/sec' then cntr_value end) , @LTS = max(case when counter_name = 'Lock Timeouts/sec' then cntr_value end) , @LWS = max(case when counter_name = 'Lock Waits/sec' then cntr_value end) , @NDS = max(case when counter_name = 'Number of Deadlocks/sec' then cntr_value end) , @AWT = max(case when counter_name = 'Average Wait Time (ms)' then cntr_value end) , @AWT_Base = max(case when counter_name = 'Average Wait Time base' then cntr_value end) , @ALWT = max(case when counter_name = 'Average Latch Wait Time (ms)' then cntr_value end) , @ALWT_Base = max(case when counter_name = 'Average Latch Wait Time base' then cntr_value end) FROM sys.dm_os_performance_counters WHERE counter_name IN ( 'Transactions/sec', 'Active Transactions', 'SQL Cache Memory (KB)', 'Lock Requests/sec', 'Lock Timeouts/sec', 'Lock Waits/sec', 'Number of Deadlocks/sec', 'Average Wait Time (ms)', 'Average Wait Time base', 'Average Latch Wait Time (ms)', 'Average Latch Wait Time base') AND instance_name IN( '_Total' ,'') SET ANSI_WARNINGS ON SELECT @AWT_DIV = case when (@AWT_Base - @LastAWT_Base) > 0 then (@AWT_Base - @LastAWT_Base) else 1 end , @ALWT_DIV = case when (@ALWT_Base - @LastALWT_Base) > 0 then (@ALWT_Base - @LastALWT_Base) else 1 end SELECT @RowText = '' + convert(varchar, (@TPS - @LastTPS)/@RunIntervalSeconds) + ', ' + convert(varchar, @Active) + ', ' + convert(varchar, @SCM) + ', ' + convert(varchar, (@LRS - @LastLRS)/@RunIntervalSeconds) + ', ' + convert(varchar, (@LTS - @LastLTS)/@RunIntervalSeconds) + ', ' + convert(varchar, (@LWS - @LastLWS)/@RunIntervalSeconds) + ', ' + convert(varchar, (@NDS - @LastNDS)/@RunIntervalSeconds) + ', ' + convert(varchar, (@AWT - @LastAWT)/@AWT_DIV) + ', ' + convert(varchar, (@ALWT - @LastALWT)/@ALWT_DIV) SELECT @LastTPS = @TPS, @LastLRS = @LRS, @LastLTS = @LTS, @LastLWS = @LWS, @LastNDS = @NDS, @LastAWT = @AWT, @LastAWT_Base = @AWT_Base, @LastALWT = @ALWT, @LastALWT_Base = @ALWT_Base EXECUTE sp_OAMethod @OAFile, 'WriteLine', Null, @RowText SET @LoopCounter = @LoopCounter + 1 END --CLEAN UP EXECUTE sp_OADestroy @OAFile EXECUTE sp_OADestroy @OACreate print 'Completed Logging Performance Metrics to file: ' + @FileName END GO
Ejecutar la prueba de carga TPROC-C
En SQL Server Management Studio, ejecuta el procedimiento de recopilación con la siguiente secuencia de comandos:
Use master Go exec dbo.sp_write_performance_counters
En la instancia de Compute Engine en la que has instalado HammerDB, inicia la prueba en la aplicación HammerDB:
- En el panel Benchmark (Comparativa), en Virtual Users (Usuarios virtuales), haz doble clic en Create (Crear) para crear los usuarios virtuales, lo que activará la pestaña Virtual User Output (Resultados de usuarios virtuales).
- Haz doble clic en Ejecutar, justo debajo de la opción Crear, para iniciar la prueba.
- Cuando se complete la prueba, verás el cálculo de transacciones por minuto (TPM) en la pestaña Salida de usuario virtual.
- Puedes encontrar los resultados del procedimiento de recogida en el directorio
c:\Windows\temp
. - Guarda todos estos valores en una hoja de cálculo de Google y úsalos para comparar varias pruebas.