Pengujian beban SQL Server menggunakan HammerDB


Tutorial ini menunjukkan cara menggunakan HammerDB untuk melakukan pengujian beban pada instance SQL Server Compute Engine. Anda dapat mempelajari cara menginstal instance SQL Server dengan mengikuti tutorial berikut:

Ada sejumlah alat pengujian beban yang tersedia. Beberapa di antaranya gratis dan bersifat open source, sementara yang lain memerlukan lisensi. HammerDB adalah alat open source yang umumnya berfungsi dengan baik untuk menunjukkan performa database SQL Server Anda. Tutorial ini membahas langkah-langkah dasar untuk menggunakan HammerDB, tetapi ada alat lain yang tersedia, dan Anda harus memilih alat yang paling sesuai dengan workload tertentu.

Tujuan

  • Mengonfigurasi SQL Server untuk pengujian beban.
  • Menginstal dan menjalankan HammerDB.
  • Mengumpulkan statistik runtime.
  • Menjalankan uji beban TPC-C.

Biaya

Selain instance SQL Server yang ada yang berjalan di Compute Engine, tutorial ini menggunakan komponen Google Cloud yang dapat ditagih, termasuk:

  • Compute Engine
  • Windows Server

Kalkulator Harga dapat menghasilkan perkiraan biaya berdasarkan proyeksi penggunaan Anda. Link yang diberikan menunjukkan perkiraan biaya untuk produk-produk yang digunakan dalam tutorial ini, yang dapat mencapai rata-rata 16 dolar (AS) per hari. Pengguna Google Cloud baru mungkin memenuhi syarat untuk mendapatkan uji coba gratis.

Sebelum memulai

  1. Login ke akun Google Cloud Anda. Jika Anda baru menggunakan Google Cloud, buat akun untuk mengevaluasi performa produk kami dalam skenario dunia nyata. Pelanggan baru juga mendapatkan kredit gratis senilai $300 untuk menjalankan, menguji, dan men-deploy workload.
  2. Di konsol Google Cloud, pada halaman pemilih project, pilih atau buat project Google Cloud.

    Buka pemilih project

  3. Pastikan penagihan telah diaktifkan untuk project Google Cloud Anda.

  4. Di konsol Google Cloud, pada halaman pemilih project, pilih atau buat project Google Cloud.

    Buka pemilih project

  5. Pastikan penagihan telah diaktifkan untuk project Google Cloud Anda.

  6. Jika Anda tidak menggunakan Windows di komputer lokal, instal klien Protokol Desktop Jarak Jauh (RDP) pihak ketiga. Untuk informasi selengkapnya, lihat Klien Microsoft Desktop Jarak Jauh.

Mengonfigurasi instance SQL Server untuk pengujian beban

Sebelum memulai, Anda harus memeriksa kembali apakah aturan firewall Windows telah disiapkan untuk mengizinkan traffic dari alamat IP instance Windows baru yang Anda buat. Kemudian, buat database baru untuk pengujian beban TPCC dan konfigurasi akun pengguna menggunakan langkah-langkah berikut:

  1. Klik kanan folder Databases di SQL Server Management Studio, lalu pilih New Database.
  2. Beri nama untuk database baru itu dengan "TPCC".
  3. Tetapkan ukuran awal file data ke 190.000 MB dan file log ke 65.000 MB.
  4. Tetapkan batas Autogrowth ke nilai yang lebih tinggi dengan mengklik tombol elipsis, seperti yang ditunjukkan pada screenshot berikut:

    Menetapkan batas Pertumbuhan Otomatis

  5. Atur ukuran file data agar bertambah sebesar 64 MB ke ukuran tak terbatas.

  6. Setel file log untuk menonaktifkan pertumbuhan otomatis.

  7. Klik OK.

  8. Pada dialog New Database, di panel kiri, pilih halaman Options.

  9. Tetapkan Compatibility level ke SQL Server 2012 (110).

  10. Setel Recovery model ke Simple, sehingga pemuatan tidak mengisi log transaksi.

    Menyetel model pemulihan ke Sederhana

  11. Klik OK untuk membuat database TPCC, yang dapat memerlukan waktu beberapa menit untuk diselesaikan.

  12. Image SQL Server yang telah dikonfigurasi sebelumnya hanya dilengkapi dengan autentikasi Windows sehingga Anda perlu mengaktifkan autentikasi mode campuran dalam SSMS, dengan mengikuti panduan ini.

  13. Ikuti langkah-langkah berikut untuk membuat akun pengguna SQL Server baru di server database Anda yang memiliki izin DBOwner. Beri nama akun tersebut "loaduser" dan berikan sandi yang aman.

  14. Catat alamat IP internal SQL Server Anda menggunakan commandlet Get-NetIPAddress. Hal ini penting untuk performa dan keamanan menggunakan IP internal.

