Questo tutorial mostra come utilizzare HammerDB per eseguire test di carico su un'istanza SQL Server di Compute Engine. Per scoprire come installare un'istanza SQL Server, consulta i seguenti tutorial:
Sono disponibili diversi strumenti di test di carico. Alcune sono gratuite e open source, mentre altre richiedono licenze. HammerDB è uno strumento open source che in genere funziona bene per dimostrare le prestazioni del database SQL Server. Questo tutorial illustra i passaggi di base per utilizzare HammerDB, ma sono disponibili altri strumenti e devi selezionare quelli più adatti ai tuoi workload specifici.
Obiettivi
Questo tutorial illustra i seguenti obiettivi:- Configurazione di SQL Server per i test di carico
- Installazione ed esecuzione di HammerDB
- Raccolta delle statistiche di runtime
- Esecuzione del benchmark di elaborazione delle transazioni dedotto dal test di carico della specifica TPC "C" (TPROC-C)
Costi
Oltre alle eventuali istanze SQL Server esistenti in esecuzione su Compute Engine, questo tutorial utilizza componenti fatturabili di Google Cloud, tra cui:
- Compute Engine
- Windows Server
Il Calcolatore prezzi può generare una stima dei costi in base all'utilizzo previsto. Il link fornito mostra la stima del costo per i prodotti utilizzati in questo tutorial, che può aggirarsi in media sui 16 $ al giorno.
Prima di iniziare
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
- Se non utilizzi Windows sulla tua macchina locale, installa un client RDP (Remote Desktop Protocol) di terze parti. Per saperne di più, vedi Client di Microsoft Remote Desktop.
Configurazione dell'istanza SQL Server per i test di carico
Prima di iniziare, devi verificare che le regole del firewall di Windows siano configurate per consentire il traffico dall'indirizzo IP della nuova istanza Windows che hai creato. Quindi, crea un nuovo database per i test di carico TPCC e configura un account utente seguendo questi passaggi:
- Fai clic con il tasto destro del mouse sulla cartella Database in SQL Server Management Studio e poi scegli Nuovo database.
- Assegna il nome "TPCC" al nuovo database.
- Imposta la dimensione iniziale del file di dati su 190.000 MB e del file di log su 65.000 MB.
Imposta i limiti di Crescita automatica su valori più elevati facendo clic sui pulsanti con tre puntini, come mostrato nello screenshot seguente:
Imposta il file di dati in modo che aumenti di 64 MB fino a dimensioni illimitate.
Imposta il file di log per disattivare l'aumento automatico.
Fai clic su OK.
Nella finestra di dialogo Nuovo database, nel riquadro a sinistra, scegli la pagina Opzioni.
Imposta Livello di compatibilità su SQL Server 2022 (160).
Imposta il modello di recupero su Semplice, in modo che il caricamento non riempia i log delle transazioni.
Fai clic su OK per creare il database TPCC. La procedura può richiedere alcuni minuti.
L'immagine di SQL Server preconfigurata è dotata solo dell'autenticazione Windows, pertanto dovrai attivare l'autenticazione in modalità mista in SSMS seguendo questa guida.
Segui questi passaggi per creare un nuovo account utente SQL Server sul server di database con l'autorizzazione DBOwner. Assegna all'account il nome "loaduser" e assegnagli una password sicura.
Prendi nota dell'indirizzo IP interno di SQL Server utilizzando il cmdlet
Get-NetIPAddress
, perché è importante per le prestazioni e la sicurezza utilizzare l'IP interno.
Installazione di HammerDB
Puoi eseguire HammerDB direttamente sull'istanza SQL Server. Tuttavia, per un test più accurato, crea una nuova istanza Windows e testa l'istanza SQL Server da remoto.
Creazione di un'istanza
Per creare una nuova istanza Compute Engine:
Nella console Google Cloud, vai alla pagina Crea un'istanza.
In Nome, inserisci
hammerdb-instance
.Nella sezione Configurazione macchina, seleziona il tipo di macchina con almeno la metà del numero di CPU come istanza di database.
Nella sezione Disco di avvio, fai clic su Cambia e poi:
- Nella scheda Immagini pubbliche, scegli un sistema operativo Windows Server.
- Nell'elenco Versione, fai clic su Windows Server 2022 Datacenter.
- Nell'elenco Tipo di disco di avvio, seleziona Disco permanente standard.
- Per confermare le opzioni del disco di avvio, fai clic su Seleziona.
Per creare e avviare la VM, fai clic su Crea.
Installazione del software
Al termine, utilizza un client RDP per connetterti alla nuova istanza Windows Server e installa il seguente software:
Eseguire HammerDB
Dopo aver installato HammerDB, esegui il file hammerdb.bat
. HammberDB non viene visualizzato nell'elenco delle applicazioni del menu Start. Utilizza il seguente comando per eseguire HammerDB:
C:\Program Files\HammerDB-VERSION
\hammerdb.bat
Sostituisci VERSION
con la versione di HammerDB installata.
Creazione della connessione e dello schema
Quando l'applicazione è in esecuzione, il primo passaggio consiste nel configurare la connessione per creare lo schema.
- Fai doppio clic su SQL Server nel riquadro Benchmark.
- Seleziona TPROC-C.
Dal sito di HammerDB:
TPROC-C è il carico di lavoro OLTP implementato in HammerDB, derivato dalla specifica TPROC-C con modifiche per semplificare ed economizzare l'esecuzione di HammerDB in qualsiasi ambiente di database supportato. Il carico di lavoro HammerDB TPROC-C è un carico di lavoro open source derivato dallo standard di benchmark TPROC-C e, pertanto, non è paragonabile ai risultati TPROC-C pubblicati, in quanto questi ultimi sono conformi a un sottoinsieme anziché allo standard di benchmark TPROC-C completo. Il nome del carico di lavoro HammerDB TPROC-C significa "Benchmark di elaborazione delle transazioni derivato dalla specifica TPC "C"".
Fai clic su OK.
Fai clic su Schema e poi fai doppio clic su Opzioni.
Compila il modulo utilizzando il tuo indirizzo IP, nome utente e password come mostrato nell'immagine seguente:
Imposta il driver ODBC di SQL Server sul driver OBDC 18 per SQL Server
In questo caso, il Numero di magazzini (la scala) è impostato su 460, ma puoi scegliere un valore diverso. Alcune linee guida suggeriscono da 10 a 100 magazzini per CPU. Per questo tutorial, imposta questo valore su 10 volte il numero di core: 160 per un'istanza a 16 core.
Per Utenti virtuali per la creazione dello schema, scegli un numero compreso tra 1 e 2 volte il numero di vCPU del client. Puoi fare clic sulla barra grigia accanto al cursore per aumentare il numero.
Deseleziona l'opzione Usa l'opzione BPC.
Fai clic su OK.
Fai doppio clic sull'opzione Crea sotto la sezione Creazione dello schema per creare lo schema e caricare le tabelle. Al termine, fai clic sull'icona della lampada di segnalazione rossa al centro in alto dello schermo per eliminare l'utente virtuale e passare al passaggio successivo.
Se hai creato il database con il modello di recupero Simple
, a questo punto potresti voler ripristinare Full
per eseguire un test più accurato di uno scenario di produzione. Questa operazione non avrà effetto finché non esegui un backup completo o differenziale per attivare l'avvio della nuova catena di log.
Creazione dello script del driver
HammerDB utilizza lo script del driver per orchestrare il flusso di istruzioni SQL al database al fine di generare il carico richiesto.
- Nel riquadro Benchmark, espandi la sezione Script del driver e fai doppio clic su Opzioni.
- Verifica che le impostazioni corrispondano a quelle utilizzate nella finestra di dialogo Costruzione dello schema.
- Scegli Script del driver a tempo.
- L'opzione Esegui un controllo al termine forza il database a scrivere tutto sul disco alla fine del test, quindi selezionala solo se prevedi di eseguire più test di seguito.
- Per garantire un test accurato, imposta Minuti di tempo di applicazione su 5 e Minuti per la durata del test su 20.
- Fai clic su OK per uscire dalla finestra di dialogo.
- Fai doppio clic su Carica nella sezione Script del driver del riquadro Benchmark per attivare lo script del driver.
Creazione di utenti virtuali
La creazione di un carico realistico richiede in genere l'esecuzione di script come più utenti diversi. Crea alcuni utenti virtuali per il test.
- Espandi la sezione Utenti virtuali e fai doppio clic su Opzioni.
- Se imposti il conteggio del magazzino (scala) su 160, imposta Utenti virtuali su 16, perché le linee guida TPROC-C consigliano un rapporto di 10 volte per evitare il blocco delle righe. Seleziona la casella di controllo Mostra output per attivare i messaggi di errore nella console.
- Fai clic su OK.
Raccolta delle statistiche di runtime
HammerDB e SQL Server non raccolgono facilmente statistiche di runtime dettagliate per te. Sebbene le statistiche siano disponibili in profondità in SQL Server, devono essere acquisite e calcolate regolarmente. Se non disponi già di una procedura o di uno strumento per acquisire questi dati, puoi utilizzare la procedura riportata di seguito per acquisire alcune metriche utili durante i test. I risultati verranno scritti in un file CSV nella directory temp
di Windows. Puoi copiare i dati in un foglio Google utilizzando l'opzione Incolla speciale > Incolla CSV.
Per utilizzare questa procedura, devi prima attivare temporaneamente le procedure di automazione OLE per scrivere il file sul disco. Ricorda di disattivarlo dopo il test:
sp_configure 'show advanced options', 1; GO RECONFIGURE; GO sp_configure 'Ole Automation Procedures', 1; GO RECONFIGURE; GO
Ecco il codice per creare la procedura sp_write_performance_counters
in SQL Server Management Studio. Prima di avviare il test di carico, esegui questa procedura in 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
Esecuzione del test di carico TPROC-C
In SQL Server Management Studio, esegui la procedura di raccolta utilizzando il seguente script:
Use master Go exec dbo.sp_write_performance_counters
Nell'istanza Compute Engine in cui hai installato HammerDB, avvia il test nell'applicazione HammerDB:
- Nel riquadro Benchmark, fai doppio clic su Crea in Utenti virtuali per creare gli utenti virtuali, in modo da attivare la scheda Output utente virtuale.
- Fai doppio clic su Esegui appena sotto l'opzione Crea per avviare il test.
- Al termine del test, vedrai il calcolo delle transazioni al minuto (TPM) nella scheda Output utente virtuale.
- Puoi trovare i risultati della procedura di raccolta nella directory
c:\Windows\temp
. - Salva tutti questi valori in un foglio Google e utilizzali per confrontare più esecuzioni di test.
Esegui la pulizia
Al termine del tutorial, puoi eliminare le risorse che hai creato in modo che smettano di utilizzare la quota e di generare addebiti. Le sezioni seguenti descrivono come eliminare o disattivare queste risorse.
Elimina il progetto
Il modo più semplice per eliminare la fatturazione è eliminare il progetto che hai creato per il tutorial.
Per eliminare il progetto:
- In the Google Cloud console, go to the Manage resources page.
- In the project list, select the project that you want to delete, and then click Delete.
- In the dialog, type the project ID, and then click Shut down to delete the project.
Eliminazione di istanze
Per eliminare un'istanza di Compute Engine:
- In the Google Cloud console, go to the VM instances page.
- Select the checkbox for the instance that you want to delete.
- To delete the instance, click More actions, click Delete, and then follow the instructions.
Passaggi successivi
- Consulta la guida alle best practice per SQL Server.
- Esplora architetture di riferimento, diagrammi e best practice su Google Cloud. Consulta il nostro Cloud Architecture Center.