Կիսվել հիմա ՝
Բառը թաքցնել
8. Գործնական օգտագործման դեպքեր և օրինակներ
8.6 Տվյալների բազայի վնասման և ամբողջականության խնդիրների հայտնաբերում

1: ներածություն

1.1 Ի՞նչ են SQL Server Երկարաձգված միջոցառումներ;

SQL Server Extended Events-ը թեթև արդյունավետության մոնիթորինգի համակարգ է, որը թույլ է տալիս ադմինիստրատորներին և մշակողներին հավաքել և վերլուծել սերվերի գործունեության մանրամասն տվյալներ: Այս համակարգը ինտեգրված է SQL Server Տվյալների բազայի շարժիչը տրամադրում է համապարփակ պատկերացում ինչպես սովորական գործողությունների, այնպես էլ խնդիրների լուծման սցենարների վերաբերյալ։

1.2 Ինչո՞ւ օգտագործել ընդլայնված իրադարձություններ մոնիթորինգի համար։

SQL Server Extended Events-ը մի քանի համոզիչ առավելություններ է առաջարկում տվյալների բազայի մոնիթորինգի և խնդիրների լուծման համար.

  • Նվազագույն ազդեցություն կատարողականի վրա՝ թեթև ճարտարապետության շնորհիվ
  • Տվյալների հավաքագրման և իրադարձությունների զտման մանրացված վերահսկողություն
  • Անհատականացվող տվյալների հավաքագրում՝ հարմարեցված մոնիթորինգի կոնկրետ կարիքներին
  • Միաժամանակ մի քանի փաթեթներից իրադարձություններ գրանցելու ունակություն
  • ճկուն ֆիլտրման հնարավորություններ՝ համապատասխան գործողությունների վրա կենտրոնանալու համար
  • Աջակցություն արտադրական համակարգի մոնիթորինգին՝ առանց օգտագործողի փորձը վատթարացնելու
  • Համապարփակ կատարողականի չափանիշների հետևում
  • Առաջադեմ ախտորոշիչ հնարավորություններ խնդիրների լուծման համար
  • Աուդիտի հետքի պահպանում՝ համապատասխանության պահանջների համար
  • Իրական ժամանակի և պատմական տվյալների վերլուծության տարբերակներ

1.3 Ընդլայնված իրադարձություններ ընդդեմ SQL Server Պրոֆիլավոր

Ժամանակ SQL Server Պրոֆիլավոր Լինելով ավանդական մոնիթորինգի գործիք, MS SQL Extended Events-ը ապահովում է ավելի արդյունավետ այլընտրանք: Extended Events-ը սպառում է ավելի քիչ համակարգային ռեսուրսներ և առաջարկում է ավելի լավ մասշտաբայնություն արտադրական միջավայրերի համար:

SQL Server Profiler-ը այժմ հնացած է, և Microsoft-ը խորհուրդ է տալիս բոլոր մոնիթորինգային գործողությունների համար անցնել Extended Events-ի։

2. Ընդլայնված իրադարձությունների ճարտարապետության ըմբռնումը

2.1 Ընդլայնված իրադարձությունների շարժիչի բաղադրիչներ

Ընդլայնված իրադարձությունների շարժիչը բաղկացած է մի քանի հիմնական բաղադրիչներից, որոնք համատեղ աշխատում են իրադարձությունների տվյալները գրանցելու, մշակելու և պահելու համար: Այս բաղադրիչների ըմբռնումը կօգնի ձեզ մշակել արդյունավետ մոնիթորինգի լուծումներ:

  • Դիսպետչեր՝ Դիսպետչերի բաղադրիչը համակարգում է իրադարձությունների հոսքը իրադարձությունների աղբյուրներից դեպի ընդլայնված իրադարձությունների շարժիչը: Երբ իրադարձություն է տեղի ունենում, դիսպետչերը ստանում է ծանուցումը և ուղղորդում այն ​​ակտիվ նիստերին, որոնք բաժանորդագրվել են այդ կոնկրետ իրադարձության տեսակին:
  • բուֆեր: Բուֆերները ժամանակավորապես պահպանում են իրադարձությունների տվյալները հիշողության մեջ՝ նախքան թիրախներում գրելը: Այս բուֆերացման մեխանիզմը բարելավում է կատարողականը՝ նվազեցնելով մուտք/ելք գործողությունները: Բուֆերի չափը և կառավարման կարգավորումները կարող են կարգավորվել՝ հիշողության օգտագործումը տվյալների հավաքագրման պահանջների հետ հավասարակշռելու համար:
  • Սեմինար. Սեսիան սահմանում է իրադարձությունների մոնիթորինգի շրջանակը։ Այն նշում է, թե որ իրադարձությունները պետք է գրանցել, ինչ գործողություններ կատարել, որ պրեդիկատները կիրառել և որտեղ պահել արդյունքները։ Սեսիաները կարող են ստեղծվել, փոփոխվել, մեկնարկվել և դադարեցվել անկախ։
  • Նպատակային օրինակ՝ Նպատակային օրինակները ներկայացնում են գրանցված իրադարձությունների տվյալների պահպանման վայրերը: Յուրաքանչյուր սեսիա կարող է գրել մեկ կամ մի քանի նպատակակետերի վրա, ինչպիսիք են ֆայլերը, օղակաձև բուֆերները կամ հաշվիչները: Նպատակակետերը մշակում և պահպանում են իրադարձությունների տեղեկատվությունը հետագա վերլուծության համար:

2.2 Միջոցառումների փաթեթներ

SQL Server Extended Events-ը ֆունկցիոնալությունը կազմակերպում է փաթեթների մեջ: Յուրաքանչյուր փաթեթ պարունակում է փոխկապակցված իրադարձություններ, գործողություններ, տեսակներ, պրեդիկատաներ և թիրախներ: Հաճախակի օգտագործվող փաթեթներից են sqlserver-ը, sqlos-ը և package0-ը:

  • sqlserver փաթեթը տրամադրում է տվյալների բազային հատուկ իրադարձություններ, ինչպիսիք են հարցումները և գործարքները։
  • SQLOS փաթեթը պարունակում է օպերացիոն համակարգի իրադարձություններ։
  • Package0-ը առաջարկում է ընդհանուր նշանակության ֆունկցիոնալություն, որն օգտագործվում է բոլոր փաթեթներում։

2.3 Իրադարձությունների տեսակներ և դաշտեր

Իրադարձությունները ներկայացնում են իրադարձություններ SQL Server որը դուք ցանկանում եք վերահսկել: Յուրաքանչյուր իրադարձության տեսակ ունի նախապես սահմանված դաշտեր, որոնք գրանցում են համապատասխան տեղեկատվությունը: Օրինակ, sql_statement_completed իրադարձությունը ներառում է տևողության, CPU ժամանակի, ընթերցումների և գրառումների դաշտեր:

Իրադարձությունները կարող են լինել համաժամանակյա կամ ասինխրոն: Սինխրոն իրադարձությունները տեղի են ունենում գործողության ընթացքում, մինչդեռ ասինխրոն իրադարձությունները տեղի են ունենում ավարտից հետո: Իրադարձությունների բնութագրերի ըմբռնումը կօգնի ձեզ ընտրել համապատասխան իրադարձություններ ձեր մոնիթորինգի կարիքների համար:

2.4 բաժնետոմս

Գործողությունները լրացուցիչ տեղեկատվություն են ավելացնում գրանցված իրադարձություններին: Երբ իրադարձություն է տեղի ունենում, դրան կից գործողությունները կատարվում են՝ լրացուցիչ համատեքստ հավաքելու համար, ինչպիսիք են SQL տեքստը, սեսիայի ID-ն կամ կանչերի կույտի տեղեկատվությունը:

Հաճախակի գործողությունների թվում են sql_text-ը՝ հարցման հրահանգները գրանցելու համար, database_name-ը՝ տվյալների բազան նույնականացնելու համար, և client_hostname-ը՝ սկզբնական սերվերը հետևելու համար: Գործողությունները ապահովում են խնդիրների լուծման և վերլուծության համար անհրաժեշտ համատեքստ:

2.5 թիրախ

Նպատակակետերը որոշում են, թե ինչպես և որտեղ են պահվում իրադարձությունների տվյալները։ SQL Server Ընդլայնված իրադարձությունները աջակցում են թիրախների բազմաթիվ տեսակներ, ներառյալ՝

  • event_file սկավառակի պահեստավորման համար, ապահովելով մշտական ​​պահեստ մանրամասն վերլուծության համար
  • ring_buffer հիշողության վրա հիմնված պահպանման համար, որն առաջարկում է արագ մուտք դեպի վերջին իրադարձությունները՝ նվազագույն ծախսերով
  • event_counter՝ պարզ հաշվարկի համար
  • հիստոգրամ խմբավորման համար
  • զույգերի_համապատասխանեցում՝ կապակցված իրադարձությունների համադրման համար

2.6 Նախադրյալներ (ֆիլտրեր)

Նախադրյալները զտում են իրադարձությունները՝ հիմնվելով նշված պայմանների վրա, նվազեցնելով գրանցված տվյալների ծավալը: Կարող եք զտել ըստ տվյալների բազայի անվան, ծրագրի անվան, սեսիայի ID-ի, տևողության շեմերի կամ ցանկացած իրադարձության դաշտի արժեքի:

Պրեդիկատների արդյունավետ օգտագործումը նվազագույնի է հասցնում կատարողականի վրա ազդեցությունը՝ գրանցելով միայն համապատասխան իրադարձությունները: Բարդ պրեդիկատները համատեղում են բազմաթիվ պայմաններ՝ օգտագործելով տրամաբանական օպերատորներ՝ ճշգրիտ զտման չափանիշներ ստեղծելու համար:

3. Ընդլայնված միջոցառման սեսիայի վիճակներ և կյանքի ցիկլ

3.1 Սեսիայի վիճակներ՝ ՍՏԵՂԾԵԼ, ՓՈՓՈԽԵԼ և ԴՐՈՊ

Ընդլայնված միջոցառումների սեսիաները անցնում են առանձին վիճակներով.

  • CREATE EVENT SESSION հրամանը սահմանում է նոր սեսիա, բայց չի մեկնարկում այն։ Սեսիան գոյություն ունի դադարեցված վիճակում մինչև այն բացահայտորեն ակտիվացվի։
  • ALTER EVENT SESSION հրամանը փոփոխում է սեսիայի կոնֆիգուրացիան կամ փոխում է դրա վիճակը՝ կանգառի և մեկնարկի միջև։
  • DROP EVENT SESSION հրամանը ամբողջությամբ հեռացնում է սեսիայի սահմանումը սերվերից։

3.2 Սեսիայի բովանդակությունը և բնութագրերը

Յուրաքանչյուր սեսիա պարունակում է իրադարձությունների, գործողությունների, թիրախների և պրեդիկատների հավաքածու։ Սեսիաներն ունեն ենթադրյալ սահմաններ, որոնք սահմանում են դրանց շրջանակը և վարքագիծը։ Կարգավորման տարբերակները կառավարում են հիշողության բաշխումը, իրադարձությունների պահպանումը և ուղարկման լատենտությունը։

Սեսիայի բնութագրերի մեջ են մտնում՝ արդյոք դրանք պահպանվում են սերվերի վերագործարկումների ընթացքում, հիշողության առավելագույն բաշխումը և թե ինչպես են դրանք կառավարում հիշողության ծանրաբեռնվածությունը։ Այս կարգավորումները զգալիորեն ազդում են սեսիայի վարքագծի և ռեսուրսների սպառման վրա։

3.3 Սեսիայի սահմաններ և փաթեթներ

Սեսիայի սահմանները սահմանում են իրադարձությունների, թիրախների և փաթեթների միջև փոխհարաբերությունները: Մեկ փաթեթի իրադարձությունները կարող են առաջացնել գործողություններ մեկ այլ փաթեթից, ապահովելով ճկունություն տվյալների հավաքագրման ռազմավարություններում:

Փաթեթների փոխհարաբերությունները թույլ են տալիս համատեղել բազմաթիվ աղբյուրներից ստացված իրադարձությունները մեկ սեսիայի ընթացքում: Այս հնարավորությունը հնարավորություն է տալիս համապարփակ մոնիթորինգի սցենարներ, որոնք ընդգրկում են տարբեր SQL Server ենթահամակարգեր։

4. SSMS-ի միջոցով ընդլայնված միջոցառումների սեսիաների ստեղծում

4.1 Նախապայմաններ և կարգավորում

Ստեղծելուց առաջ SQL Server Երկարացված միջոցառումների նիստերի համար համոզվեք, որ ունեք համապատասխան թույլտվություններ: Ձեզ անհրաժեշտ է ALTER ANY EVENT SESSION թույլտվություն սերվերի շրջանակներում նիստերի համար կամ CONTROL թույլտվություն տվյալների բազայի շրջանակներում նիստերի համար:

Հաստատեք դա SQL Server Management Studio-ն տեղադրված է և միացված է ձեր թիրախային օրինակին: Ծանոթացեք մոնիթորինգի պահանջներին և որոշեք, թե որ իրադարձություններն ու թիրախներն են առավելագույնս համապատասխանում ձեր կարիքներին:

4.2 Ընդլայնված իրադարձություններին մուտք գործելը օբյեկտների հետազոտիչում

SSMS-ում ընդլայնված իրադարձությունների ինտերֆեյսին մուտք գործելու համար հետևեք հետևյալ քայլերին.

  1. բաց SQL Server Management Studio-ն և միացեք ձեր SQL Server օրինակ:
  2. Օբյեկտների հետազոտիչում ընդարձակեք կառավարում -> Ընդլայնված իրադարձություններ.
  3. «Ընդլայնված իրադարձություններ» հանգույցը պարունակում է Sessions և Փաթեթներ թղթապանակներ ձեր մոնիթորինգի կարգավորումները կառավարելու համար։

Մուտք գործեք ընդլայնված միջոցառումների ինտերֆեյս՝ SQL Server Կառավարման ստուդիա.

4.3 Ստեղծեք նոր սեսիա

Նոր նիստ ստեղծելու համար՝

    1. Անմիջապես սեղմիր վրա Sessions թղթապանակը ներքևում Ընդլայնված իրադարձություններ.
    2. ընտրել Նոր նստաշրջան կարգավորման երկխոսության պատուհանը բացելու համար: Հետևյալ բովանդակությունը կօգտագործի այս մեթոդը՝ նոր սեսիա ստեղծելու համար:

Ստեղծեք ընդլայնված միջոցառումների նոր նստաշրջան SQL Server Կառավարման ստուդիա.

Նշում: Նոր սեսիայի օգնական հասանելի է նաև ավելի ուղղորդված փորձի համար։

4.3.1 Էջի ընդհանուր կարգավորում

Մասին ընդհանուր էջում, կարգավորեք սեսիայի հիմնական հատկությունները՝

  1. Մուտքագրեք նիստի անունը դաշտում Սեսիայի անվանումը դաշտ։ Օգտագործեք նկարագրական անվանումներ, որոնք ցույց են տալիս մոնիթորինգի նպատակը։
  2. Ընտրովի ընտրել Սկսեք իրադարձության նիստը սերվերի գործարկման ժամանակ ավտոմատ նիստի ակտիվացումը միացնելու համար։
  3. Նիստի լռելյայն ձևանմուշն է՝ ԲլոկԴուք կարող եք օգտագործել այլ ձևանմուշներ, եթե օգտագործում եք նախապես սահմանված կարգավորում։

Ընդլայնված միջոցառումների նիստի ընդհանուր էջը SQL Server Կառավարման ստուդիա.

4.3.2 Միջոցառումների էջի կարգավորում

  Իրադարձություններ էջը թույլ է տալիս ընտրել, թե որ իրադարձություններն եք վերահսկելու։

  1. Ընտրել Իրադարձություններ էջ ձախից Ընտրեք էջ վահանակի վրա.
  2. Է Միջոցառումների գրադարան, դիտեք հասանելի միջոցառումները կամ օգտագործեք որոնման գործառույթը։
  3. Զտեք իրադարձությունները՝ մուտքագրելով բանալի բառեր, ինչպիսիք են «sql_statement_completed»-ը՝ համապատասխան իրադարձությունները գտնելու համար։
  4. Ընտրեք ցանկալի իրադարձությունը, օրինակ՝ sql_statement_completed:
  5. Սեղմեք աջ սլաքի կոճակը՝ միջոցառումը տեղափոխելու համար Ընտրված միջոցառումներ ցուցակը:

Ընդլայնված միջոցառումների նիստի միջոցառումների էջը SQL Server Կառավարման ստուդիա.

4.3.3 Տվյալների պահպանման կարգավորում

  Տվյալների պահպանում էջը սահմանում է, թե որտեղ են պահվում իրադարձությունների տվյալները՝

  1. Ընտրել Տվյալների պահպանում էջ ձախից Ընտրեք էջ վահանակի վրա.
  2. Է Կառույցների մեջ տարածքում, ընտրեք թիրախի տեսակը իջնող ցանկից։

Ընդլայնված իրադարձությունների նստաշրջանի տվյալների պահպանման էջը SQL Server Կառավարման ստուդիա.

(1) event_file Նպատակ

event_file նպատակային ֆայլը տվյալները պահում է .xel ընդլայնմամբ սկավառակի ֆայլերի վրա։

  1. ընտրել իրադարձության_ֆայլ նպատակային տեսակի իջնող ցանկից։
  2. Նշեք ֆայլի ուղին, օրինակ՝ C:\temp\YourSession_Target.xel:
  3. Կարգավորեք տեղափոխման տարբերակները՝ սկավառակի տարածքը կառավարելու համար՝ սահմանելով ֆայլի առավելագույն չափը և քանակը։
  4. Նպատակակետը անընդհատ գրում է իրադարձությունները մինչև սեսիայի ավարտը կամ պահեստավորման սահմանաչափերի լրացումը։

SSMS-ում սեսիայի թիրախը սահմանեք event_file-ի վրա։

(2) ring_buffer Նպատակ

ring_buffer թիրախը պահպանում է իրադարձությունները հիշողության մեջ՝ սկավառակի մուտք/ելք առանց արագ մուտք գործելու համար։

  1. ընտրել օղակաձև_բուֆեր որպես թիրախային տեսակ։
  2. Կարգավորեք բուֆերի համար հիշողության առավելագույն բաշխումը։
  3. Հասկացեք, որ բուֆերը լցվելիս հին իրադարձությունները անտեսվում են, ինչը սա հարմար է դարձնում վերջին ակտիվության մոնիթորինգի համար։

Սահմանեք թիրախը ring_buffer-ի վրա Extended Events սեսիայի համար SQL Server Կառավարման ստուդիա.

(3) event_counter

event_counter նպատակային ֆունկցիան պարզապես հաշվում է իրադարձությունների առաջացումը՝ առանց մանրամասն տվյալներ պահելու: Սա ապահովում է նվազագույն ծախսեր, երբ ձեզ անհրաժեշտ է միայն հաճախականության մասին տեղեկատվություն:

Սահմանեք event_counter-ը Extended Events սեսիայի համար SQL Server Կառավարման ստուդիա.

(4) հիստոգրամ Նպատակ

Հիստոգրամի թիրախը խմբավորում է իրադարձությունները որոշակի դաշտի արժեքով՝ ստեղծելով բաշխման վիճակագրություն: Սա օգտակար է ընդհանուր օրինաչափությունները կամ բարձր հաճախականության արժեքները նույնականացնելու համար:

Սահմանեք հիստոգրամը ընդլայնված իրադարձությունների սեսիայի համար SQL Server Կառավարման ստուդիա.

(5) զույգերի համապատասխանեցման թիրախ

Pair_matching թիրախը կապակցում է կապակցված իրադարձությունները, ինչպիսիք են կողպեքի ձեռքբերումը և անջատումը: Սա հնարավորություն է տալիս վերլուծել զույգային գործողությունները և դրանց ժամանակային կապերը:

SSMS-ում սեսիայի թիրախը սահմանել pair_matching-ի վրա։

4.3.4 Լրացուցիչ կարգավորումներ

  Առաջադեմ էջը տրամադրում է սեսիայի մակարդակի կարգավորման տարբերակներ՝

  1. Ընտրել Առաջադեմ էջ ձախից Ընտրեք էջ վահանակի վրա.
  2. Համաձեւել Իրադարձությունների պահպանման ռեժիմ վերահսկելու համար, թե ինչպես են իրադարձությունները մշակվում հիշողության ճնշման տակ։
  3. հավաքածու Առավելագույն ուղարկման լատենտություն իրական ժամանակում մշակումը համակարգի աշխատանքի հետ հավասարակշռելու համար։
  4. Համաձեւել Հիշողության առավելագույն չափը և Միջոցառման առավելագույն չափը ձեր մոնիթորինգի պահանջների հիման վրա։
  5. ընտրել Հիշողության բաժանման ռեժիմ մեկ կամ բազմապրոցեսորային միջավայրերի համար օպտիմալացման համար։

Նիստի առաջադեմ էջը՝ SQL Server Կառավարման ստուդիա.

4.4 Իրադարձությունների ֆիլտրերի (պրեդիկատների) կարգավորում

Պրեդիկատները նվազեցնում են տվյալների ծավալը՝ իրադարձությունները զտելով որոշակի չափանիշների հիման վրա: Ֆիլտրերը կարգավորելու համար՝

  1. Մասին Իրադարձություններ էջում ընտրեք այն իրադարձությունը, որը ցանկանում եք զտել, օրինակ՝ «sql_statement_completed»:
  2. Սեղմել Համաձեւել միջոցառման կարգավորման երկխոսության պատուհանը բացելու համար։
    Կարգավորեք ընդլայնված իրադարձությունների նիստի իրադարձությունը SQL Server Կառավարման ստուդիա.
  3. Ընտրել Ֆիլտր (Նախաբան) էջանիշը.
  4. Է Դաշտ իջնող ցանկում ընտրեք այն դաշտը, որի վրա ցանկանում եք զտել, օրինակ՝ տևողությունը։
  5. Ընտրեք օպերատոր, օրինակ՝ «>»։
  6. Մուտքագրեք ֆիլտրը Արժեք, օրինակ՝ 1000000 (1 վայրկյան):
  7. Անհրաժեշտության դեպքում ավելացրեք ավելի շատ պայմաններ։

Կարգավորեք իրադարձության ֆիլտրերը (պրեդիկատները):

4.5 Գործողությունների և իրադարձությունների դաշտերի ընտրություն