Menginstal HammerDB

Anda dapat menjalankan HammerDB langsung di instance SQL Server. Namun, untuk pengujian yang lebih akurat, buat instance Windows baru dan uji instance SQL Server dari jarak jauh.

Membuat instance

Ikuti langkah-langkah berikut untuk membuat instance Compute Engine baru:

  1. Di konsol Google Cloud, buka halaman Create an instance.

    Buka Create an instance

  2. Untuk Name, masukkan hammerdb-instance.

  3. Di bagian Machine configuration, pilih jenis mesin dengan jumlah CPU minimal setengah sebagai instance database Anda.

  4. Di bagian Boot disk, klik Change, lalu lakukan hal berikut:

    1. Pada tab Public image, pilih sistem operasi Windows Server.
    2. Dalam daftar Version, klik Windows Server 2012 R2 atau Windows Server 2012 R2 Core.
    3. Pada daftar Boot disk type, pilih Standard persistent disk.
    4. Untuk mengonfirmasi opsi boot disk, klik Select.
  5. Untuk membuat dan memulai VM, klik Create.

Menginstal perangkat lunak

Jika sudah siap, gunakan klien RDP untuk terhubung ke instance Windows Server baru Anda, lalu instal software berikut:

Menjalankan HammerDB

Setelah Anda menginstal HammerDB, jalankan file hammerdb.bat. HammberDB tidak muncul di daftar aplikasi menu Start. Gunakan perintah berikut untuk menjalankan HammerDB:

C:\Program Files\HammerDB-2.20\hammerdb.bat

Membuat koneksi dan skema

Saat aplikasi berjalan, langkah pertama adalah mengonfigurasi koneksi untuk membangun skema.

  1. Klik dua kali SQL Server di panel Benchmark.
  2. Pilih TPC-C, akronim yang merupakan singkatan dari: Transaction Processing Performance Council - Benchmark C. Dari situs TPC.org:
    TPC-C melibatkan campuran lima transaksi serentak dari berbagai jenis dan kompleksitas, baik yang dijalankan secara online maupun dalam antrean untuk eksekusi yang ditangguhkan. Database terdiri dari sembilan jenis tabel dengan berbagai ukuran kumpulan data dan populasi. TPC-C diukur dalam transaksi per menit (tpmC).
  3. Klik OK

    Menetapkan opsi tolok ukur TPC-C

  4. Di panel Benchmark, di samping SQL Server, klik tanda plus (+) untuk meluaskan opsi.

  5. Di bawah TPC-C, klik Schema Build, lalu klik dua kali Options.

  6. Isi formulir seperti gambar di bawah ini, menggunakan alamat IP, nama pengguna, dan sandi Anda.

    Menyetel opsi build TPC-C

  7. Untuk opsi Schema, pilih Updated, yang membuat skema TPC-C yang lebih baik dengan struktur yang lebih sesuai dan indeks yang lebih baik.

  8. Dalam hal ini, Number of Warehouses (skala) disetel ke 2000, tetapi Anda tidak perlu menyetelnya setinggi itu, karena pembuatan 2000 gudang akan memerlukan waktu beberapa jam untuk diselesaikan. Beberapa pedoman menyarankan 10 hingga 100 warehouse per CPU. Untuk tutorial ini, tetapkan nilai ini ke 10 kali jumlah core: 160 untuk instance 16 core.

  9. Untuk opsi Pengguna Virtual untuk Membuat Skema, pilih angka antara 1 dan 2 kali jumlah vCPU klien. Anda dapat mengeklik kotak abu-abu di samping penggeser untuk menambah angka.

  10. Klik OK

  11. Klik dua kali opsi Build di bawah bagian Schema Build untuk membuat skema dan memuat tabel. Setelah selesai, klik ikon lampu flash merah di tengah atas layar untuk menghancurkan pengguna virtual dan melanjutkan ke langkah berikutnya.

Jika membuat database dengan model pemulihan Simple, Anda mungkin ingin mengubahnya kembali ke Full pada tahap ini untuk mendapatkan pengujian skenario produksi yang lebih akurat. Tindakan ini tidak akan diterapkan hingga Anda melakukan pencadangan penuh atau diferensial untuk memicu awal rantai log baru.

Membuat skrip driver

