הבלוג של גרי רשף

14/06/2010

האח הגדול עינו פקוחה (7) – השימוש ב-Profiler

Filed under: Uncategorized — תגיות: , , , — גרי רשף @ 09:40

הפרופיילר הוא כלי ותיק ומוכר, ולכן אינני מחדש כאן הרבה: מבוא כללי למי שכבר שכח או טרם התנסה, צילומי מסך, ולבסוף- הפעלה יזומה דרך ג'וב (קצת פחות מוכר).

נפעיל את הפרופיילר:

image

ניצור Trace חדש, נתחבר לשרת, ונבחר לאיזה קובץ להפנות את הפלט:

image

ניתן (ורצוי) להגביל את גודל הקובץ, וניתן גם להגדיר שעת סיום.
בלשונית Events Selection שב-Trace Properties ניתן להגדיר את אפשרויות ה-Trace, כאשר מה שמוצג כאן זו ברירת המחדל של המערכת שנועדה לסייע למתחילים:

image

לסיום לוחצים על Run במסך Trace Properties.
יש לעקוב אחר מה שמופיע על המסך, וכך ללמוד מה חשוב ומה מיותר, ולשנות את ההגדרות כדי להתאימן לצרכינו.

כדי לתזמן את הריצה באמצעות ג'וב – יש לעצור קודם כל את הריצה על ידי לחיצה על האייקון המתאים בסרגל (ריבוע אדום קטן):

image

ולשמור את ההגדרות בקובץ SQL:

image

כעת יש לסגור את הפרופיילר ולפתוח ב-SSMS את קובץ ה-SQL שנוצר.
בקובץ יש לשנות בשורה 19 (פחות או יותר..) את שם קובץ ה-Trace ולציין את המיקום והשם בו אנו מעוניינים, ללא סיומת trc (המערכת תוסיף את זה בעצמה ואם נתעקש לציין זה יתווסף פעמיים). לעצלנים אני מצרף את הסקריפט המתוקן שלי:

/****************************************************/

/* Created by: SQL Server 2008 R2 Profiler          */

/* Date: 06/14/2010  08:59:44 AM         */

/****************************************************/



-- Create a Queue

declare @rc int

declare @TraceID int

declare @maxfilesize bigint

set @maxfilesize = 5


-- Please replace the text InsertFileNameHere, with an appropriate

-- filename prefixed by a path, e.g., c:\MyFolder\MyTrace. The .trc extension

-- will be appended to the filename automatically. If you are writing from

-- remote server to local drive, please use UNC path and make sure server has

-- write access to your network share


exec @rc = sp_trace_create @TraceID output, 0, N'C:\Documents and Settings\Administrator\My Documents\GeriReshef\MyTrace', @maxfilesize, NULL

if (@rc != 0) goto error


-- Client side File and Table cannot be scripted


-- Set the events

declare @on bit

set @on = 1

exec sp_trace_setevent @TraceID, 14, 1, @on

exec sp_trace_setevent @TraceID, 14, 9, @on

exec sp_trace_setevent @TraceID, 14, 6, @on

exec sp_trace_setevent @TraceID, 14, 10, @on

exec sp_trace_setevent @TraceID, 14, 14, @on

exec sp_trace_setevent @TraceID, 14, 11, @on

exec sp_trace_setevent @TraceID, 14, 12, @on

exec sp_trace_setevent @TraceID, 15, 15, @on

exec sp_trace_setevent @TraceID, 15, 16, @on

exec sp_trace_setevent @TraceID, 15, 9, @on

exec sp_trace_setevent @TraceID, 15, 17, @on

exec sp_trace_setevent @TraceID, 15, 6, @on

exec sp_trace_setevent @TraceID, 15, 10, @on

exec sp_trace_setevent @TraceID, 15, 14, @on

exec sp_trace_setevent @TraceID, 15, 18, @on

exec sp_trace_setevent @TraceID, 15, 11, @on

exec sp_trace_setevent @TraceID, 15, 12, @on

exec sp_trace_setevent @TraceID, 15, 13, @on

exec sp_trace_setevent @TraceID, 17, 1, @on

exec sp_trace_setevent @TraceID, 17, 9, @on

exec sp_trace_setevent @TraceID, 17, 6, @on

exec sp_trace_setevent @TraceID, 17, 10, @on

exec sp_trace_setevent @TraceID, 17, 14, @on

exec sp_trace_setevent @TraceID, 17, 11, @on

exec sp_trace_setevent @TraceID, 17, 12, @on

exec sp_trace_setevent @TraceID, 10, 15, @on

exec sp_trace_setevent @TraceID, 10, 16, @on

exec sp_trace_setevent @TraceID, 10, 9, @on

exec sp_trace_setevent @TraceID, 10, 17, @on

exec sp_trace_setevent @TraceID, 10, 2, @on