Յուրաքանչյուր իրադարձության համար կարող եք ընտրել հավաքագրվող տվյալները՝

  1. Մասին Իրադարձություններ էջում ընտրեք այն իրադարձությունը, որից ցանկանում եք ընտրել տվյալները, օրինակ՝ «sql_statement_completed»:
  2. Սեղմել Համաձեւել միջոցառման կարգավորման երկխոսության պատուհանը բացելու համար։
  3. Ընտրել Գլոբալ դաշտեր (գործողություններ) էջանիշը.
  4. Ընտրեք լրացուցիչ տեղեկություններ ավելացնելու գործողություններ, ինչպիսիք են՝ database_name կամ client_app_name:
    Կարգավորեք իրադարձության գործողությունները։
  5. Վերանայեք Միջոցառումների դաշտեր բաժին՝ տեսնելու համար, թե որ դաշտերն են ավտոմատ կերպով գրանցվում։
  6. Մաքրեք բոլոր ավելորդ դաշտերը՝ տվյալների ծավալը նվազեցնելու համար։
    Կարգավորեք միջոցառման դաշտերը։

4.6 Սեսիաների մեկնարկ և կառավարում

Ձեր նիստը կարգավորելուց հետո կարող եք այն սկսել և վերահսկել դրա աշխատանքը՝

  1. Սեղմել OK նիստը ստեղծելու համար։
  2. Object Explorer-ում ընդարձակեք Sessions թղթապանակ՝ ձեր նոր նիստը տեսնելու համար։
  3. Սեղմեք նիստի անվան վրա աջ կոճակով և ընտրեք Սկսել նստաշրջանը իրադարձությունների ձայնագրումը սկսելու համար։
    Սկսեք ընդլայնված միջոցառումների նիստը SQL Server Կառավարման ստուդիա.
  4. Տվյալները դիտելու համար սեղմեք աջ կոճակը սեսիայի վրա և ընտրեք Դիտեք ուղիղ տվյալները.
    Դիտեք ընդլայնված միջոցառումների նիստի ուղիղ հեռարձակման տվյալները SQL Server Կառավարման ստուդիա.
  5. Դադարեցրեք նիստը՝ աջ սեղմելով և ընտրելով Դադարեցնել նիստը.

5. T-SQL-ի միջոցով ընդլայնված միջոցառումների սեսիաների ստեղծում

5.1 ՄԻՋՈՑԱՌՈՒՄ ՍԵՍԻԱ ՍՏԵՂԾԵԼԸ Շարահյուսություն

T-SQL-ի միջոցով ընդլայնված իրադարձությունների սեսիաների ստեղծումը ապահովում է ճշգրիտ վերահսկողություն և հնարավորություն է տալիս սկրիպտներ ստեղծել ավտոմատացված տեղակայման համար: CREATE EVENT SESSION հրամանը հետևում է որոշակի շարահյուսական կառուցվածքի:

Հիմնական սինտաքսը ներառում է սեսիայի անվանումը, յուրաքանչյուր իրադարձության համար ADD EVENT կետերը, պահեստավորման վայրերի համար ADD TARGET կետերը և սեսիայի կարգավորման համար լրացուցիչ WITH կետերը։

5.2 Հիմնական միջոցառման սեսիայի ստեղծում

Հիմնական սեսիան վերահսկում է որոշակի իրադարձություններ և գրանցում արդյունքները թիրախում: Ահա, թե ինչպես կառուցել հիմնական բաղադրիչները:

5.2.1 Սեսիայի անվան և ընտրանքների սահմանում

Սկսեք սեսիան նկարագրական անվանումով ստեղծելով՝

CREATE EVENT SESSION [SampleSession] ON SERVER

ON SERVER կետը ստեղծում է սերվերի շրջանակներում սեսիա, որը պահպանվում է տվյալների բազայի փոփոխությունների ընթացքում: Azure SQL տվյալների բազայի համար օգտագործեք ON DATABASE-ը տվյալների բազայի շրջանակներում սեսիաների համար:

5.2.2 Իրադարձությունների ավելացում ADD EVENT-ի միջոցով

Ավելացրեք գրանցվող իրադարձություններ՝ օգտագործելով ADD EVENT կետը։

CREATE EVENT SESSION [SampleSession] ON SERVER
ADD EVENT sqlserver.sql_statement_completed

Սա գրանցում է բոլոր լրացված SQL հրամանները: Դուք կարող եք ավելացնել բազմաթիվ իրադարձություններ՝ ներառելով լրացուցիչ ADD EVENT կետեր:

5.2.3 Միջոցառման գործողությունների կարգավորում

Գործողությունները հավաքում են լրացուցիչ համատեքստ յուրաքանչյուր իրադարձության համար: Ավելացրեք գործողությունները փակագծերի մեջ՝ միջոցառման անունից հետո:

CREATE EVENT SESSION [SampleSession] ON SERVER
ADD EVENT sqlserver.sql_statement_completed(
    ACTION(sqlserver.sql_text, sqlserver.database_name, sqlserver.username)
)

Այս օրինակը գրանցում է յուրաքանչյուր լրացված հայտարարության SQL տեքստը, տվյալների բազայի անվանումը և օգտատիրոջ անունը։

5.2.4 Իրադարձությունների պրեդիկատների սահմանում (WHERE կետ)

Նախադրյալները ֆիլտրում են իրադարձությունները՝ տվյալների ծավալը նվազեցնելու համար: Օգտագործեք WHERE պայմանը իրադարձության սահմանման մեջ:

CREATE EVENT SESSION [SampleSession] ON SERVER
ADD EVENT sqlserver.sql_statement_completed(
    ACTION(sqlserver.sql_text)
    WHERE ([package0].[greater_than_uint64]([duration],(5000000)))
)

Սա զտում է 5 վայրկյանից (5,000,000 միկրովայրկյան) ավելի տևողությամբ հայտարարությունները։

5.3 Միջոցառման թիրախների ավելացում

Նպատակակետերը սահմանում են, թե որտեղ են պահվում իրադարձությունների տվյալները և ինչպես են դրանք մշակվում։

5.3.1 ADD TARGET շարահյուսություն

Ավելացրեք թիրախներ՝ օգտագործելով ADD TARGET պայմանը, բոլոր իրադարձությունները սահմանելուց հետո։

ADD TARGET package0.event_file(
    SET filename=N'C:\XEvents\SampleSession.xel'
)

package0 նախածանցը ցույց է տալիս, որ թիրախը գալիս է բազային փաթեթից։

5.3.2 Նպատակային պարամետրերի կարգավորում

Յուրաքանչյուր թիրախային տեսակ ընդունում է որոշակի պարամետրեր: event_file-ի համար կարգավորեք filename, max_file_size և max_rollover_files պարամետրերը:

ADD TARGET package0.event_file(
    SET filename=N'C:\XEvents\SampleSession.xel',
        max_file_size=(50),
        max_rollover_files=(5)
)

Այս կարգավորումը ստեղծում է մինչև 50 ՄԲ չափի ֆայլեր՝ պահպանելով մինչև 5 ֆայլ՝ անցնելով վերադրման ռեժիմով։

5.4 Սեսիայի ընտրանքներ և կարգավորումներ

WITH կետը կարգավորում է սեսիայի մակարդակի տարբերակները, որոնք վերահսկում են վարքագիծը և ռեսուրսների օգտագործումը։

5.4.1 MAX_MEMORY և EVENT_RETENTION_MODE

Վերահսկեք հիշողության բաշխումը և իրադարձությունների մշակումը ճնշման տակ.

WITH (
    MAX_MEMORY=4096 KB,
    EVENT_RETENTION_MODE=ALLOW_SINGLE_EVENT_LOSS
)

EVENT_RETENTION_MODE տարբերակները ներառում են ALLOW_SINGLE_EVENT_LOSS՝ հիշողության նվազագույն օգտագործման համար, ALLOW_MULTIPLE_EVENT_LOSS՝ չափավոր ծանրաբեռնվածության համար, և NO_EVENT_LOSS՝ տվյալների ամբողջական պահպանման համար՝ հնարավոր արդյունավետության վրա ազդեցության գնով:

5.4.2 ԱՌԱՋԱՐԿՄԱՆ ՄԱՔՍԻՄԱԼ ԺԱՄԱՆԱԿ

Սահմանեք առավելագույն ժամանակը, որի ընթացքում իրադարձությունները կարող են մնալ բուֆերներում՝ նախքան թիրախներում գրվելը.

WITH (
    MAX_DISPATCH_LATENCY=30 SECONDS
)

Ավելի ցածր արժեքները ապահովում են ավելի շատ իրական ժամանակի տվյալներ՝ մուտքի/ելքի գործողությունների ավելացման հաշվին։

5.4.3 Հիշողության_բաժնի_ռեժիմ

Օպտիմալացրեք հիշողության բաժանումը ձեր սարքավորման կոնֆիգուրացիայի համար.

WITH (
    MEMORY_PARTITION_MODE=PER_CPU
)

Ընտրանքներից են՝ NONE՝ մեկ բաժնի համար, PER_NODE՝ NUMA համակարգերի համար և PER_CPU՝ բազմապրոցեսորային համակարգերի վրա առավելագույն միաժամանակյա օգտագործման համար։

5.5 Սեսիաների մեկնարկը, դադարեցումը և փոփոխումը

Կառավարեք նստաշրջանի վիճակը և կոնֆիգուրացիան ALTER EVENT SESSION հրամանների միջոցով։

5.5.1 ALTER EVENT SESSION-ի փոփոխություն մեկնարկի/դադարեցման համար

Սկսեք նիստը ստեղծումից հետո՝

ALTER EVENT SESSION [SampleSession] ON SERVER STATE = START;

Դադարեցրեք ընթացիկ նիստը՝

ALTER EVENT SESSION [SampleSession] ON SERVER STATE = STOP;

5.5.2 Գոյություն ունեցող սեսիաների փոփոխում

Փոփոխել նիստի կարգավորումները կանգ առնելու ընթացքում։ Ավելացնել իրադարձություններ։

ALTER EVENT SESSION [SampleSession] ON SERVER
ADD EVENT sqlserver.sql_batch_completed;

Հեռացնել իրադարձությունները՝

ALTER EVENT SESSION [SampleSession] ON SERVER
DROP EVENT sqlserver.sql_statement_completed;

5.5.3 Միջոցառումների սեսիաների դադարեցում

Սեսիան ամբողջությամբ ջնջեք DROP EVENT SESSION-ի միջոցով։

DROP EVENT SESSION [SampleSession] ON SERVER;

Նիստը պետք է դադարեցվի դադարելուց առաջ։

6. Միջոցառումների թիրախների հետ մանրամասն աշխատանք

6.1 event_file Նպատակային կոնֆիգուրացիա

event_file թիրախը ապահովում է իրադարձությունների տվյալների մշտական ​​պահեստավորում՝ ճկուն կարգավորման տարբերակներով։

6.1.1 Ֆայլի ուղի և անվանակոչման կոնվենցիաներ

Նշեք իրադարձության ֆայլերի ամբողջական ուղին և ֆայլի անունը՝

ADD TARGET package0.event_file(
    SET filename=N'C:\XEvents\MySession.xel'
)

Օգտագործեք .xel ընդլայնումը ընդլայնված իրադարձությունների գրանցամատյանի ֆայլերի համար։ Համոզվեք, որ SQL Server Ծառայության հաշիվն ունի նշված գրացուցակում գրելու թույլտվություններ։

6.1.2 Ֆայլերի տեղափոխում և չափի կառավարում