HammerDB menggunakan skrip driver untuk mengatur alur pernyataan SQL ke database guna menghasilkan beban yang diperlukan.

  1. Di panel Benchmark, luaskan bagian Driver Script dan klik dua kali Options.
  2. Pastikan setelan cocok dengan yang Anda gunakan dalam dialog Schema Build.
  3. Pilih Timed Test Driver Script.
  4. Opsi Checkpoint when complete memaksa database untuk menulis semuanya ke disk pada akhir pengujian. Jadi, periksa ini hanya jika Anda berencana menjalankan beberapa pengujian secara berturut-turut.
  5. Untuk memastikan pengujian yang menyeluruh, tetapkan Minutes of Rampup Time (Menit Waktu Rampup) ke 5 dan Minutes for Test Duration ke 20.
  6. Klik OK untuk keluar dari dialog.
  7. Klik dua kali Load di bagian Driver Script pada panel Benchmark untuk mengaktifkan skrip driver.

Menyetel opsi driver TPC-C

Membuat pengguna virtual

Pembuatan pemuatan yang realistis biasanya perlu menjalankan skrip sebagai beberapa pengguna yang berbeda. Buat beberapa pengguna virtual untuk pengujian.

  1. Luaskan bagian Virtual Users lalu klik dua kali Options.
  2. Jika Anda menetapkan jumlah (skala) warehouse ke 160, tetapkan Virtual Users ke 16, karena panduan TPC-C merekomendasikan rasio 10x untuk mencegah penguncian baris. Pilih kotak centang Show Output untuk mengaktifkan pesan error di konsol.
  3. Klik OK

Mengumpulkan statistik runtime

HammerDB dan SQL Server tidak mengumpulkan statistik runtime mendetail dengan mudah untuk Anda. Meskipun tersedia jauh di dalam SQL Server, statistik tersebut harus dicatat dan dihitung secara teratur. Jika belum memiliki prosedur atau alat untuk membantu mengambil data ini, Anda dapat menggunakan prosedur di bawah ini untuk mencatat beberapa metrik yang berguna selama pengujian. Hasilnya akan ditulis ke file CSV di direktori temp Windows. Anda dapat menyalin data ke Google Spreadsheet menggunakan opsi Tempel Khusus > Tempel CSV.

Untuk menggunakan prosedur ini, Anda harus mengaktifkan Prosedur Otomatisasi OLE terlebih dahulu untuk menulis file ke disk. Jangan lupa menonaktifkannya setelah pengujian:

sp_configure 'show advanced options', 1;
GO
RECONFIGURE;
GO
sp_configure 'Ole Automation Procedures', 1;
GO
RECONFIGURE;
GO

Berikut adalah kode untuk membuat prosedur sp_write_performance_counters di SQL Server Management Studio. Sebelum memulai pengujian beban, Anda akan menjalankan prosedur ini di 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

Menjalankan uji beban TPC-C

Di SQL Server Management Studio, jalankan prosedur pengumpulan menggunakan skrip berikut:

Use master
Go
exec dbo.sp_write_performance_counters

Pada instance Compute Engine tempat Anda menginstal HammerDB, mulai pengujian di aplikasi HammerDB:

  1. Di panel Benchmark, di bagian Virtual Users, klik dua kali Create untuk membuat pengguna virtual, yang akan mengaktifkan opsi Virtual tab User Output.
  2. Klik dua kali Run tepat di bawah opsi Create untuk memulai pengujian.
  3. Setelah pengujian selesai, Anda akan melihat penghitungan Transaksi Per Menit (TPM) di tab Virtual User Output.
  4. Anda dapat menemukan hasil dari prosedur pengumpulan dalam direktori c:\Windows\temp.
  5. Simpan semua nilai ini ke Google Spreadsheet dan gunakan untuk membandingkan beberapa pengujian.

Pembersihan

Setelah menyelesaikan tutorial, Anda dapat membersihkan resource yang dibuat agar resource tersebut berhenti menggunakan kuota dan dikenai biaya. Bagian berikut menjelaskan cara menghapus atau menonaktifkan resource ini.

Menghapus project

Cara termudah untuk menghilangkan penagihan adalah dengan menghapus project yang Anda buat untuk tutorial.

Untuk menghapus project:

  1. Di konsol Google Cloud, buka halaman Manage resource.

    Buka Manage resource

  2. Pada daftar project, pilih project yang ingin Anda hapus, lalu klik Delete.
  3. Pada dialog, ketik project ID, lalu klik Shut down untuk menghapus project.

Menghapus instance

Untuk menghapus instance Compute Engine:

  1. Di konsol Google Cloud, buka halaman Instance VM.

    Buka VM instances

  2. Pilih kotak centang untuk instance yang ingin Anda hapus.
  3. Untuk menghapus instance, klik Tindakan lainnya, klik Hapus, lalu ikuti petunjuknya.

Langkah selanjutnya