MSSQL Load(Stress) Test

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. https://github.com/Microsoft/sql-server-samples/releases/download/adventureworks/AdventureWorks2022.bak Yük oluştururken 3 adet […]

MSSQL Load(Stress) Test

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.

https://github.com/Microsoft/sql-server-samples/releases/download/adventureworks/AdventureWorks2022.bak

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.

 

Benzer Yazılar

MSSQL Load(Stress) Test – II

SQL Server 17 saat önce

SQL Server üzerinde yük oluşturarak kaynak kullanımlarını ve sql server’ın bu yük ile başa çıkma durumu incelenmek için zaman zaman bazı testler yapılır. Yük oluştururken Microsoft tool’u ile bunu yapmak isterseniz daha önce kaleme aldığımız MSSQL Load (Stress) Test adlı makalemize bakabilirsiniz. Bu testleri yapmak için birçok tool vardır. Bunlardan biri de Adam Mechanic’in yapmış olduğu SqlQuerryStress Tool’u dur. Bu tool ile istediğiniz sorguyu istediğiniz thread’de ve istediğiniz sayıda göndererek sistem üzerinde yük oluşturabilirsiniz. Bu başlık altında SqlQueryStress tool’un kullanım durumuna ve kullanım sonrasında Sql Server üzerindeki yükleri inceleyeceğiz. Öncelikle bu tool’u aşağıdaki linkten indirebilirsiniz. İndirdikten sonra exe’yi yönetici olarak çalıştırmanız tool’un başlatılması için yeterli olacaktır. Bu tool’u birden fazla kez açıp farklı sorgularda gönderebilirsiniz. https://github.com/ErikEJ/SqlQueryStress/releases Görsel-1 Görsel – 2 Görsel – 3 Exe’yi başlattığımızda yukarıdaki görsel bizi ilk olarak karşılayacaktır. Burada başlatmadan önce Database button’u ile yükü hangi server ve database üzerinde, hangi kullanıcı ile yapacağımız bilgisini girmemiz gerekmektedir. […]

Contained Availibility Group – SQL Server 2022 Feature

SQL Server 18 saat önce

Contained Availibility Group – SQL Server 2022 Feature Bu Yazımızda SQL Server 2022’nin Feature’larından olan Contained Availablity Group’tan bahsedeceğiz. SQL Server Always on ile birlikte birçok kullanıcı oluşturdukları Agent Job ve User’larda zaman zaman problemler ile karşılaşmaktadır. Özellikle hangi job’un primary’de hangi Job’un secondary’de çalışacağı konusu zaman zaman problemler yaratmaktadır. Tamda bu noktada SQL Server 2022 Contained AG özelliği ile bu probleme çözüm getirmek için hayatımıza girdi. Yazımızda adım adım nasıl Contained AG oluştrulur ve oluştururken nelere dikkat etmeliyiz bunları tek tek ele alacağız. 1.Adım: Yeni bir Availablity Group Wizard oluşturuyoruz. Görsel 1: New Availability Group Wizard   2.Adım: Yeni bir AG oluşturuyoruz. Burada önemli nokta Contained seçeneğinin seçilmesi. Reuse seçeneğini yeni oluşturduğumuz Contained AG’de seçmiyoruz Reuse’un kullanımı ile alakalı yazı içerisinde detaylı olarak paylaşacağız. Görsel 2: New Availability Group as Contained   3.Adım: Hangi database’in Contained AG içerisinde olacağını belirliyoruz. Biz örneğimizde ContainedDB’yi örnek olarak ele alacağız. Görsel 3: […]

SQL Server Plan Cache Temizlemenin 9 Farklı Yolu

SQL Server 4 gün önce

SQL Server Cache Temizleme Yöntemleri Bu yazımızda SQL Server’da cache problemleri ile karşılaştığımızda hangi yöntemle nasıl çözümler üretebileceğimizin üzerinde duracağız. Bu işlem sistemde öngörülemeyen sorunlara yol açabileceğinden, komutları çalıştırmadan önce uzmanlardan yardım almanızda fayda olacaktır.   Cache üzerinde sorun yaşamamıza neden olacak bazı durumlar vardır; Query’lerde çok fazla Recompile kullanımı. Özellikle Store Procedure içinde yer alan Option Recompile kullanımı. Dynamic T-SQL code’ların çok fazla kullanımı. SQL Server Instance’ın ihtiyacı olan memory’den daha az memory verilmesi. Uzun süre çalışan ve size olarak çok fazla data çeken query’ler Index’siz kullanılan query’ler. Birden fazla SQL Server Instance kullanımında var olan Memory’den daha fazla memory kullanımına izin verilmesi.   Yukardaki durumlar memory dar boğazı yaşamamıza neden olacaktır ve bunun sonucunda cache temizleme ihtiyacı duyacağımız durumlar ortaya çıkması olasıdır. Cache temizlemenin birçok yöntemi vardır. Bu yöntemleri birlikte ele alacağız.   1-) DBCC FREEPROCCACHE Bu komut yardımı ile bir Resource pool’u ya da specific bir planı […]

1 Yorum

Yorum Yaz

Rastgele