Կարգավորեք ֆայլերի ավտոմատ տեղափոխումը՝ սկավառակի տարածքը կառավարելու համար.

ADD TARGET package0.event_file(
    SET filename=N'C:\XEvents\MySession.xel',
        max_file_size=(50),
        max_rollover_files=(10)
)

Երբ ֆայլի չափը հասնում է 50 ՄԲ-ի, SQL Server Extended Events-ը ստեղծում է նոր ֆայլ՝ աճող վերջածանցով: 10 ֆայլի հասնելուց հետո ամենահին ֆայլը վերագրվում է:

6.1.3 Իրադարձությունների ֆայլի տվյալների ընթերցում

Հարցում ուղարկել իրադարձության ֆայլի տվյալներին sys.fn_xe_file_target_read_file ֆունկցիայի միջոցով։

SELECT
    event_data,
    file_name,
    file_offset
FROM sys.fn_xe_file_target_read_file(
    'C:\XEvents\MySession*.xel',
    NULL, NULL, NULL
);

Wildcard նախշը կարդում է սեսիային կապված բոլոր ֆայլերը։

6.2 ring_buffer Նպատակային օգտագործում

ring_buffer թիրախը պահպանում է իրադարձությունները հիշողության մեջ՝ վերջին ակտիվությանը արագ մուտք գործելու համար։

6.2.1 Հիշողության վրա հիմնված իրադարձությունների պահպանում

Կարգավորեք ring_buffer-ը հիշողության վրա հիմնված պահեստավորման համար՝

ADD TARGET package0.ring_buffer

Միջոցառումները հասանելի են մնում միայն այն ժամանակ, երբ սեսիան ակտիվ է, և SQL Server աշխատում է: Տվյալները կորչում են, երբ սեսիան դադարում է կամ սերվերը վերագործարկվում է:

6.2.2 Բուֆերի չափը և կարգավորումը

Կառավարեք օղակաձև բուֆերի հիշողության բաշխումը.

ADD TARGET package0.ring_buffer(
    SET max_memory=(4096)
)

Նշեք հիշողությունը KB-ում: Երբ բուֆերը լցվում է, հին իրադարձությունները մերժվում են FIFO մոտեցման միջոցով:

6.2.3 Ring Buffer տվյալների հարցում

Մուտք գործեք օղակաձև բուֆերի տվյալներին DMV-ների միջոցով՝

SELECT
    CAST(target_data AS XML) AS TargetData
FROM sys.dm_xe_session_targets AS t
JOIN sys.dm_xe_sessions AS s
    ON s.address = t.event_session_address
WHERE s.name = 'YourSessionName'
    AND t.target_name = 'ring_buffer';

target_data-ն պարունակում է XML-ֆորմատով իրադարձության տեղեկատվություն։

6.3 իրադարձությունների հաշվիչ Նպատակ

event_counter թիրախը ապահովում է պարզ հաշվարկ՝ առանց մանրամասն տվյալների պահպանման։

ADD TARGET package0.event_counter

Այս թիրախը հետևում է իրադարձությունների հաճախականությանը նվազագույն վերբեռնմամբ, ինչը օգտակար է մեծ ծավալի մոնիթորինգի համար, որտեղ միայն քանակն է կարևոր։

6.4 հիստոգրամ Նպատակ

Հիստոգրամի թիրախը խմբավորում է իրադարձությունները դաշտերի արժեքներով՝

ADD TARGET package0.histogram(
    SET filtering_event_name=N'sqlserver.sql_statement_completed',
        source_type=0,
        source=N'database_name'
)

Այս կարգավորումը ստեղծում է հիստոգրամ, որը ցույց է տալիս իրադարձությունների բաշխումը տվյալների բազաներում։

6.5 զույգի համապատասխանեցման թիրախ

Pair_matching թիրախը կապում է կապակցված իրադարձությունները, ինչպիսիք են կողպեքների ձեռքբերումները, թողարկումների հետ։

ADD TARGET package0.pair_matching(
    SET begin_event=N'sqlserver.lock_acquired',
        end_event=N'sqlserver.lock_released',
        begin_matching_columns=N'resource_type',
        end_matching_columns=N'resource_type'
)

Սա հնարավորություն է տալիս վերլուծել զույգային գործողությունները և դրանց տևողությունը։

7. Ընդլայնված իրադարձությունների տվյալների դիտում և վերլուծություն

7.1 SSMS-ի օգտագործումը իրական ժամանակում տվյալները դիտելու համար

SQL Server Management Studio-ն ապահովում է գրաֆիկական ինտերֆեյս՝ ընդլայնված իրադարձությունների տվյալները իրական ժամանակում դիտելու համար։

  1. Օբյեկտների հետազոտիչում ընդարձակեք կառավարում -> Ընդլայնված իրադարձություններ -> Sessions.
  2. Սեղմեք աջ կոճակով ձեր ակտիվ նիստի վրա։
  3. ընտրել Դիտեք ուղիղ տվյալները ուղիղ տվյալների դիտիչը բացելու համար։
    Դիտեք ընդլայնված միջոցառումների նիստի ուղիղ հեռարձակման տվյալները SQL Server Կառավարման ստուդիա.
  4. Իրադարձությունները հայտնվում են ցանցում տեղի ունենալուն պես։
  5. Սեղմեք առանձին իրադարձությունների վրա՝ մանրամասների վահանակում դաշտերի մանրամասն արժեքները դիտելու համար։
    Դիտեք միջոցառումների ուղիղ հեռարձակումները, ներառյալ միջոցառման մանրամասները։
  6. Օգտագործեք գործիքագոտու զտիչները՝ որոշակի իրադարձությունների տեսակների կամ դաշտերի արժեքների վրա կենտրոնանալու համար։

7.2 Իրադարձությունների ֆայլի տվյալների հարցում T-SQL-ի միջոցով

T-SQL հարցումները ապահովում են գրանցված իրադարձությունների տվյալների ճկուն վերլուծություն։

7.2.1 sys.fn_xe_file_target_read_file ֆունկցիա

Կարդացեք իրադարձության ֆայլի տվյալները՝ օգտագործելով այս համակարգային ֆունկցիան.

SELECT
    object_name AS EventName,
    CAST(event_data AS XML) AS EventData,
    file_name,
    file_offset,
    timestamp_utc
FROM sys.fn_xe_file_target_read_file(
    'C:\XEvents\MySession*.xel',
    NULL, NULL, NULL
);

Ֆունկցիան յուրաքանչյուր իրադարձության համար վերադարձնում է մեկ տող՝ XML ձևաչափով մանրամասներով։

7.2.2 XML իրադարձությունների տվյալների վերլուծություն

XML իրադարձության տվյալներից արդյունահանեք որոշակի արժեքներ՝

SELECT
    event_data.value('(event/@name)[1]', 'VARCHAR(50)') AS EventName,
    event_data.value('(event/@timestamp)[1]', 'DATETIME2') AS Timestamp,
    event_data.value('(event/data[@name="duration"]/value)[1]', 'BIGINT') AS Duration,
    event_data.value('(event/data[@name="statement"]/value)[1]', 'VARCHAR(MAX)') AS Statement
FROM (
    SELECT CAST(event_data AS XML) AS event_data
    FROM sys.fn_xe_file_target_read_file(
        'C:\XEvents\MySession*.xel',
        NULL, NULL, NULL
    )
) AS EventData;

XQuery արտահայտությունները XML կառուցվածքից արդյունահանում են առանձին դաշտերի արժեքները։

7.2.3 Իրադարձությունների տվյալների աղյուսակների փոխակերպում

Ստեղծեք կառուցվածքային արդյունքների հավաքածուներ իրադարձությունների տվյալներից.

WITH EventData AS (
    SELECT CAST(event_data AS XML) AS EventXML
    FROM sys.fn_xe_file_target_read_file(
        'C:\XEvents\MySession*.xel',
        NULL, NULL, NULL
    )
)
SELECT
    EventXML.value('(event/@name)[1]', 'VARCHAR(100)') AS EventName,
    EventXML.value('(event/data[@name="cpu_time"]/value)[1]', 'BIGINT') AS CPUTime,
    EventXML.value('(event/data[@name="physical_reads"]/value)[1]', 'BIGINT') AS PhysicalReads,
    EventXML.value('(event/action[@name="sql_text"]/value)[1]', 'VARCHAR(MAX)') AS SQLText,
    EventXML.value('(event/action[@name="database_name"]/value)[1]', 'VARCHAR(128)') AS DatabaseName
FROM EventData;

7.3 Ring Buffer տվյալների հարցում

Տվյալների արդյունահանում ring_buffer թիրախներից՝

SELECT
    n.value('(@name)[1]', 'VARCHAR(50)') AS EventName,
    n.value('(@timestamp)[1]', 'DATETIME2') AS Timestamp,
    n.value('(data[@name="duration"]/value)[1]', 'BIGINT') AS Duration,
    n.value('(action[@name="sql_text"]/value)[1]', 'VARCHAR(MAX)') AS SQLText
FROM (
    SELECT CAST(target_data AS XML) AS TargetData
    FROM sys.dm_xe_session_targets AS t
    JOIN sys.dm_xe_sessions AS s
        ON s.address = t.event_session_address
    WHERE s.name = 'YourSessionName'
        AND t.target_name = 'ring_buffer'
) AS Data
CROSS APPLY TargetData.nodes('//event') AS q(n);

7.4 Համակարգի տեսքեր ընդլայնված իրադարձությունների համար

SQL Server տրամադրում է մի քանի DMV-ներ և կատալոգի դիտումներ՝ ընդլայնված միջոցառումների նիստերը կառավարելու և վերահսկելու համար։

7.4.1 sys.server_event_sessions

Դիտել սերվերում պահված սեսիայի սահմանումները՝

SELECT
    name,
    event_retention_mode_desc,
    max_dispatch_latency,
    max_memory,
    max_event_size,
    memory_partition_mode_desc
FROM sys.server_event_sessions;

Այս կատալոգի տեսքը ցույց է տալիս բոլոր սահմանված սեսիաների կարգավորման մանրամասները։

7.4.2 sys.dm_xe_sessions

Դիտել ներկայումս ակտիվ նիստերը՝

SELECT
    name,
    create_time,
    total_regular_buffers,
    regular_buffer_size,
    total_large_buffers,
    large_buffer_size
FROM sys.dm_xe_sessions;

Այս DMV-ն տրամադրում է աշխատանքային ժամանակի տեղեկատվություն ակտիվ ընդլայնված իրադարձությունների նիստերի մասին։

7.4.3 sys.dm_xe_session_targets

Դիտել ակտիվ սեսիաների հետ կապված թիրախները՝

SELECT
    s.name AS SessionName,
    t.target_name,
    t.execution_count,
    t.execution_duration_ms
FROM sys.dm_xe_session_targets AS t
JOIN sys.dm_xe_sessions AS s
    ON s.address = t.event_session_address;

7.4.4 Այլ օգտակար DMV-ներ

Լրացուցիչ դիտումները տրամադրում են նստաշրջանի համապարփակ տեղեկատվություն.

  • sys.dm_xe_session_events: Ցուցադրում է ակտիվ սեսիաների իրադարձությունները
  • sys.dm_xe_session_event_actions: Ցույց է տալիս սեսիայի իրադարձությունների համար կարգավորված գործողությունները
  • sys.dm_xe_objects: Կատալոգավորում է բոլոր հասանելի իրադարձությունները, գործողությունները և թիրախները
  • sys.dm_xe_object_columns: Մանրամասների դաշտեր, որոնք հասանելի են յուրաքանչյուր իրադարձության տեսակի համար։
  • sys.dm_xe_packages: Ցուցադրում է բոլոր ընդլայնված իրադարձությունների փաթեթները

8. Գործնական օգտագործման դեպքեր և օրինակներ

8.1 SQL հայտարարության կատարման մոնիթորինգ

SQL հայտարարության կատարման հետևումը հնարավորություն է տալիս պատկերացում կազմել հարցումների ձևանմուշների և կատարողականի բնութագրերի մասին։

8.1.1 sql_statement_completed իրադարձությունների հետևում

Ստեղծեք սեսիա՝ լրացված SQL հրամանները վերահսկելու համար։

CREATE EVENT SESSION [QueryMonitoring] ON SERVER
ADD EVENT sqlserver.sql_statement_completed(
    ACTION(
        sqlserver.sql_text,
        sqlserver.database_name,
        sqlserver.client_hostname,
        sqlserver.username
    )
)
ADD TARGET package0.event_file(
    SET filename=N'C:\XEvents\QueryMonitoring.xel',
        max_file_size=(100),
        max_rollover_files=(5)
)
WITH (
    MAX_MEMORY=4096 KB,
    EVENT_RETENTION_MODE=ALLOW_SINGLE_EVENT_LOSS,
    MAX_DISPATCH_LATENCY=30 SECONDS,
    STARTUP_STATE=OFF
);

ALTER EVENT SESSION [QueryMonitoring] ON SERVER STATE = START;

8.1.2 Ֆիլտրում ըստ տվյալների բազայի կամ ծրագրի

Կենտրոնացեք որոշակի տվյալների բազաների կամ ծրագրերի վրա՝ օգտագործելով պրեդիկատներ.

CREATE EVENT SESSION [AppSpecificMonitoring] ON SERVER
ADD EVENT sqlserver.sql_statement_completed(
    ACTION(sqlserver.sql_text, sqlserver.client_app_name)
    WHERE (
        [sqlserver].[database_name] = N'YourDatabase'
        AND [sqlserver].[client_app_name] LIKE N'YourApplication%'
    )
)
ADD TARGET package0.event_file(
    SET filename=N'C:\XEvents\AppMonitoring.xel'
);

8.2 Փակուղու տեղեկատվության գրանցում

Փակուղու վերլուծությունը պահանջում է հակամարտող գործարքների վերաբերյալ մանրամասն տեղեկատվության հավաքագրում։

8.2.1 xml_deadlock_report իրադարձություն

Ստեղծեք սեսիա՝ փակուղու ամբողջական գրաֆիկները գրանցելու համար։

CREATE EVENT SESSION [DeadlockMonitoring] ON SERVER
ADD EVENT sqlserver.xml_deadlock_report(
    ACTION(
        sqlserver.database_name,
        sqlserver.sql_text
    )
)
ADD TARGET package0.event_file(
    SET filename=N'C:\XEvents\Deadlocks.xel'
)
WITH (STARTUP_STATE=ON);

ALTER EVENT SESSION [DeadlockMonitoring] ON SERVER STATE = START;

8.2.2 Փակուղային գրաֆիկների վերլուծություն

Արդյունահանեք և վերլուծեք փակուղու մասին տեղեկատվությունը.

SELECT
    EventXML.value('(event/@timestamp)[1]', 'DATETIME2') AS DeadlockTime,
    EventXML.query('.') AS DeadlockGraph
FROM (
    SELECT CAST(event_data AS XML) AS EventXML
    FROM sys.fn_xe_file_target_read_file(
        'C:\XEvents\Deadlocks*.xel',
        NULL, NULL, NULL
    )
) AS EventData
WHERE EventXML.value('(event/@name)[1]', 'VARCHAR(50)') = 'xml_deadlock_report';

Փակուղու գրաֆիկը պարունակում է մանրամասներ գործընթացների, ռեսուրսների և զոհերի ընտրության մասին։

8.3 Հետևողական հարցումների կատարողականության խնդիրներ

Նույնականացրեք վատ կատարողականությամբ հարցումները՝ օգտագործելով տևողության և ռեսուրսների սպառման չափանիշները։

8.3.1 Երկարատև հարցումների հայտնաբերում

Գրանցել հարցումներ, որոնք գերազանցում են որոշակի տևողության շեմերը.

CREATE EVENT SESSION [LongRunningQueries] ON SERVER
ADD EVENT sqlserver.sql_statement_completed(
    ACTION(
        sqlserver.sql_text,
        sqlserver.database_name,
        sqlserver.plan_handle
    )
    WHERE ([duration] > 5000000)  -- 5 seconds in microseconds
)
ADD TARGET package0.event_file(
    SET filename=N'C:\XEvents\LongQueries.xel'
);

8.3.2 Կատարման պլանի վերլուծություն

Կատարողականի վերլուծության համար որոնման հարցումների պլանների գրանցում.

CREATE EVENT SESSION [QueryPlans] ON SERVER
ADD EVENT sqlserver.query_post_execution_showplan(
    ACTION(
        sqlserver.sql_text,
        sqlserver.database_name
    )
    WHERE ([duration] > 10000000)  -- 10 seconds
)
ADD TARGET package0.event_file(
    SET filename=N'C:\XEvents\QueryPlans.xel',
    max_file_size=(200)
);

8.4 Մուտք գործելու և անվտանգության իրադարձությունների մոնիթորինգ

Հետևեք նույնականացման և լիազորման գործողություններին անվտանգության աուդիտի համար:

8.4.1 Մուտք գործելու հաջողության և ձախողման հետևում

Հետևեք ինչպես հաջող, այնպես էլ անհաջող մուտք գործելու փորձերին.

CREATE EVENT SESSION [LoginMonitoring] ON SERVER
ADD EVENT sqlserver.login(
    ACTION(
        sqlserver.client_hostname,
        sqlserver.client_app_name
    )
),
ADD EVENT sqlserver.login_failed(
    ACTION(
        sqlserver.client_hostname
    )
)
ADD TARGET package0.event_file(
    SET filename=N'C:\XEvents\Logins.xel'
)
WITH (STARTUP_STATE=ON);

8.4.2 Թույլտվությունների փոփոխություններ

Հետևման անվտանգության թույլտվության փոփոխություններ՝

CREATE EVENT SESSION [SecurityChanges] ON SERVER
ADD EVENT sqlserver.server_principal_management_event,
ADD EVENT sqlserver.database_principal_management_event,
ADD EVENT sqlserver.database_permission_change_event
ADD TARGET package0.event_file(
    SET filename=N'C:\XEvents\SecurityAudit.xel'
);

8.5 Տվյալների բազայի մակարդակի մոնիթորինգ

Վերահսկել տվյալների բազայի հետ կապված գործողությունները և վիճակի փոփոխությունները։

8.5.1 Պահուստավորման և վերականգնման իրադարձություններ

Հետևեք պահուստավորման և վերականգնման գործողություններին.

CREATE EVENT SESSION [BackupMonitoring] ON SERVER
ADD EVENT sqlserver.backup_restore_progress_trace,
ADD EVENT sqlserver.databases_backup_restore_event
ADD TARGET package0.event_file(
    SET filename=N'C:\XEvents\BackupRestore.xel'
);

8.5.2 Տվյալների բազայի վիճակի փոփոխություններ

Վերահսկել տվյալների բազայի վիճակի անցումները՝

CREATE EVENT SESSION [DatabaseStateChanges] ON SERVER
ADD EVENT sqlserver.database_started,
ADD EVENT sqlserver.database_stopped
ADD TARGET package0.ring_buffer;

8.6 Տվյալների բազայի վնասման և ամբողջականության խնդիրների հայտնաբերում

SQL Server Extended Events-ը տրամադրում է վաղ նախազգուշացման հնարավորություններ՝ տվյալների բազայի հնարավոր վնասը հայտնաբերելու համար, թույլ տալով կանխարգելիչ միջամտություն՝ նախքան խնդիրների սրվելը։

8.6.1 Կոռուպցիայի հայտնաբերման հիմնական իրադարձություններ

Մի քանի իրադարձություններ ազդարարում են հնարավոր կոռուպցիայի կամ մուտքի/ելքի խնդիրների մասին։

8.6.1.1 error_reported իրադարձություն կրիտիկական սխալների համար

error_reported իրադարձությունը գրանցում է բոլորը SQL Server սխալներ, ներառյալ կոռուպցիայի հետ կապված սխալների թվերը՝

ADD EVENT sqlserver.error_reported(
    WHERE (
        [severity] >= (20)
        OR [error_number] IN (823, 824, 825, 832, 855, 856)
    )
)

Սխալ 823-ը ցույց է տալիս մուտքի/ելքի սխալներ, 824-ը՝ տրամաբանական համապատասխանության սխալներ, իսկ 825-ը՝ ընթերցման-կրկնակի փորձի հաջողություններ, որոնք կարող են վկայել սարքային խնդիրների մասին։

8.6.1.2 database_suspect_data_page իրադարձություն

Այս իրադարձությունը տեղի է ունենում, երբ SQL Server հանդիպում է կասկածելի էջի՝

ADD EVENT sqlserver.database_suspect_data_page

Կասկածելի էջերը վկայում են հնարավոր վնասման մասին և գրանցվում են msdb.dbo.suspect_pages աղյուսակում։

8.6.1.3 errorlog_written Իրադարձություն

Գրանցեք գրված գրառումները SQL Server սխալների գրանցամատյան՝

ADD EVENT sqlserver.errorlog_written(
    WHERE ([severity] >= (16))
)

8.6.2 Կոռուպցիայի մոնիթորինգի նիստի ստեղծում

Կազմակերպել կոռուպցիայի հայտնաբերման և մոնիթորինգի համապարփակ նիստ։

8.6.2.1 Կոռուպցիայի սխալների թվերի ֆիլտրում (823, 824, 825)

Ստեղծեք թիրախային նիստ՝ կենտրոնանալով կոռուպցիայի ցուցանիշների վրա.

CREATE EVENT SESSION [CorruptionDetection] ON SERVER
ADD EVENT sqlserver.error_reported(
    ACTION(
        sqlserver.database_name,
        sqlserver.sql_text
    )
    WHERE (
        [error_number] IN (823, 824, 825, 832, 855, 856)
        OR [severity] >= (20)
    )
),
ADD EVENT sqlserver.database_suspect_data_page(
    ACTION(
        sqlserver.database_name
    )
)
8.6.2.2 Համապատասխան ծանրության մակարդակների սահմանում

Ներառեք բարձր ծանրության սխալները, որոնք կարող են վկայել կոռուպցիայի մասին.

WHERE (
    [severity] >= (20)
    OR [error_number] IN (823, 824, 825)
)

20 և ավելի ծանրության աստիճանը ցույց է տալիս համակարգային մակարդակի խնդիրներ, որոնք հաճախ կապված են կոռուպցիայի հետ։

8.6.2.3 Իրադարձությունների ֆայլի նպատակակետի կարգավորում ահազանգերի համար

Պահպանեք կոռուպցիայի դեպքերը վերլուծության և ահազանգման համար.

ADD TARGET package0.event_file(
    SET filename=N'C:\XEvents\CorruptionMonitoring.xel',
        max_file_size=(50),
        max_rollover_files=(10)
)
WITH (
    STARTUP_STATE=ON,
    MAX_DISPATCH_LATENCY=5 SECONDS
);