exec sp_trace_setevent @TraceID, 10, 10, @on

exec sp_trace_setevent @TraceID, 10, 18, @on

exec sp_trace_setevent @TraceID, 10, 11, @on

exec sp_trace_setevent @TraceID, 10, 12, @on

exec sp_trace_setevent @TraceID, 10, 13, @on

exec sp_trace_setevent @TraceID, 10, 6, @on

exec sp_trace_setevent @TraceID, 10, 14, @on

exec sp_trace_setevent @TraceID, 12, 15, @on

exec sp_trace_setevent @TraceID, 12, 16, @on

exec sp_trace_setevent @TraceID, 12, 1, @on

exec sp_trace_setevent @TraceID, 12, 9, @on

exec sp_trace_setevent @TraceID, 12, 17, @on

exec sp_trace_setevent @TraceID, 12, 6, @on

exec sp_trace_setevent @TraceID, 12, 10, @on

exec sp_trace_setevent @TraceID, 12, 14, @on

exec sp_trace_setevent @TraceID, 12, 18, @on

exec sp_trace_setevent @TraceID, 12, 11, @on

exec sp_trace_setevent @TraceID, 12, 12, @on

exec sp_trace_setevent @TraceID, 12, 13, @on

exec sp_trace_setevent @TraceID, 13, 1, @on

exec sp_trace_setevent @TraceID, 13, 9, @on

exec sp_trace_setevent @TraceID, 13, 6, @on

exec sp_trace_setevent @TraceID, 13, 10, @on

exec sp_trace_setevent @TraceID, 13, 14, @on

exec sp_trace_setevent @TraceID, 13, 11, @on

exec sp_trace_setevent @TraceID, 13, 12, @on



-- Set the Filters

declare @intfilter int

declare @bigintfilter bigint


exec sp_trace_setfilter @TraceID, 10, 0, 7, N'SQL Server Profiler - 9b75686f-420a-47c4-aa0d-4ee0aca4d7ff'

-- Set the trace status to start

exec sp_trace_setstatus @TraceID, 1


-- display trace id for future references

select TraceID=@TraceID

goto finish


error:

select ErrorCode=@rc


finish:

go

כעת יש ליצור ג'וב חדש, ולהוסיף לו את הסקריפט הנ"ל.

את הג'וב יש לתזמן או להפעיל על ידי הפקודה 'exec msdb..sp_start_job 'J_Trace.

הג'וב עצמו יפעיל את ה-Trace ויסתיים בהצלחה, אך ה-Trace ימשיך לרוץ ללא קשר לג'וב, וכדי לעצור אותו באופן יזום – אם לא מסתמכים על זמן סיום או גודל מקסימלי שהוגדרו ב-Trace עצמו – ניתן להשתמש בקוד הבא:

Declare @TraceID Int;

Select    @TraceID=TraceID

From    :: fn_trace_getinfo(0)

Where    value='C:\Documents and Settings\Administrator\My Documents\GeriReshef\MyTrace.trc';

IF @TraceID Is Not Null

    Begin

    PRINT 'Closing the trace';

    Exec sp_trace_setstatus @TraceID, 0;

    Exec sp_trace_setstatus @TraceID, 2;

    End

Else

    Print 'The trace doesn''t exist';

הערה אם קובץ ה-Trace כבר קיים- יש למחוק אותו לפני ההפעלה כדי שלא תיווצר שגיאה.

את קובץ ה-Trace שנוצר יתן לתחקר בעזרת הפרופיילר: דבל-קליק על הקובץ אמור לפתוח אותו בעזרת הפרופיילר, ואם יש בעייה- פותחים את הפרופיילר, ומתפריט File פותחים את קובץ ה-Trace.
אפשרות אחרת- לשלוף ישירות מהקובץ:

Select *
From ::fn_Trace_Gettable('C:\Documents and Settings\Administrator\My Documents\GeriReshef\MyTrace.trc',default);

מודעות פרסומת

להגיב »

עדיין אין תגובות.

RSS feed for comments on this post. TrackBack URI

כתיבת תגובה

הזינו את פרטיכם בטופס, או לחצו על אחד מהאייקונים כדי להשתמש בחשבון קיים:

הלוגו של WordPress.com

אתה מגיב באמצעות חשבון WordPress.com שלך. לצאת מהמערכת / לשנות )

תמונת Twitter

אתה מגיב באמצעות חשבון Twitter שלך. לצאת מהמערכת / לשנות )

תמונת Facebook

אתה מגיב באמצעות חשבון Facebook שלך. לצאת מהמערכת / לשנות )

תמונת גוגל פלוס

אתה מגיב באמצעות חשבון Google+ שלך. לצאת מהמערכת / לשנות )

מתחבר ל-%s

יצירה של אתר חינמי או בלוג ב־WordPress.com.

%d בלוגרים אהבו את זה: