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

27/04/2010

האח הגדול עינו פקוחה (4) – שימוש ב-Extended Events

Filed under: Uncategorized — תגיות: — גרי רשף @ 14:03

נפתח ביצירת Event Session (יש לוודא שהמחיצה קיימת!):

 

CREATE EVENT SESSION MyEventSession ON SERVER

ADD EVENT sqlserver.sql_statement_completed(ACTION (sqlserver.database_id, sqlserver.sql_text, sqlserver.session_id,sqlserver.tsql_stack, sqlserver.username, sqlserver.client_hostname) WHERE sqlserver.database_id=2),

ADD EVENT sqlserver.sql_statement_starting(ACTION (sqlserver.database_id, sqlserver.sql_text, sqlserver.session_id,sqlserver.tsql_stack, sqlserver.username, sqlserver.client_hostname) WHERE sqlserver.database_id=2)

ADD TARGET package0.asynchronous_file_target(set FileName = 'c:\tmp\EventSession.xel',MetaDataFile = 'c:\tmp\EventSession.xem')

GO

1. נאסוף נתונים על אירועי sql_statement_starting ו-sql_statement_completed.

כדי לקבל פרטים על אירועים אחרים שניתן לתחקר:

 

Select    *

From    sys.dm_xe_objects 

Where    object_type='event'

Order By name

2. הנתונים שיאספו – מלבד אלו שנאספים אוטומטית – הם אלו שמופיעים בתוך הסוגריים לאחר פקודת Action,

כדי לקבל פרטים על נתונים אחרים שניתן לאסוף:

 

Select    *

From    sys.dm_xe_objects 

Where    object_type='action'

Order By name

3. ניתן לסנן את האירועים – כפי שמופיע לאחר הפרדיקט Where,

וכדי לקבל פרטים על אפשרויות סינון נוספות:

 

Select    *

From    sys.dm_xe_objects 

Where    object_type='pred_source'

Order By name

4. ה-Target (קובץ היעד במקרה זה) הוא קובץ אסינכרוני,

אך יש אופציות ליעדים אחרים (במקום או בנוסף):

 

Select    *

From    sys.dm_xe_objects 

Where    object_type='target'

Order By name

כעת נפעיל את ה-Event Session שיצרנו:

 

ALTER EVENT SESSION MyEventSession ON SERVER STATE = Start

GO

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

 

Select * From sys.objects

Go

Select * From sys.tables

Go

..ונעצור את ה-Event Session, ונבטל אותו (אל דאגה- הקובץ קיים יחד עם הנתונים שנאספו):

 

ALTER EVENT SESSION MyEventSession ON SERVER STATE = Stop

GO

DROP EVENT SESSION MyEventSession ON SERVER

GO

נשלוף את הנתונים מהקובץ:

 

Select    *,

        CAST(event_data as XML) as event_data_xml

From    sys.fn_xe_file_target_read_file('c:\tmp\EventSession*.xel','c:\tmp\EventSession*.xem', null, null)

Go

המידע הרלוונטי נמצא בעמודה event_data ובהמה שלה ל-xml,

וכדי לעיין בו בצורה נוחה נמיר אותו לתצוגה טבלאית:

With T As

(SELECT    X.value('(./@name)', 'varchar(1000)') as event_name,

        X.value('(./data[@name="source_database_id"]/value)[1]', 'int') as source_database_id,

        X.value('(./data[@name="object_id"]/value)[1]', 'int') as object_id,

        X.value('(./data[@name="object_type"]/value)[1]', 'varchar(25)') as object_type,

        X.value('(./data[@name="duration"]/value)[1]', 'bigint') as duration,

        X.value('(./data[@name="cpu"]/value)[1]', 'bigint') as cpu,

        X.value('(./data[@name="reads"]/value)[1]', 'bigint') as reads,

        X.value('(./data[@name="writes"]/value)[1]', 'bigint') as writes,

        X.value('(./action[@name="sql_text"]/value)[1]', 'varchar(Max)') as sql_text,

        X.value('(./action[@name="database_id"]/value)[1]', 'int') as database_id,

        X.value('(./action[@name="session_id"]/value)[1]', 'int') as session_id,

        X.value('(./action[@name="username"]/value)[1]', 'varchar(Max)') as username,

        X.value('(./action[@name="client_hostname"]/value)[1]', 'varchar(Max)') as client_hostname

FROM    (SELECT CAST(event_data AS XML) xml_event_data 

        FROM sys.fn_xe_file_target_read_file('c:\tmp\data2*.xel','c:\tmp\data2*.xem', NULL, NULL)) AS event_table

        CROSS APPLY xml_event_data.nodes('//event') (X))

Select    event_name,

        source_database_id,

        DB_NAME(source_database_id) source_database_name,

        object_id,

        object_type,

        duration,

        cpu,

        reads,

        writes,

        sql_text,

        database_id,

        DB_NAME(database_id) database_name,

        session_id,

        username,

        client_hostname

From    T;

Go

לסיום נמחק את הקבצים כך (או בדרך אחרת):

XP_CMDSHELL 'del c:\tmp\EventSession.*'

GO

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

להגיב »

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

RSS feed for comments on this post. TrackBack URI

להשאיר תגובה

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

הלוגו של WordPress.com

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

תמונת Twitter

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

תמונת Facebook

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

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

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

מתחבר ל-%s

בלוג בוורדפרס.קום.

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