ALTER EVENT SESSION [CorruptionDetection] ON SERVER STATE = START;

8.6.3 Կոռուպցիայի դեպքերի տվյալների վերլուծություն

Ձեռք բերված տվյալներից արդյունահանել և մեկնաբանել կոռուպցիայի հետ կապված իրադարձությունները։

8.6.3.1 Կասկածելի էջերի նույնականացում

Հարցում database_suspect_data_page իրադարձությունների համար՝

SELECT
    EventXML.value('(event/@timestamp)[1]', 'DATETIME2') AS EventTime,
    EventXML.value('(event/data[@name="database_id"]/value)[1]', 'INT') AS DatabaseID,
    EventXML.value('(event/data[@name="file_id"]/value)[1]', 'INT') AS FileID,
    EventXML.value('(event/data[@name="page_id"]/value)[1]', 'BIGINT') AS PageID,
    EventXML.value('(event/action[@name="database_name"]/value)[1]', 'VARCHAR(128)') AS DatabaseName
FROM (
    SELECT CAST(event_data AS XML) AS EventXML
    FROM sys.fn_xe_file_target_read_file(
        'C:\XEvents\CorruptionMonitoring*.xel',
        NULL, NULL, NULL
    )
) AS EventData
WHERE EventXML.value('(event/@name)[1]', 'VARCHAR(50)') = 'database_suspect_data_page';
8.6.3.2 Սխալի մանրամասների և համատեքստի արդյունահանում

Վերլուծեք error_reported իրադարձությունները՝ կոռուպցիայի օրինաչափությունների համար։

SELECT
    EventXML.value('(event/@timestamp)[1]', 'DATETIME2') AS ErrorTime,
    EventXML.value('(event/data[@name="error_number"]/value)[1]', 'INT') AS ErrorNumber,
    EventXML.value('(event/data[@name="severity"]/value)[1]', 'INT') AS Severity,
    EventXML.value('(event/data[@name="message"]/value)[1]', 'VARCHAR(MAX)') AS ErrorMessage,
    EventXML.value('(event/action[@name="database_name"]/value)[1]', 'VARCHAR(128)') AS DatabaseName,
    EventXML.value('(event/action[@name="sql_text"]/value)[1]', 'VARCHAR(MAX)') AS SQLText
FROM (
    SELECT CAST(event_data AS XML) AS EventXML
    FROM sys.fn_xe_file_target_read_file(
        'C:\XEvents\CorruptionMonitoring*.xel',
        NULL, NULL, NULL
    )
) AS EventData
WHERE EventXML.value('(event/@name)[1]', 'VARCHAR(50)') = 'error_reported'
    AND EventXML.value('(event/data[@name="error_number"]/value)[1]', 'INT') IN (823, 824, 825);

8.6.4 Ինտեգրացիա DBCC CHECKDB-ի հետ

Օգտագործեք ընդլայնված իրադարձությունների տվյալները՝ ուղղորդելու համար DBCC CHECKDB կատարումը:

8.6.4.1 DBCC CHECKDB-ի ակտիվացում՝ իրադարձությունների հիման վրա

Երբ հայտնաբերվում են կոռուպցիոն դեպքեր, կատարեք DBCC CHECKDB հրամանը՝ համապարփակ վավերացման համար։

-- After detecting corruption events, run DBCC CHECKDB
DBCC CHECKDB ('YourDatabaseName') WITH NO_INFOMSGS, ALL_ERRORMSGS;

Extended Events-ը տրամադրում է վաղ նախազգուշացում, մինչդեռ DBCC CHECKDB-ն իրականացնում է մանրակրկիտ ստուգում։

8.6.4.2 Կոռուպցիայի դեմ պայքարի ավտոմատացված աշխատանքային հոսքեր

Իրականացրեք ավտոմատացված պատասխաններ՝ վերահսկելով իրադարձության ֆայլը.

  1. Համաձեւել SQL Server Գործակալի աշխատանքն է պարբերաբար հարցումներ կատարել կոռուպցիայի մոնիթորինգի իրադարձության ֆայլին։
  2. Երբ հայտնաբերվեն կոռուպցիոն դեպքեր, կատարեք DBCC CHECKDB հրամանը տուժած տվյալների բազայի վրա։
  3. Ուղարկեք էլեկտրոնային նամակով ծանուցումներ DBA-ներին՝ միջոցառման մանրամասներով և DBCC CHECKDB արդյունքներով:
  4. Գրանցեք արդյունքները կենտրոնացված մոնիթորինգի աղյուսակում՝ միտումների վերլուծության համար։
8.6.4.3 Նախաձեռնողական մոնիթորինգի և կատարողականի միջև հավասարակշռություն

Extended Events-ը առաջարկում է կոռուպցիայի հայտնաբերման ցածր ծախսեր՝ համեմատած DBCC CHECKDB-ի հաճախակի կատարման հետ։

  • Անընդհատ գործարկել ընդլայնված իրադարձություններ՝ իրական ժամանակում կոռուպցիայի հայտնաբերման համար
  • Կատարել DBCC CHECKDB-ը միայն այն դեպքում, երբ հայտնվում են կոռուպցիայի ցուցիչներ
  • Պլանավորեք DBCC CHECKDB-ի կանոնավոր աշխատանքը սպասարկման պատուհանների ընթացքում
  • Օգտագործեք ընդլայնված իրադարձություններ՝ անհապաղ ուշադրության կարիք ունեցող տվյալների բազաները որոշելու համար

Այս մոտեցումը ապահովում է նախաձեռնողական մոնիթորինգ՝ առանց մշտական ​​ամբողջականության ստուգումների զգալի ռեսուրսների սպառման։

8.6.4.4 Վնասված տվյալների բազայի վերականգնում

Եթե ​​տվյալների բազայում հայտնաբերվեն վնասումներ, կարող եք օգտագործել DBCC CHECKDB-ը՝ աննշան վնասները շտկելու համար։ Եթե այն ձախողվի, կարող եք փորձել երրորդ կողմի լուծում։ SQL տվյալների բազայի վերականգնման գործիք, որը, ընդհանուր առմամբ, առաջարկում է վերականգնման ավելի բարձր մակարդակ խիստ վնասված տվյալների բազաների դեպքում։

9. Սերվերի շրջանակով ընդդեմ տվյալների բազայի շրջանակով ընդլայնված իրադարձությունների

9.1 Սերվերի շրջանակում իրադարձությունների նիստեր

Սերվերի շրջանակներում գտնվող սեսիաները վերահսկում են ամբողջ համակարգի ակտիվությունը SQL Server օրինակ։ Այս սեսիաները ստեղծվում են ON SERVER պայմանով և պահպանվում են գլխավոր տվյալների բազայում։

CREATE EVENT SESSION [ServerWideMonitoring] ON SERVER
ADD EVENT sqlserver.sql_statement_completed
ADD TARGET package0.event_file(
    SET filename=N'C:\XEvents\ServerWide.xel'
);

Սերվերի շրջանակներում տեղակայված սեսիաները գրանցում են իրադարձությունները բոլոր տվյալների բազաներից և հարմար են օրինակի մակարդակի մոնիթորինգի համար։

9.2 Տվյալների բազայի շրջանակով միջոցառումների նիստեր (Azure SQL տվյալների բազա)

Տվյալների բազայի շրջանակներում սեսիաները սահմանափակվում են մեկ տվյալների բազայով և հիմնականում օգտագործվում են Azure SQL տվյալների բազայում, որտեղ սերվերի մակարդակի մուտքը սահմանափակված է։

CREATE EVENT SESSION [DatabaseSpecificMonitoring] ON DATABASE
ADD EVENT sqlserver.sql_statement_completed
ADD TARGET package0.event_file(
    SET filename=N'DatabaseMonitoring.xel'
);

Azure SQL տվյալների բազայում իրադարձությունների ֆայլերը պահվում են Azure Blob Storage-ում, այլ ոչ թե տեղական ֆայլային համակարգերում։

9.3 Տարբերություններ և օգտագործման դեպքեր

Սերվերի շրջանակներում սեսիաները ապահովում են բոլոր տվյալների բազաների համապարփակ մոնիթորինգ, բայց պահանջում են բարձրացված թույլտվություններ: Տվյալների բազայի շրջանակներում սեսիաները առաջարկում են մեկուսացում և հարմար են որոշակի ծրագրերի կամ վարձակալների մոնիթորինգի համար:

Օգտագործեք սերվերի շրջանակներում սեսիաներ կենտրոնացված մոնիթորինգի, տվյալների բազաների կատարողականի խնդիրների լուծման և անվտանգության աուդիտի համար: Օգտագործեք տվյալների բազայի շրջանակներում սեսիաներ Azure SQL տվյալների բազայում, բազմավարձակալ միջավայրերում կամ մոնիթորինգի պարտականությունները ծրագրային թիմերին պատվիրակելիս:

10. Ընդլայնված իրադարձություններ Azure SQL տվյալների բազայում

10.1 Azure-ին հատուկ նկատառումներ

Azure SQL տվյալների բազան իրականացնում է ընդլայնված իրադարձություններ՝ որոշ տարբերություններով տեղական տվյալների բազայի հետ համեմատած։ SQL ServerՍեսիաները լռելյայնորեն կենտրոնացած են տվյալների բազայի վրա, և իրադարձությունների ֆայլերի պահեստավորումը օգտագործում է Azure Blob Storage-ը՝ տեղական ֆայլային համակարգերի փոխարեն:

Azure Blob Storage-ի նույնականացման համար անհրաժեշտ է SAS տոկեն, որը կարգավորված է իրադարձության ֆայլի թիրախում: Միացման տողերը հղում են կատարում պահեստի հաշվին և կոնտեյներին, որտեղ պահվում են իրադարձության ֆայլերը:

10.2 Azure-ում հասանելի թիրախներ

Azure SQL տվյալների բազան աջակցում է հետևյալ ընդլայնված իրադարձությունների թիրախներին՝

  • event_file: Գրում է Azure Blob պահեստում
  • ring_buffer: Հիշողության վրա հիմնված պահեստավորում՝ նույն վարքագծով, ինչ տեղական պահեստավորումը։
  • event_counter: Հաշվում է իրադարձությունների առաջացման քանակը

event_file թիրախը պահանջում է Azure Blob Storage-ի հավատարմագրերի կարգավորում։

ADD TARGET package0.event_file(
    SET filename=N'https://yourstorageaccount.blob.core.windows.net/container/EventFile.xel'
)

10.3 Տվյալների բազայի շրջանակով սեսիաների ստեղծում

Ստեղծեք սեսիա Azure SQL տվյալների բազայում։

CREATE EVENT SESSION [AzureMonitoring] ON DATABASE
ADD EVENT sqlserver.sql_statement_completed(
    ACTION(sqlserver.sql_text, sqlserver.database_name)
)
ADD TARGET package0.ring_buffer
WITH (MAX_MEMORY=4096 KB);

ALTER EVENT SESSION [AzureMonitoring] ON DATABASE STATE = START;

Azure-ում տվյալների բազայի շրջանակներում սեսիաները նման են տեղում գտնվող սերվերի շրջանակներում սեսիաներին, սակայն դրանց շրջանակը սահմանափակված է ընթացիկ տվյալների բազայով։

11. Լավագույն փորձը և կատարողականի օպտիմալացումը

11.1 Արդյունավետության վրա ազդեցության նվազագույնի հասցնելը

Ընդլայնված միջոցառումները նախատեսված են նվազագույն ծախսատարության համար, սակայն սխալ կարգավորումը կարող է ազդել արդյունավետության վրա: Հետևեք այս ուղեցույցներին՝

  • Օգտագործեք որոշակի պրեդիկատներ իրադարձությունները զտելու համար, այլ ոչ թե ամեն ինչ գրանցեք
  • Խուսափեք մշակման վրա ծախսատարություն ավելացնող ավելորդ գործողությունների հավաքագրումից
  • Ընտրեք համապատասխան թիրախներ՝ հիմնվելով տվյալների պահպանման կարիքների վրա
  • Սահմանեք ողջամիտ բուֆերի չափսեր և առաքման ուշացումներ
  • Վերահսկեք սեսիայի ռեսուրսների սպառումը՝ օգտագործելով DMV-ներ

11.2 Ճիշտ իրադարձությունների և ֆիլտրերի ընտրություն

Ընտրեք իրադարձություններ, որոնք անմիջականորեն ուղղված են ձեր մոնիթորինգի նպատակներին: Խուսափեք բարձր հաճախականության իրադարձություններից, եթե անհրաժեշտ չէ, և միշտ կիրառեք պրեդիկատներ՝ տվյալների ծավալը նվազեցնելու համար:

Օրինակ, բոլոր sql_statement_completed իրադարձությունները գրանցելու փոխարեն, զտեք որոշակի տվյալների բազաներ կամ տևողության շեմեր։

WHERE (
    [sqlserver].[database_name] = N'ProductionDB'
    AND [duration] > 1000000
)

11.3 Նպատակային ընտրության ուղեցույցներ

Ընտրեք թիրախներ՝ հիմնվելով ձեր վերլուծության պահանջների վրա.

  • Օգտագործեք event_file-ը մանրամասն պատմական վերլուծության և երկարաժամկետ պահպանման համար
  • Օգտագործեք ring_buffer-ը իրական ժամանակի մոնիթորինգի համար՝ նվազագույն I/O ազդեցությամբ։
  • Օգտագործեք event_counter-ը, երբ միայն հաճախականությունը կարևոր է
  • Օգտագործեք հիստոգրամը բաշխման վերլուծության համար
  • Օգտագործեք pair_matching-ը փոխկապակցված իրադարձությունների վերլուծության համար

11.4 Սեսիայի կարգավորման առաջարկություններ

Կարգավորեք սեսիաները համապատասխան ռեսուրսների սահմանափակումներով՝

  • Սահմանեք MAX_MEMORY-ը՝ հիմնվելով սպասվող իրադարձությունների ծավալի և սերվերի ռեսուրսների վրա
  • Օգտագործեք ALLOW_SINGLE_EVENT_LOSS՝ նվազագույն վերադիր ծախսերի համար՝ սցենարների մեծ մասում
  • Սահմանեք MAX_DISPATCH_LATENCY-ն՝ իրական ժամանակի կարիքները և կատարողականությունը հավասարակշռելու համար
  • Օգտագործեք PER_CPU հիշողության բաժանումը բազմամշակիչ համակարգերում
  • Խուսափեք STARTUP_STATE=ON-ից, եթե շարունակական մոնիթորինգ չի պահանջվում

11.5 Միջոցառման ֆայլի չափի և պահպանման կառավարում

Կարգավորեք ֆայլերի տեղափոխումը՝ սկավառակի անսահմանափակ օգտագործումը կանխելու համար.

ADD TARGET package0.event_file(
    SET filename=N'C:\XEvents\Session.xel',
        max_file_size=(100),
        max_rollover_files=(10)
)

Այս կարգավորումը պահպանում է մոտավորապես 1 ԳԲ իրադարձությունների տվյալներ (10 ֆայլ × 100 ՄԲ): Կարգավորեք՝ հիմնվելով ձեր պահպանման պահանջների և հասանելի պահեստի վրա:

12. Երկարաձգված իրադարձությունների խնդիրների լուծում

12.1 Ընդհանուր խնդիրներ և լուծումներ

Ընդլայնված իրադարձությունների տարածված խնդիրներից են տվյալները չհավաքագրող սեսիաները, աշխատանքի վատթարացումը, ֆայլերի թիրախային խնդիրները և սեսիայի անսպասելի վարքագիծը։

12.2 Սեսիան չի գրանցում տվյալները

Եթե ​​սեսիան չի գրանցում սպասվող իրադարձությունները՝

  1. Ստուգեք, որ սեսիան մեկնարկել է sys.dm_xe_sessions-ի միջոցով։
  2. Ստուգեք պրեդիկատները՝ համոզվելու համար, որ դրանք չեն զտում բոլոր իրադարձությունները։
  3. Հաստատեք, որ իրադարձությունները գործարկվում են՝ ժամանակավորապես հեռացնելով ֆիլտրերը։
  4. Ստուգեք թույլտվությունները՝ համոզվելու համար, որ դուք ունեք սեսիայի տվյալները դիտելու հնարավորություն։
  5. Ստուգեք, որ նպատակային կարգավորումը ճիշտ է և գրելի։
SELECT name, create_time
FROM sys.dm_xe_sessions
WHERE name = 'YourSessionName';

12.3 Արդյունավետության վատթարացում

Եթե ​​«Ընդլայնված իրադարձություններ» գործառույթը (Extended Events) առաջացնում է կատարողականի խնդիրներ՝

  1. Ավելացնել պրեդիկատներ՝ իրադարձությունների ծավալը նվազեցնելու համար։
  2. Հեռացրեք ավելորդ գործողությունները, որոնք հավաքում են լրացուցիչ տվյալներ։
  3. Գրելու հաճախականությունը նվազեցնելու համար ավելացրեք MAX_DISPATCH_LATENCY-ն։
  4. Փոխեք EVENT_RETENTION_MODE-ը ALLOW_SINGLE_EVENT_LOSS-ի։
  5. Բարձր հաճախականության իրադարձությունների համար խորհուրդ է տրվում օգտագործել ring_buffer-ը event_file-ի փոխարեն։

12.4 Ֆայլի թիրախի հետ կապված խնդիրներ

Ֆայլի թիրախի խնդիրները հաճախ կապված են թույլտվությունների կամ սկավառակի տարածքի հետ.

  1. Ստուգեք SQL Server Ծառայության հաշիվն ունի նպատակային գրացուցակում գրելու թույլտվություններ։
  2. Համոզվեք, որ բավարար սկավառակի տարածք կա։
  3. Ստուգեք, որ նշված ուղին գոյություն ունի և հասանելի է։
  4. Վերանայեք ֆայլերի տեղափոխման կարգավորումը, եթե ֆայլերը չեն տեղափոխվում սպասվածի պես։

12.5 Համակարգային տեսարաններով վրիպազերծում

Օգտագործեք DMV-ները՝ երկարացված միջոցառումների խնդիրները ախտորոշելու համար.

-- Check session status
SELECT s.name, s.create_time, s.total_regular_buffers, s.total_large_buffers
FROM sys.dm_xe_sessions AS s;

-- View session targets and their status
SELECT
    s.name AS SessionName,
    t.target_name,
    t.execution_count,
    CAST(t.target_data AS XML) AS TargetData
FROM sys.dm_xe_session_targets AS t
JOIN sys.dm_xe_sessions AS s
    ON s.address = t.event_session_address;

-- Check for dropped events
SELECT s.name, s.dropped_event_count, s.dropped_buffer_count
FROM sys.dm_xe_sessions AS s;

13. Ավելի բարդ թեմաներ

13.1 Միջոցառումների անհատական ​​փաթեթների ստեղծում

Առաջադեմ օգտատերերը կարող են ստեղծել հատուկ միջոցառումների փաթեթներ՝ ընդլայնելու համար SQL Server Ընդլայնված միջոցառումների ֆունկցիոնալություն։ Սա պահանջում է C++ մշակում և ինտեգրում SQL Server ընդարձակելիության շրջանակ։

Հատուկ փաթեթները հնարավորություն են տալիս վերահսկել ծրագրին հատուկ իրադարձությունները կամ ինտեգրել երրորդ կողմի մոնիթորինգի համակարգերը ընդլայնված իրադարձությունների ենթակառուցվածքի հետ։

13.2 Միջոցառման նիստի ձևանմուշներ

SSMS-ը տրամադրում է ներկառուցված ձևանմուշներ մոնիթորինգի տարածված սցենարների համար: Նոր սեսիաներ ստեղծելիս ձևանմուշներին մուտք գործեք օգնականի միջոցով.

  1. Նոր նստաշրջան երկխոսության պատուհանում սեղմեք Կաղապար dropdown:
  2. Ընտրեք առկա ձևանմուշներից, ինչպիսիք են՝ «Հարցման մանրամասների հետևում» կամ «Համակարգի առողջությունը»։
  3. Փոփոխեք ձևանմուշը՝ համապատասխանեցնելով այն ձեր կոնկրետ պահանջներին։

13.3 Մոնիթորինգի լուծումների հետ ինտեգրում

Ընդլայնված իրադարձությունների տվյալները կարող են սնուցել ձեռնարկության մոնիթորինգի լուծումները.

  • Արտահանեք իրադարձությունների տվյալները կենտրոնացված գրանցման համակարգեր
  • Վերլուծել իրադարձությունների ֆայլերը և տվյալները բեռնել մոնիթորինգի տվյալների բազաներում
  • Ստեղծեք անհատական ​​​​վահանակներ՝ օգտագործելով BI գործիքներ
  • Գործարկեք ծանուցումներ՝ հիմնվելով որոշակի իրադարձությունների օրինաչափությունների վրա
  • Հարաբերակցել SQL Server միջոցառումներ՝ կիրառական և ենթակառուցվածքային չափանիշներով

13.4 Ավտոմատացում և ժամանակացույցի կազմում

Ավտոմատացրեք ընդլայնված միջոցառումների կառավարումը՝ օգտագործելով SQL Server Գործակալ:

  • Ստեղծեք աշխատանքներ՝ որոշակի ժամանակահատվածներում նիստերը սկսելու/դադարեցնելու համար
  • Ժամանակացույցի միջոցառումների ֆայլերի վերլուծություն և հաշվետվություն
  • Կիրառեք տվյալների պահպանման քաղաքականություն՝ արխիվացնելով կամ ջնջելով հին իրադարձությունների ֆայլերը
  • Ավտոմատացրեք արձագանքը հայտնաբերված պայմաններին, ինչպիսիք են կատարողականի խնդիրները կամ անվտանգության իրադարձությունները

14. Միգրացիա SQL Server Պրոֆիլավոր

14.1 SQL Server Պրոֆիլերի իրադարձությունների համեմատումը ընդլայնված իրադարձությունների

Microsoft-ը տրամադրում է համապատասխանեցում SQL Server Պրոֆիլավոր իրադարձություններ և ընդլայնված իրադարձություններ: Հաճախակի օգտագործվող համապատասխանեցումները ներառում են՝

  • SQL:BatchCompleted -> sql_batch_completed
  • SQL:BatchStarting -> sql_batch_starting
  • SQL:StmtCompleted -> sql_statement_completed
  • SQL:StmtStarting -> sql_statement_starting
  • Փակուղու գրաֆիկ -> xml_deadlock_report
  • Աուդիտի մուտք -> մուտք գործել
  • Աուդիտի ելք -> ելք

