במדריך הזה נסביר איך להשתמש ב-HammerDB כדי לבצע בדיקות עומס במכונה של SQL Server ב-Compute Engine. במדריכים הבאים מוסבר איך להתקין מופע של SQL Server:
יש מספר כלים לבדיקת עומס. חלק מהם הם קוד פתוח וחינמיים, ואחרים דורשים רישיונות. HammerDB הוא כלי קוד פתוח שמתאים בדרך כלל להדגמת הביצועים של מסד הנתונים של SQL Server. המדריך הזה כולל את השלבים הבסיסיים לשימוש ב-HammerDB, אבל יש עוד כלים זמינים, וכדאי לבחור את הכלים שהכי מתאימים לעומסי העבודה הספציפיים שלכם.
מטרות
במדריך הזה נסביר איך:- הגדרת SQL Server לבדיקת עומסים
- התקנה והפעלה של HammerDB
- איסוף נתונים סטטיסטיים של זמן ריצה
- הפעלת בדיקת העומס של מדד הביצועים של עיבוד עסקאות (TPROC-C) שנגזר מהמפרט TPC C
עלויות
בנוסף לכל המכונות הקיימות של SQL Server שפועלות ב-Compute Engine, במדריך הזה נעשה שימוש ברכיבים בתשלום של Cloud de Confiance by S3NS, כולל:
- Compute Engine
- Windows Server
מחשבון עלויות יכול ליצור הערכת עלויות על סמך השימוש החזוי. בקישור שצירפנו אפשר לראות את הערכת העלויות של המוצרים שבהם נעשה שימוש במדריך הזה, והעלות הממוצעת יכולה להגיע ל-16 דולר (ארה"ב) ביום.
לפני שמתחילים
-
In the Cloud de Confiance console, on the project selector page, select or create a Cloud de Confiance project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Cloud de Confiance project.
- אם אתם לא משתמשים ב-Windows במחשב המקומי, צריך להתקין לקוח של Remote Desktop Protocol (RDP) מצד שלישי. מידע נוסף זמין במאמר בנושא לקוחות של Microsoft Remote Desktop.
הגדרת מכונה של SQL Server לבדיקת עומס
לפני שמתחילים, כדאי לבדוק שכללי חומת האש של Windows מוגדרים כך שיאפשרו תעבורה מכתובת ה-IP של מכונת Windows החדשה שיצרתם. לאחר מכן, יוצרים מסד נתונים חדש לבדיקת עומסים של TPCC ומגדירים חשבון משתמש באמצעות השלבים הבאים:
- לוחצים לחיצה ימנית על התיקייה Databases (מסדי נתונים) ב-SQL Server Management Studio, ואז בוחרים באפשרות New Database (מסד נתונים חדש).
- נותנים למסד הנתונים החדש את השם TPCC.
- מגדירים את הגודל ההתחלתי של קובץ הנתונים ל-190,000MB ואת קובץ היומן ל-65,000MB.
מגדירים את המגבלות של הגדלה אוטומטית לערכים גבוהים יותר בלחיצה על לחצני האליפסה, כמו שמוצג בצילום המסך הבא:
הגדרתם את קובץ הנתונים כך שיגדל ב-64MB עד לגודל בלתי מוגבל.
מגדירים את קובץ היומן כך שהגידול האוטומטי יהיה מושבת.
לוחצים על OK.
בתיבת הדו-שיח New Database (מסד נתונים חדש), בחלונית הימנית, בוחרים בדף Options (אפשרויות).
מגדירים את רמת התאימות לערך SQL Server 2022 (160).
מגדירים את מודל השחזור לפשוט, כדי שהטעינה לא תמלא את יומני העסקאות.
לוחצים על אישור כדי ליצור את מסד הנתונים TPCC. התהליך עשוי להימשך כמה דקות.
תמונת SQL Server שהוגדרה מראש מגיעה עם אימות Windows בלבד, ולכן תצטרכו להפעיל אימות במצב מעורב ב-SSMS, לפי ההוראות במדריך הזה.
כדי ליצור חשבון משתמש חדש ב-SQL Server בשרת מסד הנתונים עם הרשאת DBOwner, פועלים לפי השלבים הבאים. נותנים לחשבון את השם loaduser ומגדירים לו סיסמה מאובטחת.
חשוב להשתמש בכתובת ה-IP הפנימית, ולכן כדאי לרשום אותה באמצעות הפקודה
Get-NetIPAddress, כי היא חשובה לביצועים ולבטיחות.
התקנה של HammerDB
אפשר להריץ את HammerDB ישירות במכונת SQL Server. עם זאת, כדי לקבל בדיקה מדויקת יותר, צריך ליצור מכונת Windows חדשה ולבדוק את מכונת SQL Server מרחוק.
יצירת מופע
כדי ליצור מכונה חדשה של Compute Engine:
נכנסים לדף Create an instance במסוף Cloud de Confiance .
בשדה Name (שם), מזינים
hammerdb-instance.בקטע Machine configuration (הגדרת המכונה), בוחרים את סוג המכונה עם לפחות חצי ממספר המעבדים של מופע מסד הנתונים.
בקטע Boot disk (דיסק אתחול), לוחצים על Change (שינוי) ומבצעים את הפעולות הבאות:
- בכרטיסייה תמונות ציבוריות, בוחרים מערכת הפעלה של Windows Server.
- ברשימה Version (גרסה), לוחצים על Windows Server 2022 Datacenter.
- ברשימה סוג דיסק אתחול בוחרים באפשרות דיסק מתמיד סטנדרטי.
- כדי לאשר את האפשרויות של דיסק האתחול, לוחצים על בחירה.
כדי ליצור את המכונה הווירטואלית ולהפעיל אותה, לוחצים על Create.
התקנת התוכנה
כשהוא מוכן, משתמשים בלקוח RDP כדי להתחבר למופע החדש של Windows Server ומתקינים את התוכנה הבאה:
הפעלת HammerDB
אחרי שמתקינים את HammerDB, מפעילים את הקובץ hammerdb.bat. HammberDB לא מופיע ברשימת האפליקציות בתפריט 'התחלה'. כדי להריץ את HammerDB, משתמשים בפקודה הבאה:
C:\Program Files\HammerDB-VERSION\hammerdb.batמחליפים את VERSION בגרסה של HammerDB שהותקנה.
יצירת החיבור והסכימה
כשהאפליקציה פועלת, השלב הראשון הוא להגדיר את החיבור כדי ליצור את הסכימה.
- לוחצים לחיצה כפולה על SQL Server בחלונית Benchmark.
- בוחרים באפשרות TPROC-C.
מתוך האתר של HammerDB:
TPROC-C הוא עומס העבודה של OLTP שהוטמע ב-HammerDB, והוא נגזר מהמפרט של TPROC-C עם שינויים שנועדו להפוך את ההפעלה של HammerDB לפשוטה וחסכונית בכל סביבות מסדי הנתונים הנתמכות. עומס העבודה של HammerDB TPROC-C הוא עומס עבודה של קוד פתוח שנגזר מתקן ההשוואה TPROC-C, ולכן אי אפשר להשוות אותו לתוצאות שפורסמו של TPROC-C, כי התוצאות עומדות בדרישות של קבוצת משנה ולא של תקן ההשוואה המלא TPROC-C. השם של עומס העבודה TPROC-C ב-HammerDB הוא קיצור של Transaction Processing Benchmark derived from the TPC "C " specification (מדד ביצועים של עיבוד עסקאות שנגזר מהמפרט TPC"C").
לוחצים על אישור.
לוחצים על סכימה ואז לוחצים פעמיים על אפשרויות.
ממלאים את הטופס באמצעות כתובת ה-IP, שם המשתמש והסיסמה, כמו שמופיע בתמונה הבאה:
מגדירים את מנהל ההתקן של SQL Server ODBC למנהל ההתקן OBDC 18 ל-SQL Server
במקרה הזה, מספר המחסנים (הקנה מידה) מוגדר ל-460, אבל אפשר לבחור ערך אחר. יש הנחיות שמציעות 10 עד 100 מחסנים לכל CPU. במדריך הזה, מגדירים את הערך הזה ל-10 כפול מספר ליבות המעבד: 160 עבור מופע עם 16 ליבות.
בקטע Virtual Users to Build Schema (משתמשים וירטואליים ליצירת סכימה), בוחרים מספר שהוא בין 1 ל-2 ממספר ה-vCPU של הלקוח. כדי להגדיל את המספר, לוחצים על הסרגל האפור לצד פס ההזזה.
מבטלים את הסימון של האפשרות Use BPC Option (שימוש באפשרות BPC).
לוחצים על אישור.
לוחצים לחיצה כפולה על האפשרות Build (בנייה) מתחת לקטע Schema Build (בניית סכימה) כדי ליצור את הסכימה ולטעון את הטבלאות. אחרי שהתהליך מסתיים, לוחצים על סמל הפנס האדום בחלק העליון המרכזי של המסך כדי להשמיד את המשתמש הווירטואלי ולעבור לשלב הבא.
אם יצרתם את מסד הנתונים שלכם באמצעות מודל השחזור Simple, יכול להיות שתרצו לשנות אותו חזרה ל-Full בשלב הזה כדי לקבל בדיקה מדויקת יותר של תרחיש ייצור. השינוי הזה ייכנס לתוקף רק אחרי שתבצעו גיבוי מלא או גיבוי דיפרנציאלי כדי להפעיל את תחילת שרשרת היומנים החדשה.
יצירת סקריפט ההפעלה
HammerDB משתמש בסקריפט של מנהל ההתקן כדי לתזמן את הזרימה של הצהרות SQL למסד הנתונים, וכך ליצור את העומס הנדרש.
- בחלונית Benchmark, מרחיבים את הקטע Driver Script ולוחצים לחיצה כפולה על Options.
- מוודאים שההגדרות זהות לאלה שהשתמשתם בהן בתיבת הדו-שיח Schema Build.
- בוחרים באפשרות Timed Driver Script (סקריפט של מנהל התקן מתוזמן).
- האפשרות Checkpoint when complete (נקודת ביקורת בסיום) מאלצת את מסד הנתונים לכתוב את כל הנתונים לדיסק בסיום הבדיקה, ולכן כדאי לסמן אותה רק אם מתכננים להריץ כמה בדיקות ברצף.
- כדי להבטיח בדיקה יסודית, מגדירים את Minutes of Rampup Time (דקות להגברת התנועה) ל-5 ואת Minutes for Test Duration (דקות למשך הבדיקה) ל-20.
- לוחצים על אישור כדי לצאת מתיבת הדו-שיח.
- לוחצים לחיצה כפולה על Load (טעינה) בקטע Driver Script (תסריט של מנהל התקן) בחלונית Benchmark (השוואה) כדי להפעיל את התסריט של מנהל ההתקן.
יצירת משתמשים וירטואליים
כדי ליצור עומס ריאליסטי, בדרך כלל צריך להריץ סקריפטים בתור כמה משתמשים שונים. יוצרים כמה משתמשים וירטואליים לבדיקה.
- מרחיבים את הקטע משתמשים וירטואליים ולוחצים פעמיים על אפשרויות.
- אם הגדרתם את מספר המחסנים (הקנה מידה) ל-160, צריך להגדיר את המשתמשים הווירטואליים ל-16, כי בהנחיות של TPROC-C מומלץ להשתמש ביחס של 1:10 כדי למנוע נעילת שורות. מסמנים את תיבת הסימון Show Output כדי להפעיל הודעות שגיאה במסוף.
- לוחצים על אישור.
איסוף נתונים סטטיסטיים של זמן ריצה
ב-HammerDB וב-SQL Server לא קל לאסוף נתונים סטטיסטיים מפורטים של זמן הריצה. למרות שהנתונים הסטטיסטיים זמינים ב-SQL Server, צריך לתעד ולחשב אותם באופן קבוע. אם עדיין אין לכם הליך או כלי שיעזרו לכם לתעד את הנתונים האלה, אתם יכולים להשתמש בהליך שבקטע הזה כדי לתעד כמה מדדים שימושיים במהלך הבדיקה. התוצאות ייכתבו לקובץ CSV בספרייה temp של Windows. אפשר להעתיק את הנתונים לגיליון אלקטרוני ב-Google Sheets באמצעות האפשרות הדבקה מיוחדת > הדבקת CSV.
כדי להשתמש בהליך הזה, צריך קודם להפעיל באופן זמני את OLE Automation Procedures כדי לכתוב את הקובץ לדיסק. חשוב להשבית את ההגדרה אחרי הבדיקה:
sp_configure 'show advanced options', 1; GO RECONFIGURE; GO sp_configure 'Ole Automation Procedures', 1; GO RECONFIGURE; GO
הנה הקוד ליצירת הפרוצדורה sp_write_performance_counters ב-SQL Server Management Studio. לפני שמתחילים את בדיקת העומס, צריך לבצע את התהליך הזה ב-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
הרצת בדיקת העומס TPROC-C
ב-SQL Server Management Studio, מריצים את הליך האיסוף באמצעות הסקריפט הבא:
Use master Go exec dbo.sp_write_performance_counters
במכונה של Compute Engine שבה התקנתם את HammerDB, מפעילים את הבדיקה באפליקציית HammerDB:
- בחלונית Benchmark, בקטע Virtual Users, לוחצים פעמיים על Create כדי ליצור את המשתמשים הווירטואליים, וכך מפעילים את הכרטיסייה Virtual User Output.
- כדי להתחיל את הבדיקה, לוחצים לחיצה כפולה על Run (הפעלה) ממש מתחת לאפשרות Create (יצירה).
- אחרי שהבדיקה תושלם, תוכלו לראות את החישוב של מספר העסקאות בדקה (TPM) בכרטיסייה Virtual User Output.
- תוכלו למצוא את התוצאות של תהליך איסוף המידע בספרייה
c:\Windows\temp. - שומרים את כל הערכים האלה בגיליון אלקטרוני של Google ומשתמשים בהם כדי להשוות בין כמה הרצות של בדיקות.
הסרת המשאבים
אחרי שמסיימים את המדריך, אפשר למחוק את המשאבים שנוצרו, כדי שהם יפסיקו להשתמש במכסה ולצבור חיובים. בסעיפים הבאים מוסבר איך למחוק או להשבית את המשאבים האלו.
מחיקת הפרויקט
הדרך הקלה ביותר לבטל את החיוב היא למחוק את הפרויקט שיצרתם בשביל המדריך.
כדי למחוק את הפרויקט:
- במסוף Cloud de Confiance , נכנסים לדף Manage resources.
- ברשימת הפרויקטים, בוחרים את הפרויקט שרוצים למחוק ולוחצים על Delete.
- כדי למחוק את הפרויקט, כותבים את מזהה הפרויקט בתיבת הדו-שיח ולוחצים על Shut down.
מחיקת מכונות
כדי למחוק מכונה של Compute Engine:
- נכנסים לדף VM instances במסוף Cloud de Confiance .
- מסמנים את התיבה שלצד המופע שרוצים למחוק.
- כדי למחוק את המכונה, לוחצים על More actions ואז על Delete ופועלים לפי ההוראות.
המאמרים הבאים
- מומלץ לעיין במדריך לשיטות מומלצות ל-SQL Server.
- כדאי להעמיק את הקריאה ולהכיר דוגמאות לארכיטקטורות, תרשימים ושיטות מומלצות בנושאי Google Cloud. כל אלה זמינים במרכז הארכיטקטורה של Cloud.