Bu yazıda SQL Server üzerinde yükler oluşturacağız, yük oluştururken SQL Server üzerindeki workload’ları inceleyeceğiz.
SQL Server’da Yük Testi (Stress Testi) oluşturmak istediğimizde birçok tool önümüze çıkacaktır. Microsoft bu testi yapabilmemiz için bizimle RML Utilities Tool’unu paylaşmıştır.
Öncelikle tool’u PC’inize kurmak ve yüklemek için aşağıdaki adımları takip etmelisiniz.
Aşağıdaki linke girşi sağladıktan sonra downlaoda etmelisiniz.
https://www.microsoft.com/en-us/download/details.aspx?id=103126
Görsel – 1
Görsel – 2
Kurulum başarılı şekilde tamamlandıktan sonra Tool’un aşağıdaki path’e kurulduğunu teyit edebilirsiniz.
“C:\ProgramData\Microsoft\Windows\Start Menu\Programs\RML Utilities for SQL Server\”
Görsel – 3
CMD’yi açtıktan sonra; aşağıdaki parametreleri kullanarak kendi yazmış olduğumuz sorguları stress testi için gönderebiliriz.
Görsel – 4
Microsoft bu testi yaparken oStress komutunu kullanarak yapmaktadır. T-Sql query’lerin yük oluşturabilmesi için tasarlanmıştır. Bu sayede veritabanına ciddi bir yük bindirebilirsiniz.
SQL Server üzerinde yük üretmek için bir database’e ihtiyacımız olacak. Biz bunun için AdventureWorks Veritabanını kullandık. Aşağıdaki link üzerinden bu Database’in backup’ını indirerek Restore edebilirsiniz.
Yük oluştururken 3 adet Store Procedure oluşturuyoruz.
----1 TEMPDB üzerinde yük oluşturmak için oluşturulan Store Procedure USE AdventureWorks2022 GO CREATE PROCEDURE dbo.sel_HumPerBusEntId_Ostrees @BusinessEntityID INT AS SELECT E.* INTO #t FROM [HumanResources].[Employee] E INNER JOIN Person.Person P ON P.BusinessEntityID = E.BusinessEntityID WHERE E.BusinessEntityID <=@BusinessEntityID DROP TABLE #t GO
----2 Select (Read) query’ler ile sql server üzerinde Read yük oluşturabilmek için oluşturulan SP CREATE PROC [dbo].[sel_PrsnFrstNm_Ostrees] @FirstName NVARCHAR(100) AS BEGIN SELECT * FROM [AdventureWorks2022].[Person].[Person] WHERE FirstName = @FirstName END
----3 Insert yükü ile sql server üzerinde Write yükü oluşturmak için oluşturulan SP IF object_id('PersonStressTest') is null CREATE TABLE [dbo].[PersonStressTest]( [BusinessEntityID] [int] NOT NULL, [PersonType] [nchar](2) NOT NULL, [NameStyle] [dbo].[NameStyle] NOT NULL, [Title] [nvarchar](8) NULL, [FirstName] [dbo].[Name] NOT NULL, [MiddleName] [dbo].[Name] NULL, [LastName] [dbo].[Name] NOT NULL, [Suffix] [nvarchar](10) NULL, [EmailPromotion] [int] NOT NULL, [AdditionalContactInfo] [xml](CONTENT [Person].[AdditionalContactInfoSchemaCollection]) NULL, [Demographics] [xml](CONTENT [Person].[IndividualSurveySchemaCollection]) NULL, [rowguid] [uniqueidentifier] ROWGUIDCOL NOT NULL, [ModifiedDate] [datetime] NOT NULL, CONSTRAINT [PK_PersonStressTest_BusinessEntityID] PRIMARY KEY CLUSTERED ( [BusinessEntityID] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY] ) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY] GO GO CREATE PROC Ins_dbo_Person_Ostrees AS INSERT INTO [dbo].[PersonStressTest] SELECT top 50 [BusinessEntityID] ,[PersonType] ,[NameStyle] ,[Title] ,[FirstName] ,[MiddleName] ,[LastName] ,[Suffix] ,[EmailPromotion] ,[AdditionalContactInfo] ,[Demographics] ,[rowguid] ,[ModifiedDate] FROM [AdventureWorks2022].[Person].[Person] ORDER BY NEWID()
Bu store procedure’leri çağırmak için bazı yöntemler mevcuttur. Biz bu makalede 2 yöntem ile deneyeceğiz.
Bu sorguları çalıştırmak için (.sql) uzantılı file’ları oluşturarak cmd ile bu komutları execute edeceğiz ve yükü sql server üzerinde inceleyeceğiz.
Görsel – 5
Yukarıdaki .sql uzantılı file’ları çalıştırmak için aşağıdaki komutları kullanabiliriz.
Birden fazla Instance’a sahip iseniz hangi Instance’da çalıştıracağınızı belirlemeniz gerekmektedir. Ayrıca çalıştırırken .sql uzantılı dosyalarınız neredeyse komut satırında orayı belirlemeniz gerekmektedir.
Görsel – 6
Bu işlemleri yaparken ayrıca bir sysadmin kullanıcı oluşturdum. Siz bildiğiniz bir kullanıcı ile yapabilirsiniz.
Ostress.exe -S”DESKTOP-LO3N8JR\SB2022″ -Usa –PPassword1 –iD:\SQLServerInstance\Ostress\Read_Workload.sql –n20 –r5
Ostress.exe -S”DESKTOP-LO3N8JR\SB2022″ -Usa –PPPassword1 – iD:\SQLServerInstance\Ostress\Tempdb_Workload.sql –n20 –r5
Ostress.exe -S”DESKTOP-LO3N8JR\SB2022″ -Usa – PPPassword1 – iD:\SQLServerInstance\Ostress\Write_Workload.sql –n20 –r5
Ostress.exe — Ostress executable file
-S” DESKTOP-LO3N8JR\SB2022″ –Server name\Instance Name
-Usa — Username
-PPassword1 — Password
-n20 –How many concurrent sessions you want to run for your query (Thread sayısı)
-r5 –How many iterations they should each perform (Kaç kez çalışacağı)
– iD:\SQLServerInstance\Sa\Read_Workload.sql –Query you want to run
Ayrıca, ad-hoc query’leride göndererek sql server üzerinde yük oluşturabiliriz. Aşağıdaki örnek ile test edebilirsiniz.
Ostress.exe -S”DESKTOP-LO3N8JR\SB2022″ -Usa –PPassword1 –Q”SELECT * FROM [AdventureWorks2022].[Person].[Person]” –n20 –r5
Bu işlemi Job ile yapmak isterseniz;
Görsel – 7
“C:\Program Files\Microsoft Corporation\RMLUtils\Ostress.exe” -S”DESKTOP-LO3N8JR\SB2022″ -Usa –PPassword1 –iD:\SQLServerInstance\Ostress\Tempdb_Workload.sql –n2000 –r50 -oD:\SQLServerInstance\Ostress\Tempdb_Workload
“C:\Program Files\Microsoft Corporation\RMLUtils\Ostress.exe” -S”DESKTOP-LO3N8JR\SB2022″ -Usa –PPassword1 –iD:\SQLServerInstance\Ostress\Tempdb_Workload.sql –n2000 –r50 -oD:\SQLServerInstance\Ostress\Read_Workload
“C:\Program Files\Microsoft Corporation\RMLUtils\Ostress.exe” -S”DESKTOP-LO3N8JR\SB2022″ -Usa –PPassword1 –iD:\SQLServerInstance\Ostress\Tempdb_Workload.sql –n2000 –r50 -oD:\SQLServerInstance\Ostress\Write_Workload
3 Jobu aynı anda çalıştırdığınızda sistemde fazlaca yük oluşturabilirsiniz.
Görsel – 8
“C:\Program Files\Microsoft Corporation\RMLUtils\Ostress.exe” — ostress executable file path
-S”DESKTOP-LO3N8JR\SB2022″ –Server name
-Usa — Username
-PPassword1 — Password
-n20 –How many concurrent sessions you want to run for your query
-r5 –How many iterations they should each perform
-iD:\SQLServerInstance\Ostress\Read_Workload.sql –Query you want to run
-D:\SQLServerInstance\Ostress\XXX_Workload —–Logging folder
Tempdb stress testinin sonuçları:
Görsel – 9
Görsel – 10
Görsel – 11
Tüm bu işlemleri yapmadan önce çok dikkatli ve test ortamlarında öncelikle denedikten sonra ihtiyacınız olan ortamlarda yetkili danışmanlardan yardım olarak deneyebilirsiniz.
MSSQL Load(Stress) Test - II - VERITABANI.ORGVERITABANI.ORG 19 Ocak 2025
[…] Yük oluştururken Microsoft tool’u ile bunu yapmak isterseniz daha önce kaleme aldığımız MSSQL Load (Stress) Test adlı makalemize […]