14.2 Հետագծի սահմանումների փոխակերպում

Փոխարկել առկա SQL Server Profiler-ը հետևում է ընդլայնված իրադարձությունների նիստերին՝ նույնականացնելով համարժեք իրադարձությունները և կարգավորելով համապատասխան պրեդիկատները: SSMS-ը օգնություն է տրամադրում տարածված փոխակերպումների համար:

Վերանայեք հետագծման ֆիլտրերը և դրանք փոխակերպեք ընդլայնված իրադարձությունների պրեդիկատի: ընդլայնված իրադարձությունների գործողությունները փոխարինում են հետագծման սյուները SQL Server Պրոֆիլավորող.

14.3 Կատարողականի համեմատություն

Երկարաձգված միջոցառումները զգալիորեն ավելի լավ կատարողականություն են ապահովում, քան SQL Server Profiler: Համեմատական ​​ուսումնասիրությունները ցույց են տալիս, որ Extended Events-ը սպառում է ավելի քիչ CPU ցիկլեր և ավելի քիչ ազդեցություն ունի գործարքների թողունակության վրա:

Ընդլայնված իրադարձությունները օգտագործում են ասինխրոն մշակում և օպտիմիզացված հիշողության կառավարում, մինչդեռ SQL Server Profiler-ը հիմնված է համաժամանակյա իրադարձությունների գրանցման վրա, որը արգելափակում է մինչև հետքի մշակման ավարտը։

15: եզրափակում

15.1 Հիմնական հասկացությունների ամփոփում

SQL Server Extended Events-ը ապահովում է հզոր, թեթև շրջանակ մոնիթորինգի և խնդիրների լուծման համար։ SQL ServerՃարտարապետությունը բաղկացած է իրադարձություններից, գործողություններից, պրեդիկատներից, թիրախներից և սեսիաներից, որոնք համատեղ աշխատում են սերվերի համապատասխան գործունեությունը գրանցելու համար։

Սեսիաները կարող են ստեղծվել SSMS-ի կամ T-SQL-ի միջոցով, ինչը ճկունություն է ապահովում ինչպես ad-hoc խնդիրների լուծման, այնպես էլ ավտոմատացված մոնիթորինգի համար: Բազմաթիվ թիրախային տեսակներ աջակցում են վերլուծության տարբեր մոտեցումներ՝ ring_buffer-ի միջոցով իրական ժամանակի մոնիթորինգից մինչև event_file-ի միջոցով պատմական վերլուծություն:

Extended Events-ը ապահովում է ավելի բարձր արդյունավետություն՝ համեմատած… SQL Server Profiler-ը միաժամանակ ապահովելով ավելի համապարփակ մոնիթորինգի հնարավորություններ: Համակարգը թույլ է տալիս տվյալների բազայի ադմինիստրատորներին և մշակողներին ախտորոշել խնդիրները, օպտիմալացնել աշխատանքը, բարելավել անվտանգությունը և պահպանել համապատասխանությունը:

15.2 Հաջորդ քայլերը և լրացուցիչ ռեսուրսները

Ձեր զարգացումը շարունակելու համար SQL Server XEvents-ի փորձագիտությունը՝

  • Գործնական փորձ ձեռք բերելու համար փորձարկման միջավայրերում ներդրեք ընդլայնված միջոցառումներ
  • Վերանայեք Microsoft-ի փաստաթղթերը՝ ամբողջական միջոցառումների կատալոգների և մանրամասն շարահյուսական հղումների համար։
  • միանալ SQL Server համայնքային ֆորումներ՝ ուրիշների փորձից սովորելու համար
  • Ուսումնասիրեք առաջադեմ սցենարներ, ինչպիսիք են անհատականացված փաթեթները և ինտեգրումը մոնիթորինգի հարթակների հետ
  • Մշակել նիստերի ձևանմուշների գրադարան՝ մոնիթորինգի տարածված սցենարների համար

16 Հաճախակի տրվող հարցերի բաժին

Հարց: Ինչ են SQL Server Երկարաձգված միջոցառումներ;

A: SQL Server Extended Events-ը թեթև կատարողականի մոնիթորինգի համակարգ է, որը ինտեգրված է SQL Server Տվյալների բազայի շարժիչ, որը գրանցում է սերվերի գործողությունների մասին մանրամասն տեղեկատվություն՝ նվազագույն ծախսերով։

Հարց. Ինչո՞վ են տարբերվում ընդլայնված միջոցառումները SQL Server Պրոֆիլեր՞

Ա. Ընդլայնված միջոցառումները ապահովում են ավելի լավ կատարողականություն, ավելի ցածր ծախսեր և ավելի ճկուն կարգավորում, քան SQL Server Պրոֆիլավորող. SQL Server Profiler-ը հնացած է, և Microsoft-ը խորհուրդ է տալիս օգտագործել Extended Events-ը բոլոր մոնիթորինգի առաջադրանքների համար։

Հարց. Կարո՞ղ են երկարաձգված իրադարձությունները ազդել SQL Server կատարումը?

Ա. Երբ ընդլայնված իրադարձությունները ճիշտ են կարգավորված՝ համապատասխան պրեդիկատներով և ռեսուրսների սահմանափակումներով, դրանք նվազագույն ազդեցություն ունեն կատարողականի վրա: Առանց ֆիլտրման վատ կարգաբերումը կարող է ազդել կատարողականի վրա:

Հարց. Ի՞նչ թույլտվություններ են անհրաժեշտ ընդլայնված միջոցառումների սեսիաներ ստեղծելու համար:

Ա. Ձեզ անհրաժեշտ է ALTER ANY EVENT SESSION թույլտվություն սերվերի շրջանակներում գտնվող նիստերի համար կամ CONTROL թույլտվություն տվյալների բազայի շրջանակներում գտնվող նիստերի համար։

Հարց. Ինչպե՞ս կարող եմ դիտել ընդլայնված միջոցառումների տվյալները։

A: Օգտագործեք SQL Server Management Studio-ի ուղիղ տվյալների դիտիչ, sys.fn_xe_file_target_read_file-ի միջոցով իրադարձությունների ֆայլերի հարցում կամ DMV-ների միջոցով օղակաձև բուֆերի տվյալների հարցում:

Հարց. Կարո՞ղ է Extended Events-ը հայտնաբերել տվյալների բազայի վնասվածությունը:

Ա. Այո, «Ընդլայնված իրադարձություններ» գործառույթը կարող է գրանցել կոռուպցիայի հետ կապված սխալները (823, 824, 825) և կասկածելի էջի իրադարձությունները՝ տրամադրելով վաղ նախազգուշացում հնարավոր կոռուպցիայի խնդիրների մասին։

Հարց. Ի՞նչ տարբերություն կա իրադարձությունների, գործողությունների և պրեդիկատների միջև։

Ա. Իրադարձությունները իրադարձություններ են, որոնք դուք ցանկանում եք վերահսկել: Գործողությունները լրացուցիչ տեղեկատվություն են ավելացնում գրանցված իրադարձություններին: Պրեդիկատը զտում է իրադարձությունները՝ հիմնվելով պայմանների վրա՝ տվյալների ծավալը նվազեցնելու համար:

Հարց. Ինչպե՞ս վերահսկել որոշակի ծրագրերի կամ տվյալների բազաների հարցումները:

Ա. Ձեր իրադարձության կոնֆիգուրացիայում օգտագործեք պրեդիկատներ՝ տվյալների բազայի_անվան, client_app_name-ի կամ այլ համապատասխան դաշտերով զտելու համար:

Հարց. Ի՞նչ թիրախներ պետք է օգտագործեմ ընդլայնված միջոցառումների համար:

Ա. Օգտագործեք event_file-ը մշտական ​​​​պահեստավորման և պատմական վերլուծության համար, ring_buffer-ը՝ իրական ժամանակի մոնիթորինգի համար՝ ցածր վերադիր ծախսերով, event_counter-ը՝ պարզ հաճախականության հետևման համար, իսկ հիստոգրամը՝ բաշխման վերլուծության համար։

Հարց. Հասանելի՞ են արդյոք ընդլայնված իրադարձությունները Azure SQL տվյալների բազայում:

Ա. Այո, Azure SQL տվյալների բազան աջակցում է տվյալների բազայի շրջանակներում գործող ընդլայնված իրադարձություններին՝ Azure Blob պահեստում պահվող իրադարձությունների ֆայլերով։

Հարց. Ինչպե՞ս կարող եմ լուծել ընդլայնված իրադարձությունների սեսիայի խնդիրը, որը տվյալներ չի գրանցում:

Ա. Ստուգեք, որ սեսիան մեկնարկել է, ստուգեք, որ պրեդիկատները չեն զտում բոլոր իրադարձությունները, հաստատեք թիրախի կարգավորումը և վերանայեք թույլտվությունները՝ օգտագործելով համակարգի DMV-ները:

Հարց. Կարո՞ղ եմ ավտոմատացնել ընդլայնված միջոցառումների կառավարումը:

A: Այո, օգտագործեք SQL Server Գործակալի աշխատանքներ՝ նիստերը սկսելու/դադարեցնելու, իրադարձությունների ֆայլերը վերլուծելու, պահպանման քաղաքականություններ իրականացնելու և հայտնաբերված պայմաններին արձագանքելու համար։

Սայլակ


Հեղինակի մասին

Յուան Շենգ տվյալների բազայի ավագ ադմինիստրատոր (DBA) է՝ ավելի քան 10 տարվա փորձով։ SQL Server միջավայրերի և ձեռնարկությունների տվյալների բազայի կառավարման ոլորտում: Նա հաջողությամբ լուծել է տվյալների բազայի վերականգնման հարյուրավոր սցենարներ ֆինանսական ծառայությունների, առողջապահության և արտադրական կազմակերպություններում:

Յուանը մասնագիտանում է SQL Server տվյալների բազայի վերականգնում, բարձր մատչելիության լուծումներև կատարողականի օպտիմալացում: Նրա լայնածավալ գործնական փորձը ներառում է բազմաբայթ ծավալով տվյալների բազաների կառավարում, իրականացում Միշտ հասանելիության խմբեր, և մշակելով ավտոմատացված պահուստավորման և վերականգնման ռազմավարություններ կարևորագույն բիզնես համակարգերի համար։

Իր տեխնիկական փորձագիտության և գործնական մոտեցման միջոցով Յուանը կենտրոնանում է համապարփակ ուղեցույցներ ստեղծելու վրա, որոնք կօգնեն տվյալների բազայի ադմինիստրատորներին և ՏՏ մասնագետներին լուծել բարդ խնդիրներ։ SQL Server արդյունավետորեն մարտահրավերներ է նետում։ Նա տեղեկացված է մնում վերջին նորություններից SQL Server թողարկումները և Microsoft-ի զարգացող տվյալների բազայի տեխնոլոգիաները, պարբերաբար փորձարկելով վերականգնման սցենարները՝ համոզվելու համար, որ նրա առաջարկությունները արտացոլում են իրական աշխարհի լավագույն փորձը։

Հարցեր ունեք SQL Server Վերականգնո՞ւմ, թե՞ անհրաժեշտ է տվյալների բազայի խնդիրների լուծման լրացուցիչ ուղեցույց: Յուանը ողջունում է ձեզ: արձագանքներ և առաջարկություններ այս տեխնիկական ռեսուրսները բարելավելու համար։

Կիսվել հիմա ՝