Iji Zabbix iji nyochaa ọdụ data SQL Server MS

Okwu mmalite

A na-enwekarị mkpa ịkọrọ onye nchịkwa ozugbo banyere nsogbu ndị metụtara nchekwa data (database).

Isiokwu a ga-akọwa ihe kwesịrị ịhazi na Zabbix iji nyochaa nchekwa data MS SQL Server.

Biko mara na a gaghị enye nkọwa gbasara otu esi ahazi, Otú ọ dị, usoro na ndụmọdụ izugbe, yana nkọwa zuru ezu nke ịgbakwunye ihe data omenala site na usoro echekwara ga-enye n'isiokwu a.
Ọzọkwa, naanị ndị isi arụmọrụ counters ga-atụle ebe a.

mkpebi

Nke mbụ, m ga-akọwa ihe ndị ahụ niile na-arụ ọrụ (site na ihe data dị na Zabbix) anyị chọrọ:

  1. Disk ezi uche
    1. Nkeji diski nkeji nkeji/Gụọ
      Na-egosi nkezi oge, egosipụtara na sekọnd, maka ịgụ data sitere na diski. Nkezi uru na-arụ ọrụ ọnụ. Disk sk/gụọ ekwesịghị ịfe mili sekọnd iri. Uru kachasị nke counter arụmọrụ Avg. Disk sk/gụọ ekwesịghị ịfe milisekọnd 10.

      Zabbix: perf_counter[LogicalDisk(_Total)Avg. Disk sec/Gụọ], ọ dịkwa mkpa idobe diski achọrọ, dịka ọmụmaatụ dịka nke a: perf_counter[LogicalDisk(C:)Avg. Disk sk/Gụọ]

      Ihe atụ kpalite:
      {NODE_NAME:perf_counter[LogicalDisk(_Total) Nkeji. Disk sec/Gụọ]. ikpeazụ()}>0.005, larịị-elu
      и
      {NODE_NAME:perf_counter[LogicalDisk(_Total) Nkeji. Disk sk/Gụọ]. ikpeazụ()}>0.0025, larịị-ọkara

    2. Nkeji diski nkeji nkeji/Dee
      Na-egosi nkezi oge, egosipụtara na sekọnd, maka ide data na diski. Nkezi uru na-arụ ọrụ ọnụ. Disk sk/Dee ekwesịghị ịfe mili sekọnd iri. Uru kachasị nke counter arụmọrụ Avg. Disk sk/Dee ekwesịghị ịfe 10 millisekọnd.

      Zabbix: perf_counter[LogicalDisk(_Total)Avg. Disk sec/Dee], ọ dịkwa mkpa idobe diski achọrọ, dịka ọmụmaatụ dịka nke a: perf_counter[LogicalDisk(C:)Avg. Disk sk/Dee]

      Ihe atụ kpalite:
      {NODE_NAME:perf_counter[LogicalDisk(_Total) Nkeji. Disk sk/Dee]. ikpeazụ ()}>0.005, larịị-elu
      и
      {NODE_NAME:perf_counter[LogicalDisk(_Total) Nkeji. Disk sk/Dee]. ikpeazụ ()}>0.0025, larịị-ọkara

    3. Ogologo kwụ n'ahịrị diski

      Nkezi ogologo kwụ n'ahịrị nke arịrịọ na diski ahụ. Na-egosiputa ọnụọgụ nke arịrịọ diski na-echere nhazi n'ime oge a kapịrị ọnụ. A na-ewere kwụ n'ahịrị nke na-erughị 2 maka otu diski dị ka ihe nkịtị. Ọ bụrụ na enwere ihe karịrị arịrịọ abụọ na kwụ n'ahịrị, mgbe ahụ enwere ike ibufe diski ahụ ma enweghị ike ịhazi arịrịọ mbata. Ị nwere ike ịchọpụta kpọmkwem ọrụ diski enweghị ike ijikwa Avg counters. Ogologo agụ Disk kwụ n'ahịrị na ọra. Ogologo Disk Wright Queue Ogologo (ahiri nke ederede arịrịọ).
      Ọkara uru Anaghị atụ ogologo ogologo Disk Queue, mana a na-agbakọ ya site na iji iwu Little site na tiori mgbakọ na mwepụ nke kwụ n'ahịrị. Dị ka iwu a si dị, ọnụ ọgụgụ nke arịrịọ na-echere ka ahazi ya bụ, na nkezi, hà nhata ugboro ugboro nke arịrịọ na-abawanye site na oge nhazi arịrịọ. Ndị ahụ. n'ọnọdụ anyị Avg. Ogologo kwụ n'ahịrị diski = (Nnyefe diski/skịta) * (Avg. Disk sec/Nfefe).

      Nkeji A na-enye ogologo oge Disk Queue dị ka otu n'ime ihe ndị bụ isi maka ikpebi ibu dị na sistemụ diski, Otú ọ dị, iji nyochaa ya nke ọma, ọ dị mkpa iji gosipụta nhazi anụ ahụ nke usoro nchekwa ahụ. Dịka ọmụmaatụ, maka otu draịvụ ike, a na-ewere uru karịa 2 dị oke egwu, ma ọ bụrụ na diski ahụ dị na RAID nke diski 4, mgbe ahụ ị ga-echegbu onwe gị ma ọ bụrụ na uru ahụ karịrị 4*2=8.

      Zabbix: perf_counter[LogicalDisk(_Total)Avg. Ogologo Disk Queue], ọ dịkwa mkpa idobe diski achọrọ, dịka ọmụmaatụ dịka nke a: perf_counter[LogicalDisk(C:)Avg. Ogologo Disk Queue]

  2. na ebe nchekwa
    1. Ibe/sk
      Na-egosi ọnụọgụ ibe nke SQL Server gụrụ na diski ma ọ bụ degara diski iji dozie ohere ịnweta ibe ebe nchekwa na-etinyeghị na RAM n'oge nnweta. Uru a bụ nchikota nke ibe ntinye/sk na ibe mmepụta/sk, ma na-eburukwa n'uche paging (paging/swaping) nke cache sistemu maka ịnweta faịlụ data ngwa. Na mgbakwunye, nke a gụnyere ige faịlụ ndị na-abụghị nke echekwara nke edobere ozugbo na ebe nchekwa. Nke a bụ ọnụ ọgụgụ bụ isi nke kwesịrị ileba anya ma ọ bụrụ na ị na-enwe ebe nchekwa dị elu yana ịkpa oke oke jikọtara ya. Ihe ngụkọ a na-akọwa ọnụọgụ mgbanwe na uru ya (ọ bụghị ọnụ ọgụgụ kasị elu) kwesịrị ịdị nso na efu. Mmụba na swapping na-egosi mkpa ọ dị ịbawanye RAM ma ọ bụ belata ọnụ ọgụgụ mmemme ngwa na-agba ọsọ na sava ahụ.

      Zabbix: perf_counter[MemoryPages/skịta] Ihe atụ kpalite:
      {NODE_NAME:perf_counter[MemoryPages/sec].min(5m)}>1000, ozi ọkwa

    2. Mmejọ ibe/sekọnd

      Nke a bụ uru counter mmejọ ibe. Mmejọ ibe na-eme mgbe usoro na-ezo aka na ibe ebe nchekwa mebere nke na-anọghị na nhazi RAM. Ihe counter a na-eburu n'uche ma mmejọ ibe ndị ahụ chọrọ ịnweta diski, yana ndị kpatara ibe ahụ nọ n'èzí arụ ọrụ na RAM. Ọtụtụ ndị nhazi nwere ike ijikwa mmejọ ibe Ụdị 2 n'egbughị oge. Agbanyeghị, ijikwa mmejọ ibe 1 nke chọrọ ohere diski nwere ike bute igbu oge.

      Zabbix: perf_counter[MemoryPage Faults/sec] Ihe atụ kpalite:
      {NODE_NAME:perf_counter[MemoryPage Faults/sec].min(5m)}>1000, ozi ọkwa

    3. Bytes dị

      Na-echekwa ọnụọgụ ebe nchekwa dị na bytes maka usoro dị iche iche iji na-agba ọsọ. Ọgụgụ dị ala na-egosi ebe nchekwa dị ala. Ihe ngwọta bụ ịbawanye ebe nchekwa. Nke a mita kwesịrị n'ọtụtụ ọnọdụ na-mgbe niile n'elu 5000 kV.
      Ọ bụ ihe ezi uche dị na ya iji aka gị tọọ ọnụ ụzọ maka Mbytes dị maka ihe ndị a:

      •50% ebe nchekwa efu dị = Magburu onwe
      •25% ebe nchekwa dị = Achọrọ nlebara anya
      • 10% efu = Nsogbu enwere ike
      • Ihe na-erughị 5% ebe nchekwa dị = Mkpa maka ọsọ, ịkwesịrị itinye aka.
      Zabbix: perf_counter[Memory dị Bytes]

  3. Ihe nhazi (Mkpokọta): % Oge nhazi
    Igwe counter a na-egosi pasentị oge ihe nrụpụta ahụ nọ na-arụ ọrụ maka eriri anaghị arụ ọrụ. Enwere ike ịtụle uru a dị ka oke oge ejiri rụọ ọrụ bara uru. Enwere ike kenye onye nrụpụta ọ bụla na eri na-adịghị arụ ọrụ, nke na-eri usoro nhazi na-adịghị arụpụta ihe nke eriri ndị ọzọ na-eji. Ejiri ọnụ ọgụgụ dị mkpụmkpụ nwere ike iru pasentị 100 mara counter a. Otú ọ dị, ọ bụrụ na e nwere ogologo oge ebe processor tinye n'ọrụ bụ n'elu 80 percent, mgbe ahụ, usoro ga-arụ ọrụ nke ọma na-eji ọzọ processors.

    Zabbix: perf_counter[Processor(_Total)% Processor Time], ebe a nwekwara ike igosi ya site na isi.
    Ihe atụ kpalite:
    {NODE_NAME:perf_counter[Processor(_Total)% Oge nhazi].min(5m)}>80, ozi ọkwa

  4. Njikọ netwọkụ (*): % ngụkọta Bytes/sk
    Ngụkọta ọnụ ọgụgụ bytes ezigara ma nata kwa sekọnd n'ofe ihu niile. Nke a bụ bandwidth interface (na bytes). Ọ dị mkpa iji tụnyere uru nke counter a na bandwit kachasị nke kaadị netwọk. N'ozuzu, counter a ekwesịghị igosi ihe karịrị 50% itinye n'ọrụ nke bandwidth nkwụnye netwọkụ.
    Zabbix: perf_counter[Network Interface(*)Bytes zitere/sk]
  5. Ihe nkesa MS SQL: Ụzọ nnweta
    Ihe Ụzọ Nweta dị na SQL Server na-enye ọnụ ọgụgụ iji nyere aka soro ịnweta data ezi uche dị na ya n'ime nchekwa data. A na-achịkwa ohere anụ ahụ na ibe nchekwa data na diski site na iji counter njikwa nchekwa. Nyochaa ụzọ ịnweta data na nchekwa data na-enyere aka ikpebi ma enwere ike imeziwanye arụmọrụ ajụjụ site na ịgbakwunye ma ọ bụ gbanwee ndeksi, ịgbakwunye ma ọ bụ nkebi na-ebugharị, ịgbakwunye faịlụ ma ọ bụ otu faịlụ, defragmenting index, ma ọ bụ ịgbanwe ederede ajụjụ. Na mgbakwunye, ị nwere ike iji ọnụ ọgụgụ ihe Access Methods iji nyochaa nha data, indexes, na ohere efu na nchekwa data gị, ikike nleba anya na nkewa maka ihe atụ nkesa ọ bụla. Nkewa nke ukwuu nwere ike ibelata arụmọrụ.

    1. Nkewa ibe/sk
      Ọnụọgụ nke ibe ibe kwa nkeji emere n'ihi oke oke ibe ibe. Uru dị elu maka metric a pụtara na mgbe ị na-arụ ọrụ ntinye na melite arụmọrụ na data, SQL Server ga-arụ ọrụ dị ukwuu nke akụrụngwa iji kewaa ibe wee bugharịa akụkụ nke ibe dị na ebe ọhụrụ. Ekwesịrị izere ọrụ dị otú ahụ mgbe ọ bụla enwere ike. Ị nwere ike ịgbalị idozi nsogbu ahụ n'ụzọ abụọ:
      - mepụta ndeksi gbakọtara maka kọlụm na-abawanye na akpaghị aka. N'okwu a, agaghị etinye ndekọ ọhụrụ n'ime ibe ndị data ejirilarị, mana ha ga-ejide ibe ọhụrụ n'usoro;
      - wughachi indexes site na ịbawanye uru nke paramita Fillfactor. Nhọrọ a na-enye gị ohere idobe ohere efu na ibe ndeksi nke a ga-eji nabata data ọhụrụ, na-enweghị mkpa ọrụ nkewa ibe.
      Zabbix: perf_counter["MSSQL$INSTANCE_NAME: Ụzọ nweta peeji nkewa/sk",30] Ihe atụ kpalite: {NODE_NAME:perf_counter["MSSQL$INSTANCE_NAME: Access Methodspage Splits/sec",30] ikpeazụ()}>{NODE_NAME:perf_counter["MSSQL$INSTANCE_NAME:SQL StatisticsBatch Requests/sk",30]. ikpeazụ()} /5, ọkwa-ozi
    2. Nyocha zuru ezu/sekọnd
      Ọnụ ọgụgụ nyocha zuru oke kwa nkeji. Arụmọrụ ndị a na-agụnye nyocha tebụl isi yana nyocha index zuru ezu. A kwụsiri ike na-abawanye na nke a egosi nwere ike na-egosi na usoro mmebi (enweghị mkpa indexes, ha siri ike nkewa, ọdịda nke optimizer iji ẹdude indexes, ọnụnọ nke ejibeghi indexes). Otú ọ dị, ọ dị mma ịmara na nyocha zuru ezu na obere tebụl adịghị njọ mgbe niile, n'ihi na ọ bụrụ na ị nwere ike itinye tebụl dum na RAM, mgbe ahụ, nyocha zuru ezu ga-adị ngwa ngwa. Ma n'ọtụtụ ọnọdụ, mmụba kwụsiri ike na counter a ga-egosi mmebi nke usoro ahụ. Ihe a niile bụ naanị maka sistemụ OLTP. Na sistemụ OLAP, nyocha zuru oke mgbe niile bụ ihe nkịtị.
      Zabbix: perf_counter["MSSQL$INSTANCE_NAME: Ụzọ nweta ụzọ nyocha zuru ezu/nkeji",30]

  6. Ihe nkesa MS SQL: Njikwa nchekwa
    Ihe njikwa Buffer na-enye ọnụ ọgụgụ na-enyere gị aka inyocha ka SQL Server si eji akụrụngwa ndị a:
    - ebe nchekwa maka ịchekwa ibe data;
    - counters na-enyocha I/O anụ ahụ ka SQL Server na-agụ ma na-ede ibe nchekwa data;
    - Mgbasa ebe nchekwa ọdọ mmiri iji gbasaa ebe nchekwa nchekwa site na iji ebe nchekwa ngwa ngwa na-adịghị agbanwe agbanwe, dị ka draịva steeti siri ike (SSD);
    - Nchekwa ebe nchekwa na counters nke SQL Server na-enyere aka inweta ozi ndị a;
    - ma enwere mgbochi nke enweghị ncheta anụ ahụ kpatara. Ọ bụrụ na enweghị ike ịchekwa data a na-enwetakarị na cache, a na-amanye SQL Server ka ọ gụọ ya na diski;
    Ọ ga-ekwe omume ịkwalite arụmọrụ ajụjụ site na ịba ụba nke ebe nchekwa ma ọ bụ inyefe ebe nchekwa ọzọ na data cache ma ọ bụ chekwaa ihe owuwu SQL Server dị n'ime?
    - ugboro ole SQL Server na-agụ data sitere na diski. Tụnyere arụmọrụ ndị ọzọ dị ka ịnweta ebe nchekwa, I/O anụ ahụ na-ewe ogologo oge iji wuchaa. Mbelata I/O nwere ike melite arụmọrụ ajụjụ.

    1. Buffer Cache kụrụ redio
      Na-egosi ole data SQL Server nwere ike dabara na nchekwa nchekwa. Ọnụ ahịa a dị elu, nke ka mma, n'ihi na Maka SQL Server iji nweta ibe data nke ọma, ha ga-adịrịrị na nchekwa nchekwa, na enweghị ọrụ ntinye/ mmepụta (I/O). Ọ bụrụ na ị na-ahụ mbelata na nkezi uru nke counter a, ị kwesịrị ịtụle ịgbakwunye RAM. Ihe ngosi a kwesịrị ịdị n'elu 90% maka sistemụ OLTP yana karịa 50% maka sistemụ OLAP.
      Zabbix: perf_counter["MSSQL$INSTANCE_NAME:Buffer ManagerBuffer cache hit ratio",30] Ihe atụ kpalite: {NODE_NAME:perf_counter["MSSQL$INSTANCE_NAME:Buffer ManagerBuffer cache hit ratio",30] ikpeazụ()}<70, ọkwa dị elu.
      и
      {NODE_NAME:perf_counter["MSSQL$INSTANCE_NAME:Buffer ManagerBuffer cache hit ratio",30]()}<80, larịị-ọkara
    2. Ogologo ndụ ndụ
      Na-egosi ogologo oge ibe ahụ ga-anọ na ebe nchekwa na-adịgide adịgide n'ọnọdụ ọ dị ugbu a. Ọ bụrụ na ọnụ ahịa ahụ na-adaba, ọ pụtara na sistemụ na-eji ọdọ mmiri nchekwa eme ihe. Ya mere, ịrụ ọrụ ebe nchekwa nwere ike ịkpata nsogbu na-ebute arụmọrụ adịghị mma. Ọ bụ ihe kwesịrị ịrịba ama na ọ dịghị eluigwe na ala egosi n'okpuru nke onye nwere ike n'ụzọ doro anya na-ekpe ikpe na usoro na-eme ihe n'ụzọ na-ezighị ezi ọdọ mmiri (ihe ngosi nke 300 sekọnd e ochie kemgbe MS SQL Server 2012).
      Zabbix: perf_counter["MSSQL$INSTANCE_NAME:Buffer Manager Page echere ndụ",30] Ihe atụ kpalite: {NODE_NAME:perf_counter["MSSQL$INSTANCE_NAME:Buffer ManagerPage expectancy",30] ikpeazụ()}<5, ozi ọkwa

  7. Ihe nkesa MS SQL: Statistics General
    General Statistics ihe na SQL Server na-enye counters na-enye gị ohere inyocha mkpokọta ihe nkesa ọrụ, dị ka ọnụ ọgụgụ nke concurrent njikọ na ọnụ ọgụgụ nke ndị ọrụ kwa sekọnd ejikọta ma ọ bụ na-akwụsị na kọmputa na-agba ọsọ SQL Server. Metiriks ndị a bara uru na nnukwu nhazi azụmahịa n'ịntanetị (OLTP) ebe ọnụ ọgụgụ buru ibu nke ndị ahịa na-ejikọta ma na-akwụsị mgbe niile site na ihe atụ nke SQL Server.

    1. Akpọchiela usoro
      Ọnụọgụ usoro egbochiri ugbu a.
      Zabbix: perf_counter["MSSQL$INSTANCE_NAME: Akpọchiela usoro nchịkọta akụkọ izugbe",30] Ihe atụ kpalite: ({NODE_NAME:perf_counter["MSSQL$INSTANCE_NAME: Akpọchiela usoro mgbakọ na mwepụ izugbe",30].min(2m,0)}>=0)
      na ({NODE_NAME:perf_counter["MSSQL$INSTANCE_NAME: Akpọchiela usoro nchịkọta akụkọ izugbe",30].oge (0)}>=50000)
      na ({NODE_NAME:perf_counter["MSSQL$INSTANCE_NAME: Gbochie Usoro Statistics General",30].oge (0)}<=230000), ọkwa ozi (ebe a enwere mmachi nrịbama site na 05:00 ruo 23:00)
    2. Njikọ ndị ọrụ
      Ọnụọgụ ndị ọrụ ejikọrọ na SQL Server ugbu a.
      Zabbix: perf_counter["MSSQL$INSTANCE_NAME:General Statistics User Connections",30]

  8. Ihe nkesa MS SQL: Mkpọchi
    Ihe mkpọchi dị na Microsoft SQL Server na-enye ozi gbasara mkpọchi SQL Server enwetara maka ụdị akụrụngwa ọ bụla. A na-enye mkpọchi na akụrụngwa SQL Server, dị ka ahịrị gụrụ ma ọ bụ gbanwee site na azụmahịa, iji gbochie ọtụtụ azụmahịa iji akụrụngwa n'otu oge. Dịka ọmụmaatụ, ọ bụrụ na enwetara mkpọchi pụrụ iche (X) site na azụmahịa n'usoro dị na tebụl, ọ nweghị azụmahịa ọzọ nwere ike ịgbanwe ahịrị ahụ ruo mgbe ewepụtara mkpọchi ahụ. Ibelata ojiji nke mkpọchi na-abawanye concurrency, nke nwere ike imeziwanye arụmọrụ n'ozuzu ya. Enwere ike nyochaa ọtụtụ oge nke ihe mkpọchi n'otu oge, nke ọ bụla ga-anọchi anya mkpọchi n'ụdị akụrụngwa dị iche.

    1. Nkezi Oge echere (ms)
      Nkezi oge echere (na milliseconds) maka arịrịọ mkpọchi niile chọrọ nchere. Igwe okwu a na-egosi ogologo oge, na nkezi, usoro onye ọrụ ga-echere n'ahịrị iji nweta mkpọchi na akụrụngwa. Uru kacha mma nke counter a na-adabere kpamkpam na ọrụ gị, ọ na-esiri ike ikpebi uru ọ bụla maka ngwa niile. Ọ bụrụ na counter a dị elu, ọ nwere ike igosi nsogbu mkpọchi na nchekwa data gị.
      Zabbix: perf_counter["MSSQL$INSTANCE_NAME:Mkpọchi(_Total)Oge echere (ms)",30] Ihe atụ kpalite: {NODE_NAME:perf_counter["MSSQL$INSTANCE_NAME:Mkpọchi(_Total)Oge echere (ms)",30] ikpeazụ()}>=500, ozi ọkwa
    2. Oge Mkpọchi (ms)
      Ngụkọta oge echere mkpọchi (na milliseconds) n'ime nkeji ikpeazụ.
      Zabbix: perf_counter["MSSQL$INSTANCE_NAME:Locks(_Total)Oge echere (ms)",30]
    3. Mkpọchi echere/sk
      Ọnụọgụ ugboro n'ime sekọnd ikpeazụ nke eri chere n'ihi arịrịọ mkpọchi.
      Zabbix: perf_counter["MSSQL$INSTANCE_NAME:Mkpọchi(_Total)Mkpọchi chere/sk",30]
    4. Mkpọchi oge gafechara/sk
      Ọnụọgụ oge nke mkpọchi enweghị ike inweta site na robin. Uru nhazi nhazi nhazi nke SQL Server na-ekpebi ugboro ole eri nwere ike ịtụgharị tupu oge agwụ ma eri ahụ abaghị uru.
      Zabbix: perf_counter["MSSQL$INSTANCE_NAME:Mkpọchi(_Total)Mkpọchi oge/sk",30] Ihe atụ kpalite: {NODE_NAME:perf_counter["MSSQL$INSTANCE_NAME:Mkpọchi(_Total)Mkpọchi(_Total)Mkpọchi oge/sk",30]. ikpeazụ()}>1000, ọkwa-ozi
    5. Arịrịọ mkpọchi/sk
      Ọnụọgụ arịrịọ kwa sekọnd nke ụdị mkpọchi akọwapụtara.
      Zabbix: perf_counter["MSSQL$INSTANCE_NAME:Mkpọchi(_Total)Arịrịọ mkpọchi/sk",30] Ihe atụ kpalite: {NODE_NAME:perf_counter["MSSQL$INSTANCE_NAME:Mkpọchi(_Total)Arịrịọ Mkpọchi/sk",30] ikpeazụ()}>500000, ozi ọkwa
    6. Ọnụọgụ mkpọchi nke imechi/sk
      Ọnụọgụ arịrịọ mkpọchi kwa sekọnd nke na-ebute mkpọchi. Ọnụnọ nke akpọchi akpọchi na-egosi ajụjụ arụrụghị nke ọma nke na-egbochi akụrụngwa nkekọrịta.
      Zabbix: perf_counter["MSSQL$INSTANCE_NAME:Ọnụ ọgụgụ nke Deadlocks/sk",30] Ihe atụ kpalite: {NODE_NAME:perf_counter["MSSQL$INSTANCE_NAME:Mkpọchi(_Total)Ọnụ ọgụgụ nke Deadlocks/sk",30] ikpeazụ()}>1, dị elu dị elu

  9. Ihe nkesa MS SQL: Onye njikwa ebe nchekwa
    Ihe njikwa ebe nchekwa dị na Microsoft SQL Server na-enye ọnụ ọgụgụ iji nyochaa ojiji ebe nchekwa n'obosara. Ileba anya na ojiji ebe nchekwa nke ihe nkesa dum iji nyochaa ọrụ onye ọrụ na ojiji akụrụngwa nwere ike inye aka chọpụta ihe mgbochi arụmọrụ. Nleba anya ebe nchekwa nke ihe atụ nke SQL Server na-eji nwere ike inye aka chọpụta:
    - ma enwere ụkọ ebe nchekwa anụ ahụ zuru oke iji chekwaa data a na-ejikarị na cache. Ọ bụrụ na enweghị ebe nchekwa zuru oke, SQL Server ga-ebubata data na diski;
    - Ma arụmọrụ ajụjụ nwere ike imeziwanye ma ọ bụrụ na agbakwunyere ebe nchekwa ma ọ bụ ọnụọgụ ebe nchekwa dị maka ịchekwa data ma ọ bụ ihe arụrụ arụ SQL Server dị n'ime.

    1. Enyemaka ebe nchekwa pụtara ìhè
      Na-egosi mkpokọta ọnụọgụ usoro nwetara nke ọma ebe nchekwa ebe ọrụ. Ọ bụrụ na egosi na-agbada nke ọma, ọ dị mkpa ịbawanye RAM.
      Zabbix: perf_counter["MSSQL$INSTANCE_NAME:Memory ManagerMemory nyere onyinye pụtara ìhè",30]
    2. Enyemaka ebe nchekwa na-echere
      Na-egosi mkpokọta ọnụ ọgụgụ nke usoro na-eche ka ekenye ya ebe nchekwa ọrụ. Site na uto kwụsiri ike nke ihe ngosi, ọ dị mkpa ịbawanye RAM.
      Zabbix: perf_counter["MSSQL$INSTANCE_NAME:Enye aka ebe nchekwa ebe nchekwa",30]

  10. Ihe nkesa MS SQL: Statistics
    Ihe Statistics dị na Microsoft SQL Server na-enye ọnụ ọgụgụ iji nyochaa mkpokọta na ụdị ajụjụ ezigara na ihe atụ nke SQL Server. Nleba anya ọnụ ọgụgụ nke mkpokọta ajụjụ na nchikota yana ọnụọgụ batches nwetara site na ihe atụ nke SQL Server na-enye nghọta n'ime ngwa ngwa SQL Server na-emezu ajụjụ onye ọrụ yana ka ngwa ngwa ngwa ngwa ajụjụ si arụ ọrụ nke ọma.

    1. Arịrịọ ogbe/sk
      Ọnụọgụ nke ngwugwu iwu Transact-SQL natara kwa nkeji. Oke ọ bụla na-emetụta ọnụ ọgụgụ ndị a (I/O, ọnụọgụ ndị ọrụ, nha cache, mgbagwoju ajụjụ, wdg). Ọnụ ọgụgụ dị elu nke arịrịọ ngwugwu na-egosi ntinye dị elu.
      Zabbix: perf_counter["MSSQL$INSTANCE_NAME:SQL StatisticsBatch Arịrịọ/sk",30]

Na mgbakwunye na ihe niile dị n'elu, ị nwekwara ike hazie ihe data ndị ọzọ (yana mepụta ihe na-akpalite na ha na ọkwa na-esote).
1) ọnụọgụ ohere diski efu
2) nha nke faịlụ data nchekwa data na ndekọ
na ihe ndị ọzọ.
Agbanyeghị, ihe ngosi ndị a niile anaghị egosi nsogbu nke ajụjụ ozugbo.
Iji mee nke a, ịkwesịrị ịmepụta counters pụrụ iche nke gị.
N'ihi ihe nzuzo, agaghị m enye ihe atụ nke counters dị otú ahụ. Ọzọkwa, a na-ahazi ha iche maka sistemụ ọ bụla. Mana achọpụtara m na maka sistemụ dị ka 1C, NAV na CRM, enwere ike imepụta ọnụ ọgụgụ pụrụ iche yana ndị mmepe dị mkpa.
M ga-enye ihe atụ nke ịmepụta ihe ngosi n'ozuzu nke na-egosi ole arịrịọ na-agba ọsọ na ole arịrịọ na-echere (kwụsịtụrụ ma ọ bụ gbochie) n'oge ọ bụla.
Iji mee nke a, ịkwesịrị ịmepụta usoro echekwara:
Usoro

USE [ИМЯ_БАЗЫ_ДАННЫХ]
GO

SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

CREATE PROCEDURE [nav].[ZabbixGetCountRequestStatus]
	@Status nvarchar(255)
AS
BEGIN
	/*
		возвращает кол-во запросов с заданным статусом
	*/
	SET NOCOUNT ON;

	select count(*) as [Count]
	from sys.dm_exec_requests ER with(readuncommitted)
	where [status]=@Status
END

Ọzọ, ịkwesịrị ịga na nchekwa ebe Zabbix dị (zabbixconfuserparams.d) wee mepụta faịlụ 2 na mgbakwunye ps1 (PowerShell) wee dee koodu ndị a na nke ọ bụla n'ime ha:
Koodu maka ịgba ọsọ ajụjụ

$SQLServer = "НАЗВАНИЕ_ЭКЗЕМПЛЯРА";
$uid = "ЛОГИН"; 
$pwd = "ПАРОЛЬ";
$Status="running";

$connectionString = "Server = $SQLServer; Database=НАЗВАНИЕ_БД; Integrated Security = False; User ID = $uid; Password = $pwd;";

$connection = New-Object System.Data.SqlClient.SqlConnection;
$connection.ConnectionString = $connectionString;

#Создаем запрос непосредственно к MSSQL / Create a request directly to MSSQL
$SqlCmd = New-Object System.Data.SqlClient.SqlCommand;
$SqlCmd.CommandType = [System.Data.CommandType]::StoredProcedure;  
$SqlCmd.CommandText = "nav.ZabbixGetCountRequestStatus";
$SqlCmd.Connection = $Connection;

$paramStatus=$SqlCmd.Parameters.Add("@Status" , [System.Data.SqlDbType]::VarChar);
$paramStatus.Value = $Status;

$connection.Open();
$SqlAdapter = New-Object System.Data.SqlClient.SqlDataAdapter;
$SqlAdapter.SelectCommand = $SqlCmd;
$DataSet = New-Object System.Data.DataSet;
$SqlAdapter.Fill($DataSet) > $null;
$connection.Close();

$result = $DataSet.Tables[0].Rows[0]["Count"];

write-host $result;

Koodu maka arịrịọ na-echere

$SQLServer = "НАЗВАНИЕ_ЭКЗЕМПЛЯРА";
$uid = "ЛОГИН"; 
$pwd = "ПАРОЛЬ";
$Status="suspended";

$connectionString = "Server = $SQLServer; Database=НАЗВАНИЕ_БД; Integrated Security = False; User ID = $uid; Password = $pwd;";

$connection = New-Object System.Data.SqlClient.SqlConnection;
$connection.ConnectionString = $connectionString;

#Создаем запрос непосредственно к MSSQL / Create a request directly to MSSQL
$SqlCmd = New-Object System.Data.SqlClient.SqlCommand;
$SqlCmd.CommandType = [System.Data.CommandType]::StoredProcedure;  
$SqlCmd.CommandText = "nav.ZabbixGetCountRequestStatus";
$SqlCmd.Connection = $Connection;

$paramStatus=$SqlCmd.Parameters.Add("@Status" , [System.Data.SqlDbType]::VarChar);
$paramStatus.Value = $Status;

$connection.Open();
$SqlAdapter = New-Object System.Data.SqlClient.SqlDataAdapter;
$SqlAdapter.SelectCommand = $SqlCmd;
$DataSet = New-Object System.Data.DataSet;
$SqlAdapter.Fill($DataSet) > $null;
$connection.Close();

$result = $DataSet.Tables[0].Rows[0]["Count"];

write-host $result;

Ugbu a ịkwesịrị ịmepụta faịlụ nwere paramita onye ọrụ yana ndọtị .conf (ma ọ bụ tinye ahịrị na faịlụ onye ọrụ dị, ma ọ bụrụ na emepụtara ya na mbụ) wee tinye ahịrị ndị a:
UserParameter=PARAMETER_NAME_NUMBER_nke_QUERIES EXECUTED,powershell -NoProfile -ExecutionPolicy Bypass -File FULL_PATHzabbixconfuserparams.dFILE_NAME_FOR_EXECUTED_QUERYES.ps1
UserParameter=PARAMETER_NAME_NUMBER_WAITING_REQUESTS,powershell -NoProfile -ExecutionPolicy Bypass -File FULL_PATHzabbixconfuserparams.dFILE_NAME_FOR_WAITING_REQUESTS.ps1
Mgbe nke a gasịrị, chekwaa faịlụ .conf wee malitegharịa onye ọrụ Zabbix.
Mgbe nke a gasịrị, anyị na-agbakwunye ihe ọhụrụ abụọ na Zabbix (na nke a, aha na igodo bụ otu):
PARAMETER_NAME_NUMBER OF_REQUESTS mere
PARAMETER_NAME_NUMBER OF_WAITING_REQUESTS
Ị nwere ike ịmepụta eserese na mkpalite maka ihe data omenala emepụtara.

Ọ bụrụ na ọnụ ọgụgụ nke arịrịọ na-echere na-abawanye nke ọma, mgbe ahụ ajụjụ na-esonụ nwere ike igosipụta arịrịọ niile na-agba ọsọ na nke na-echere n'oge a nyere nkọwa site na ebe na n'okpuru ihe nbanye a na-eme, ederede na atụmatụ ajụjụ, yana nkọwa ndị ọzọ:
Usoro

/*Активные, готовые к выполнению и ожидающие запросы, а также те, что явно блокируют другие сеансы*/
with tbl0 as (
select ES.[session_id]
,ER.[blocking_session_id]
,ER.[request_id]
,ER.[start_time]
,ER.[status]
,ES.[status] as [status_session]
,ER.[command]
,ER.[percent_complete]
,DB_Name(coalesce(ER.[database_id], ES.[database_id])) as [DBName]
,(select top(1) [text] from sys.dm_exec_sql_text(ER.[sql_handle])) as [TSQL]
,(select top(1) [objectid] from sys.dm_exec_sql_text(ER.[sql_handle])) as [objectid]
,(select top(1) [query_plan] from sys.dm_exec_query_plan(ER.[plan_handle])) as [QueryPlan]
,ER.[wait_type]
,ES.[login_time]
,ES.[host_name]
,ES.[program_name]
,ER.[wait_time]
,ER.[last_wait_type]
,ER.[wait_resource]
,ER.[open_transaction_count]
,ER.[open_resultset_count]
,ER.[transaction_id]
,ER.[context_info]
,ER.[estimated_completion_time]
,ER.[cpu_time]
,ER.[total_elapsed_time]
,ER.[scheduler_id]
,ER.[task_address]
,ER.[reads]
,ER.[writes]
,ER.[logical_reads]
,ER.[text_size]
,ER.[language]
,ER.[date_format]
,ER.[date_first]
,ER.[quoted_identifier]
,ER.[arithabort]
,ER.[ansi_null_dflt_on]
,ER.[ansi_defaults]
,ER.[ansi_warnings]
,ER.[ansi_padding]
,ER.[ansi_nulls]
,ER.[concat_null_yields_null]
,ER.[transaction_isolation_level]
,ER.[lock_timeout]
,ER.[deadlock_priority]
,ER.[row_count]
,ER.[prev_error]
,ER.[nest_level]
,ER.[granted_query_memory]
,ER.[executing_managed_code]
,ER.[group_id]
,ER.[query_hash]
,ER.[query_plan_hash]
,EC.[most_recent_session_id]
,EC.[connect_time]
,EC.[net_transport]
,EC.[protocol_type]
,EC.[protocol_version]
,EC.[endpoint_id]
,EC.[encrypt_option]
,EC.[auth_scheme]
,EC.[node_affinity]
,EC.[num_reads]
,EC.[num_writes]
,EC.[last_read]
,EC.[last_write]
,EC.[net_packet_size]
,EC.[client_net_address]
,EC.[client_tcp_port]
,EC.[local_net_address]
,EC.[local_tcp_port]
,EC.[parent_connection_id]
,EC.[most_recent_sql_handle]
,ES.[host_process_id]
,ES.[client_version]
,ES.[client_interface_name]
,ES.[security_id]
,ES.[login_name]
,ES.[nt_domain]
,ES.[nt_user_name]
,ES.[memory_usage]
,ES.[total_scheduled_time]
,ES.[last_request_start_time]
,ES.[last_request_end_time]
,ES.[is_user_process]
,ES.[original_security_id]
,ES.[original_login_name]
,ES.[last_successful_logon]
,ES.[last_unsuccessful_logon]
,ES.[unsuccessful_logons]
,ES.[authenticating_database_id]
,ER.[sql_handle]
,ER.[statement_start_offset]
,ER.[statement_end_offset]
,ER.[plan_handle]
,ER.[dop]
,coalesce(ER.[database_id], ES.[database_id]) as [database_id]
,ER.[user_id]
,ER.[connection_id]
from sys.dm_exec_requests ER with(readuncommitted)
right join sys.dm_exec_sessions ES with(readuncommitted)
on ES.session_id = ER.session_id 
left join sys.dm_exec_connections EC  with(readuncommitted)
on EC.session_id = ES.session_id
)
, tbl as (
select [session_id]
,[blocking_session_id]
,[request_id]
,[start_time]
,[status]
,[status_session]
,[command]
,[percent_complete]
,[DBName]
,OBJECT_name([objectid], [database_id]) as [object]
,[TSQL]
,[QueryPlan]
,[wait_type]
,[login_time]
,[host_name]
,[program_name]
,[wait_time]
,[last_wait_type]
,[wait_resource]
,[open_transaction_count]
,[open_resultset_count]
,[transaction_id]
,[context_info]
,[estimated_completion_time]
,[cpu_time]
,[total_elapsed_time]
,[scheduler_id]
,[task_address]
,[reads]
,[writes]
,[logical_reads]
,[text_size]
,[language]
,[date_format]
,[date_first]
,[quoted_identifier]
,[arithabort]
,[ansi_null_dflt_on]
,[ansi_defaults]
,[ansi_warnings]
,[ansi_padding]
,[ansi_nulls]
,[concat_null_yields_null]
,[transaction_isolation_level]
,[lock_timeout]
,[deadlock_priority]
,[row_count]
,[prev_error]
,[nest_level]
,[granted_query_memory]
,[executing_managed_code]
,[group_id]
,[query_hash]
,[query_plan_hash]
,[most_recent_session_id]
,[connect_time]
,[net_transport]
,[protocol_type]
,[protocol_version]
,[endpoint_id]
,[encrypt_option]
,[auth_scheme]
,[node_affinity]
,[num_reads]
,[num_writes]
,[last_read]
,[last_write]
,[net_packet_size]
,[client_net_address]
,[client_tcp_port]
,[local_net_address]
,[local_tcp_port]
,[parent_connection_id]
,[most_recent_sql_handle]
,[host_process_id]
,[client_version]
,[client_interface_name]
,[security_id]
,[login_name]
,[nt_domain]
,[nt_user_name]
,[memory_usage]
,[total_scheduled_time]
,[last_request_start_time]
,[last_request_end_time]
,[is_user_process]
,[original_security_id]
,[original_login_name]
,[last_successful_logon]
,[last_unsuccessful_logon]
,[unsuccessful_logons]
,[authenticating_database_id]
,[sql_handle]
,[statement_start_offset]
,[statement_end_offset]
,[plan_handle]
,[dop]
,[database_id]
,[user_id]
,[connection_id]
from tbl0
where [status] in ('suspended', 'running', 'runnable')
)
, tbl_group as (
select [blocking_session_id]
from tbl
where [blocking_session_id]<>0
group by [blocking_session_id]
)
, tbl_res_rec as (
select [session_id]
,[blocking_session_id]
,[request_id]
,[start_time]
,[status]
,[status_session]
,[command]
,[percent_complete]
,[DBName]
,[object]
,[TSQL]
,[QueryPlan]
,[wait_type]
,[login_time]
,[host_name]
,[program_name]
,[wait_time]
,[last_wait_type]
,[wait_resource]
,[open_transaction_count]
,[open_resultset_count]
,[transaction_id]
,[context_info]
,[estimated_completion_time]
,[cpu_time]
,[total_elapsed_time]
,[scheduler_id]
,[task_address]
,[reads]
,[writes]
,[logical_reads]
,[text_size]
,[language]
,[date_format]
,[date_first]
,[quoted_identifier]
,[arithabort]
,[ansi_null_dflt_on]
,[ansi_defaults]
,[ansi_warnings]
,[ansi_padding]
,[ansi_nulls]
,[concat_null_yields_null]
,[transaction_isolation_level]
,[lock_timeout]
,[deadlock_priority]
,[row_count]
,[prev_error]
,[nest_level]
,[granted_query_memory]
,[executing_managed_code]
,[group_id]
,[query_hash]
,[query_plan_hash]
,[most_recent_session_id]
,[connect_time]
,[net_transport]
,[protocol_type]
,[protocol_version]
,[endpoint_id]
,[encrypt_option]
,[auth_scheme]
,[node_affinity]
,[num_reads]
,[num_writes]
,[last_read]
,[last_write]
,[net_packet_size]
,[client_net_address]
,[client_tcp_port]
,[local_net_address]
,[local_tcp_port]
,[parent_connection_id]
,[most_recent_sql_handle]
,[host_process_id]
,[client_version]
,[client_interface_name]
,[security_id]
,[login_name]
,[nt_domain]
,[nt_user_name]
,[memory_usage]
,[total_scheduled_time]
,[last_request_start_time]
,[last_request_end_time]
,[is_user_process]
,[original_security_id]
,[original_login_name]
,[last_successful_logon]
,[last_unsuccessful_logon]
,[unsuccessful_logons]
,[authenticating_database_id]
,[sql_handle]
,[statement_start_offset]
,[statement_end_offset]
,[plan_handle]
,[dop]
,[database_id]
,[user_id]
,[connection_id]
, 0 as [is_blocking_other_session]
from tbl
union all
select tbl0.[session_id]
,tbl0.[blocking_session_id]
,tbl0.[request_id]
,tbl0.[start_time]
,tbl0.[status]
,tbl0.[status_session]
,tbl0.[command]
,tbl0.[percent_complete]
,tbl0.[DBName]
,OBJECT_name(tbl0.[objectid], tbl0.[database_id]) as [object]
,tbl0.[TSQL]
,tbl0.[QueryPlan]
,tbl0.[wait_type]
,tbl0.[login_time]
,tbl0.[host_name]
,tbl0.[program_name]
,tbl0.[wait_time]
,tbl0.[last_wait_type]
,tbl0.[wait_resource]
,tbl0.[open_transaction_count]
,tbl0.[open_resultset_count]
,tbl0.[transaction_id]
,tbl0.[context_info]
,tbl0.[estimated_completion_time]
,tbl0.[cpu_time]
,tbl0.[total_elapsed_time]
,tbl0.[scheduler_id]
,tbl0.[task_address]
,tbl0.[reads]
,tbl0.[writes]
,tbl0.[logical_reads]
,tbl0.[text_size]
,tbl0.[language]
,tbl0.[date_format]
,tbl0.[date_first]
,tbl0.[quoted_identifier]
,tbl0.[arithabort]
,tbl0.[ansi_null_dflt_on]
,tbl0.[ansi_defaults]
,tbl0.[ansi_warnings]
,tbl0.[ansi_padding]
,tbl0.[ansi_nulls]
,tbl0.[concat_null_yields_null]
,tbl0.[transaction_isolation_level]
,tbl0.[lock_timeout]
,tbl0.[deadlock_priority]
,tbl0.[row_count]
,tbl0.[prev_error]
,tbl0.[nest_level]
,tbl0.[granted_query_memory]
,tbl0.[executing_managed_code]
,tbl0.[group_id]
,tbl0.[query_hash]
,tbl0.[query_plan_hash]
,tbl0.[most_recent_session_id]
,tbl0.[connect_time]
,tbl0.[net_transport]
,tbl0.[protocol_type]
,tbl0.[protocol_version]
,tbl0.[endpoint_id]
,tbl0.[encrypt_option]
,tbl0.[auth_scheme]
,tbl0.[node_affinity]
,tbl0.[num_reads]
,tbl0.[num_writes]
,tbl0.[last_read]
,tbl0.[last_write]
,tbl0.[net_packet_size]
,tbl0.[client_net_address]
,tbl0.[client_tcp_port]
,tbl0.[local_net_address]
,tbl0.[local_tcp_port]
,tbl0.[parent_connection_id]
,tbl0.[most_recent_sql_handle]
,tbl0.[host_process_id]
,tbl0.[client_version]
,tbl0.[client_interface_name]
,tbl0.[security_id]
,tbl0.[login_name]
,tbl0.[nt_domain]
,tbl0.[nt_user_name]
,tbl0.[memory_usage]
,tbl0.[total_scheduled_time]
,tbl0.[last_request_start_time]
,tbl0.[last_request_end_time]
,tbl0.[is_user_process]
,tbl0.[original_security_id]
,tbl0.[original_login_name]
,tbl0.[last_successful_logon]
,tbl0.[last_unsuccessful_logon]
,tbl0.[unsuccessful_logons]
,tbl0.[authenticating_database_id]
,tbl0.[sql_handle]
,tbl0.[statement_start_offset]
,tbl0.[statement_end_offset]
,tbl0.[plan_handle]
,tbl0.[dop]
,tbl0.[database_id]
,tbl0.[user_id]
,tbl0.[connection_id]
, 1 as [is_blocking_other_session]
from tbl_group as tg
inner join tbl0 on tg.blocking_session_id=tbl0.session_id
)
,tbl_res_rec_g as (
select [plan_handle],
[sql_handle],
cast([start_time] as date) as [start_time]
from tbl_res_rec
group by [plan_handle],
[sql_handle],
cast([start_time] as date)
)
,tbl_rec_stat_g as (
select qs.[plan_handle]
,qs.[sql_handle]
--,cast(qs.[last_execution_time] as date)	as [last_execution_time]
,min(qs.[creation_time])					as [creation_time]
,max(qs.[execution_count])				as [execution_count]
,max(qs.[total_worker_time])				as [total_worker_time]
,min(qs.[last_worker_time])				as [min_last_worker_time]
,max(qs.[last_worker_time])				as [max_last_worker_time]
,min(qs.[min_worker_time])				as [min_worker_time]
,max(qs.[max_worker_time])				as [max_worker_time]
,max(qs.[total_physical_reads])			as [total_physical_reads]
,min(qs.[last_physical_reads])			as [min_last_physical_reads]
,max(qs.[last_physical_reads])			as [max_last_physical_reads]
,min(qs.[min_physical_reads])				as [min_physical_reads]
,max(qs.[max_physical_reads])				as [max_physical_reads]
,max(qs.[total_logical_writes])			as [total_logical_writes]
,min(qs.[last_logical_writes])			as [min_last_logical_writes]
,max(qs.[last_logical_writes])			as [max_last_logical_writes]
,min(qs.[min_logical_writes])				as [min_logical_writes]
,max(qs.[max_logical_writes])				as [max_logical_writes]
,max(qs.[total_logical_reads])			as [total_logical_reads]
,min(qs.[last_logical_reads])				as [min_last_logical_reads]
,max(qs.[last_logical_reads])				as [max_last_logical_reads]
,min(qs.[min_logical_reads])				as [min_logical_reads]
,max(qs.[max_logical_reads])				as [max_logical_reads]
,max(qs.[total_clr_time])					as [total_clr_time]
,min(qs.[last_clr_time])					as [min_last_clr_time]
,max(qs.[last_clr_time])					as [max_last_clr_time]
,min(qs.[min_clr_time])					as [min_clr_time]
,max(qs.[max_clr_time])					as [max_clr_time]
,max(qs.[total_elapsed_time])				as [total_elapsed_time]
,min(qs.[last_elapsed_time])				as [min_last_elapsed_time]
,max(qs.[last_elapsed_time])				as [max_last_elapsed_time]
,min(qs.[min_elapsed_time])				as [min_elapsed_time]
,max(qs.[max_elapsed_time])				as [max_elapsed_time]
,max(qs.[total_rows])						as [total_rows]
,min(qs.[last_rows])						as [min_last_rows]
,max(qs.[last_rows])						as [max_last_rows]
,min(qs.[min_rows])						as [min_rows]
,max(qs.[max_rows])						as [max_rows]
,max(qs.[total_dop])						as [total_dop]
,min(qs.[last_dop])						as [min_last_dop]
,max(qs.[last_dop])						as [max_last_dop]
,min(qs.[min_dop])						as [min_dop]
,max(qs.[max_dop])						as [max_dop]
,max(qs.[total_grant_kb])					as [total_grant_kb]
,min(qs.[last_grant_kb])					as [min_last_grant_kb]
,max(qs.[last_grant_kb])					as [max_last_grant_kb]
,min(qs.[min_grant_kb])					as [min_grant_kb]
,max(qs.[max_grant_kb])					as [max_grant_kb]
,max(qs.[total_used_grant_kb])			as [total_used_grant_kb]
,min(qs.[last_used_grant_kb])				as [min_last_used_grant_kb]
,max(qs.[last_used_grant_kb])				as [max_last_used_grant_kb]
,min(qs.[min_used_grant_kb])				as [min_used_grant_kb]
,max(qs.[max_used_grant_kb])				as [max_used_grant_kb]
,max(qs.[total_ideal_grant_kb])			as [total_ideal_grant_kb]
,min(qs.[last_ideal_grant_kb])			as [min_last_ideal_grant_kb]
,max(qs.[last_ideal_grant_kb])			as [max_last_ideal_grant_kb]
,min(qs.[min_ideal_grant_kb])				as [min_ideal_grant_kb]
,max(qs.[max_ideal_grant_kb])				as [max_ideal_grant_kb]
,max(qs.[total_reserved_threads])			as [total_reserved_threads]
,min(qs.[last_reserved_threads])			as [min_last_reserved_threads]
,max(qs.[last_reserved_threads])			as [max_last_reserved_threads]
,min(qs.[min_reserved_threads])			as [min_reserved_threads]
,max(qs.[max_reserved_threads])			as [max_reserved_threads]
,max(qs.[total_used_threads])				as [total_used_threads]
,min(qs.[last_used_threads])				as [min_last_used_threads]
,max(qs.[last_used_threads])				as [max_last_used_threads]
,min(qs.[min_used_threads])				as [min_used_threads]
,max(qs.[max_used_threads])				as [max_used_threads]
from tbl_res_rec_g as t
inner join sys.dm_exec_query_stats as qs with(readuncommitted) on t.[plan_handle]=qs.[plan_handle] 
and t.[sql_handle]=qs.[sql_handle] 
and t.[start_time]=cast(qs.[last_execution_time] as date)
group by qs.[plan_handle]
,qs.[sql_handle]
--,qs.[last_execution_time]
)
select t.[session_id] --Сессия
,t.[blocking_session_id] --Сессия, которая явно блокирует сессию [session_id]
,t.[request_id] --Идентификатор запроса. Уникален в контексте сеанса
,t.[start_time] --Метка времени поступления запроса
,DateDiff(second, t.[start_time], GetDate()) as [date_diffSec] --Сколько в сек прошло времени от момента поступления запроса
,t.[status] --Состояние запроса
,t.[status_session] --Состояние сессии
,t.[command] --Тип выполняемой в данный момент команды
, COALESCE(
CAST(NULLIF(t.[total_elapsed_time] / 1000, 0) as BIGINT)
,CASE WHEN (t.[status_session] <> 'running' and isnull(t.[status], '')  <> 'running') 
THEN  DATEDIFF(ss,0,getdate() - nullif(t.[last_request_end_time], '1900-01-01T00:00:00.000'))
END
) as [total_time, sec] --Время всей работы запроса в сек
, CAST(NULLIF((CAST(t.[total_elapsed_time] as BIGINT) - CAST(t.[wait_time] AS BIGINT)) / 1000, 0 ) as bigint) as [work_time, sec] --Время работы запроса в сек без учета времени ожиданий
, CASE WHEN (t.[status_session] <> 'running' AND ISNULL(t.[status],'') <> 'running') 
THEN  DATEDIFF(ss,0,getdate() - nullif(t.[last_request_end_time], '1900-01-01T00:00:00.000'))
END as [sleep_time, sec] --Время сна в сек
, NULLIF( CAST((t.[logical_reads] + t.[writes]) * 8 / 1024 as numeric(38,2)), 0) as [IO, MB] --операций чтения и записи в МБ
, CASE  t.transaction_isolation_level
WHEN 0 THEN 'Unspecified'
WHEN 1 THEN 'ReadUncommited'
WHEN 2 THEN 'ReadCommited'
WHEN 3 THEN 'Repetable'
WHEN 4 THEN 'Serializable'
WHEN 5 THEN 'Snapshot'
END as [transaction_isolation_level_desc] --уровень изоляции транзакции (расшифровка)
,t.[percent_complete] --Процент завершения работы для следующих команд
,t.[DBName] --БД
,t.[object] --Объект
, SUBSTRING(
t.[TSQL]
, t.[statement_start_offset]/2+1
,	(
CASE WHEN ((t.[statement_start_offset]<0) OR (t.[statement_end_offset]<0))
THEN DATALENGTH (t.[TSQL])
ELSE t.[statement_end_offset]
END
- t.[statement_start_offset]
)/2 +1
) as [CURRENT_REQUEST] --Текущий выполняемый запрос в пакете
,t.[TSQL] --Запрос всего пакета
,t.[QueryPlan] --План всего пакета
,t.[wait_type] --Если запрос в настоящий момент блокирован, в столбце содержится тип ожидания (sys.dm_os_wait_stats)
,t.[login_time] --Время подключения сеанса
,t.[host_name] --Имя клиентской рабочей станции, указанное в сеансе. Для внутреннего сеанса это значение равно NULL
,t.[program_name] --Имя клиентской программы, которая инициировала сеанс. Для внутреннего сеанса это значение равно NULL
,cast(t.[wait_time]/1000 as decimal(18,3)) as [wait_timeSec] --Если запрос в настоящий момент блокирован, в столбце содержится продолжительность текущего ожидания (в секундах)
,t.[wait_time] --Если запрос в настоящий момент блокирован, в столбце содержится продолжительность текущего ожидания (в миллисекундах)
,t.[last_wait_type] --Если запрос был блокирован ранее, в столбце содержится тип последнего ожидания
,t.[wait_resource] --Если запрос в настоящий момент блокирован, в столбце указан ресурс, освобождения которого ожидает запрос
,t.[open_transaction_count] --Число транзакций, открытых для данного запроса
,t.[open_resultset_count] --Число результирующих наборов, открытых для данного запроса
,t.[transaction_id] --Идентификатор транзакции, в которой выполняется запрос
,t.[context_info] --Значение CONTEXT_INFO сеанса
,cast(t.[estimated_completion_time]/1000 as decimal(18,3)) as [estimated_completion_timeSec] --Только для внутреннего использования. Не допускает значение NULL
,t.[estimated_completion_time] --Только для внутреннего использования. Не допускает значение NULL
,cast(t.[cpu_time]/1000 as decimal(18,3)) as [cpu_timeSec] --Время ЦП (в секундах), затраченное на выполнение запроса
,t.[cpu_time] --Время ЦП (в миллисекундах), затраченное на выполнение запроса
,cast(t.[total_elapsed_time]/1000 as decimal(18,3)) as [total_elapsed_timeSec] --Общее время, истекшее с момента поступления запроса (в секундах)
,t.[total_elapsed_time] --Общее время, истекшее с момента поступления запроса (в миллисекундах)
,t.[scheduler_id] --Идентификатор планировщика, который планирует данный запрос
,t.[task_address] --Адрес блока памяти, выделенного для задачи, связанной с этим запросом
,t.[reads] --Число операций чтения, выполненных данным запросом
,t.[writes] --Число операций записи, выполненных данным запросом
,t.[logical_reads] --Число логических операций чтения, выполненных данным запросом
,t.[text_size] --Установка параметра TEXTSIZE для данного запроса
,t.[language] --Установка языка для данного запроса
,t.[date_format] --Установка параметра DATEFORMAT для данного запроса
,t.[date_first] --Установка параметра DATEFIRST для данного запроса
,t.[quoted_identifier] --1 = Параметр QUOTED_IDENTIFIER для запроса включен (ON). В противном случае — 0
,t.[arithabort] --1 = Параметр ARITHABORT для запроса включен (ON). В противном случае — 0
,t.[ansi_null_dflt_on] --1 = Параметр ANSI_NULL_DFLT_ON для запроса включен (ON). В противном случае — 0
,t.[ansi_defaults] --1 = Параметр ANSI_DEFAULTS для запроса включен (ON). В противном случае — 0
,t.[ansi_warnings] --1 = Параметр ANSI_WARNINGS для запроса включен (ON). В противном случае — 0
,t.[ansi_padding] --1 = Параметр ANSI_PADDING для запроса включен (ON)
,t.[ansi_nulls] --1 = Параметр ANSI_NULLS для запроса включен (ON). В противном случае — 0
,t.[concat_null_yields_null] --1 = Параметр CONCAT_NULL_YIELDS_NULL для запроса включен (ON). В противном случае — 0
,t.[transaction_isolation_level] --Уровень изоляции, с которым создана транзакция для данного запроса
,cast(t.[lock_timeout]/1000 as decimal(18,3)) as [lock_timeoutSec] --Время ожидания блокировки для данного запроса (в секундах)
,t.[lock_timeout] --Время ожидания блокировки для данного запроса (в миллисекундах)
,t.[deadlock_priority] --Значение параметра DEADLOCK_PRIORITY для данного запроса
,t.[row_count] --Число строк, возвращенных клиенту по данному запросу
,t.[prev_error] --Последняя ошибка, происшедшая при выполнении запроса
,t.[nest_level] --Текущий уровень вложенности кода, выполняемого для данного запроса
,t.[granted_query_memory] --Число страниц, выделенных для выполнения поступившего запроса (1 страница-это примерно 8 КБ)
,t.[executing_managed_code] --Указывает, выполняет ли данный запрос в настоящее время код объекта среды CLR (например, процедуры, типа или триггера).
--Этот флаг установлен в течение всего времени, когда объект среды CLR находится в стеке, даже когда из среды вызывается код Transact-SQL
,t.[group_id]	--Идентификатор группы рабочей нагрузки, которой принадлежит этот запрос
,t.[query_hash] --Двоичное хэш-значение рассчитывается для запроса и используется для идентификации запросов с аналогичной логикой.
--Можно использовать хэш запроса для определения использования статистических ресурсов для запросов, которые отличаются только своими литеральными значениями
,t.[query_plan_hash] --Двоичное хэш-значение рассчитывается для плана выполнения запроса и используется для идентификации аналогичных планов выполнения запросов.
--Можно использовать хэш плана запроса для нахождения совокупной стоимости запросов со схожими планами выполнения
,t.[most_recent_session_id] --Представляет собой идентификатор сеанса самого последнего запроса, связанного с данным соединением
,t.[connect_time] --Отметка времени установления соединения
,t.[net_transport] --Содержит описание физического транспортного протокола, используемого данным соединением
,t.[protocol_type] --Указывает тип протокола передачи полезных данных
,t.[protocol_version] --Версия протокола доступа к данным, связанного с данным соединением
,t.[endpoint_id] --Идентификатор, описывающий тип соединения. Этот идентификатор endpoint_id может использоваться для запросов к представлению sys.endpoints
,t.[encrypt_option] --Логическое значение, указывающее, разрешено ли шифрование для данного соединения
,t.[auth_scheme] --Указывает схему проверки подлинности (SQL Server или Windows), используемую с данным соединением
,t.[node_affinity] --Идентифицирует узел памяти, которому соответствует данное соединение
,t.[num_reads] --Число пакетов, принятых посредством данного соединения
,t.[num_writes] --Число пакетов, переданных посредством данного соединения
,t.[last_read] --Отметка времени о последнем полученном пакете данных
,t.[last_write] --Отметка времени о последнем отправленном пакете данных
,t.[net_packet_size] --Размер сетевого пакета, используемый для передачи данных
,t.[client_net_address] --Сетевой адрес удаленного клиента
,t.[client_tcp_port] --Номер порта на клиентском компьютере, который используется при осуществлении соединения
,t.[local_net_address] --IP-адрес сервера, с которым установлено данное соединение. Доступен только для соединений, которые в качестве транспорта данных используют протокол TCP
,t.[local_tcp_port] --TCP-порт сервера, если соединение использует протокол TCP
,t.[parent_connection_id] --Идентифицирует первичное соединение, используемое в сеансе MARS
,t.[most_recent_sql_handle] --Дескриптор последнего запроса SQL, выполненного с помощью данного соединения. Постоянно проводится синхронизация между столбцом most_recent_sql_handle и столбцом most_recent_session_id
,t.[host_process_id] --Идентификатор процесса клиентской программы, которая инициировала сеанс. Для внутреннего сеанса это значение равно NULL
,t.[client_version] --Версия TDS-протокола интерфейса, который используется клиентом для подключения к серверу. Для внутреннего сеанса это значение равно NULL
,t.[client_interface_name] --Имя библиотеки или драйвер, используемый клиентом для обмена данными с сервером. Для внутреннего сеанса это значение равно NULL
,t.[security_id] --Идентификатор безопасности Microsoft Windows, связанный с именем входа
,t.[login_name] --SQL Server Имя входа, под которой выполняется текущий сеанс.
--Чтобы узнать первоначальное имя входа, с помощью которого был создан сеанс, см. параметр original_login_name.
--Может быть SQL Server проверка подлинности имени входа или имени пользователя домена, прошедшего проверку подлинности Windows
,t.[nt_domain] --Домен Windows для клиента, если во время сеанса применяется проверка подлинности Windows или доверительное соединение.
--Для внутренних сеансов и пользователей, не принадлежащих к домену, это значение равно NULL
,t.[nt_user_name] --Имя пользователя Windows для клиента, если во время сеанса используется проверка подлинности Windows или доверительное соединение.
--Для внутренних сеансов и пользователей, не принадлежащих к домену, это значение равно NULL
,t.[memory_usage] --Количество 8-килобайтовых страниц памяти, используемых данным сеансом
,t.[total_scheduled_time] --Общее время, назначенное данному сеансу (включая его вложенные запросы) для исполнения, в миллисекундах
,t.[last_request_start_time] --Время, когда начался последний запрос данного сеанса. Это может быть запрос, выполняющийся в данный момент
,t.[last_request_end_time] --Время завершения последнего запроса в рамках данного сеанса
,t.[is_user_process] --0, если сеанс является системным. В противном случае значение равно 1
,t.[original_security_id] --Microsoft Идентификатор безопасности Windows, связанный с параметром original_login_name
,t.[original_login_name] --SQL Server Имя входа, которую использует клиент создал данный сеанс.
--Это может быть имя входа SQL Server, прошедшее проверку подлинности, имя пользователя домена Windows, 
--прошедшее проверку подлинности, или пользователь автономной базы данных.
--Обратите внимание, что после первоначального соединения для сеанса может быть выполнено много неявных или явных переключений контекста.
--Например если EXECUTE AS используется
,t.[last_successful_logon] --Время последнего успешного входа в систему для имени original_login_name до запуска текущего сеанса
,t.[last_unsuccessful_logon] --Время последнего неуспешного входа в систему для имени original_login_name до запуска текущего сеанса
,t.[unsuccessful_logons] --Число неуспешных попыток входа в систему для имени original_login_name между временем last_successful_logon и временем login_time
,t.[authenticating_database_id] --Идентификатор базы данных, выполняющей проверку подлинности участника.
--Для имен входа это значение будет равно 0.
--Для пользователей автономной базы данных это значение будет содержать идентификатор автономной базы данных
,t.[sql_handle] --Хэш-карта текста SQL-запроса
,t.[statement_start_offset] --Количество символов в выполняемом в настоящий момент пакете или хранимой процедуре, в которой запущена текущая инструкция.
--Может применяться вместе с функциями динамического управления sql_handle, statement_end_offset и sys.dm_exec_sql_text
--для извлечения исполняемой в настоящий момент инструкции по запросу
,t.[statement_end_offset] --Количество символов в выполняемом в настоящий момент пакете или хранимой процедуре, в которой завершилась текущая инструкция.
--Может применяться вместе с функциями динамического управления sql_handle, statement_end_offset и sys.dm_exec_sql_text
--для извлечения исполняемой в настоящий момент инструкции по запросу
,t.[plan_handle] --Хэш-карта плана выполнения SQL
,t.[database_id] --Идентификатор базы данных, к которой выполняется запрос
,t.[user_id] --Идентификатор пользователя, отправившего данный запрос
,t.[connection_id] --Идентификатор соединения, по которому поступил запрос
,t.[is_blocking_other_session] --1-сессия явно блокирует другие сессии, 0-сессия явно не блокирует другие сессии
,coalesce(t.[dop], mg.[dop]) as [dop] --Степень параллелизма запроса
,mg.[request_time] --Дата и время обращения запроса за предоставлением памяти
,mg.[grant_time] --Дата и время, когда запросу была предоставлена память. Возвращает значение NULL, если память еще не была предоставлена
,mg.[requested_memory_kb] --Общий объем запрошенной памяти в килобайтах
,mg.[granted_memory_kb] --Общий объем фактически предоставленной памяти в килобайтах.
--Может быть значение NULL, если память еще не была предоставлена.
--Обычно это значение должно быть одинаковым с requested_memory_kb.
--Для создания индекса сервер может разрешить дополнительное предоставление по требованию памяти,
--объем которой выходит за рамки изначально предоставленной памяти
,mg.[required_memory_kb] --Минимальный объем памяти в килобайтах (КБ), необходимый для выполнения данного запроса.
--Значение requested_memory_kb равно этому объему или больше его
,mg.[used_memory_kb] --Используемый в данный момент объем физической памяти (в килобайтах)
,mg.[max_used_memory_kb] --Максимальный объем используемой до данного момента физической памяти в килобайтах
,mg.[query_cost] --Ожидаемая стоимость запроса
,mg.[timeout_sec] --Время ожидания данного запроса в секундах до отказа от обращения за предоставлением памяти
,mg.[resource_semaphore_id] --Неуникальный идентификатор семафора ресурса, которого ожидает данный запрос
,mg.[queue_id] --Идентификатор ожидающей очереди, в которой данный запрос ожидает предоставления памяти.
--Значение NULL, если память уже предоставлена
,mg.[wait_order] --Последовательный порядок ожидающих запросов в указанной очереди queue_id.
--Это значение может изменяться для заданного запроса, если другие запросы отказываются от предоставления памяти или получают ее.
--Значение NULL, если память уже предоставлена
,mg.[is_next_candidate] --Является следующим кандидатом на предоставление памяти (1 = да, 0 = нет, NULL = память уже предоставлена)
,mg.[wait_time_ms] --Время ожидания в миллисекундах. Значение NULL, если память уже предоставлена
,mg.[pool_id] --Идентификатор пула ресурсов, к которому принадлежит данная группа рабочей нагрузки
,mg.[is_small] --Значение 1 означает, что для данной операции предоставления памяти используется малый семафор ресурса.
--Значение 0 означает использование обычного семафора
,mg.[ideal_memory_kb] --Объем, в килобайтах (КБ), предоставленной памяти, необходимый для размещения всех данных в физической памяти.
--Основывается на оценке количества элементов
,mg.[reserved_worker_count] --Число рабочих процессов, зарезервированной с помощью параллельных запросов, а также число основных рабочих процессов, используемых всеми запросами
,mg.[used_worker_count] --Число рабочих процессов, используемых параллельных запросов
,mg.[max_used_worker_count] --???
,mg.[reserved_node_bitmap] --???
,pl.[bucketid] --Идентификатор сегмента хэша, в который кэшируется запись.
--Значение указывает диапазон от 0 до значения размера хэш-таблицы для типа кэша.
--Для кэшей SQL Plans и Object Plans размер хэш-таблицы может достигать 10007 на 32-разрядных версиях систем и 40009 — на 64-разрядных.
--Для кэша Bound Trees размер хэш-таблицы может достигать 1009 на 32-разрядных версиях систем и 4001 на 64-разрядных.
--Для кэша расширенных хранимых процедур размер хэш-таблицы может достигать 127 на 32-разрядных и 64-разрядных версиях систем
,pl.[refcounts] --Число объектов кэша, ссылающихся на данный объект кэша.
--Значение refcounts для записи должно быть не меньше 1, чтобы размещаться в кэше
,pl.[usecounts] --Количество повторений поиска объекта кэша.
--Остается без увеличения, если параметризованные запросы обнаруживают план в кэше.
--Может быть увеличен несколько раз при использовании инструкции showplan
,pl.[size_in_bytes] --Число байтов, занимаемых объектом кэша
,pl.[memory_object_address] --Адрес памяти кэшированной записи.
--Это значение можно использовать с представлением sys.dm_os_memory_objects,
--чтобы проанализировать распределение памяти кэшированного плана, 
--и с представлением sys.dm_os_memory_cache_entries для определения затрат на кэширование записи
,pl.[cacheobjtype] --Тип объекта в кэше. Значение может быть одним из следующих
,pl.[objtype] --Тип объекта. Значение может быть одним из следующих
,pl.[parent_plan_handle] --Родительский план
--данные из sys.dm_exec_query_stats брались за сутки, в которых была пара (запрос, план)
,qs.[creation_time] --Время компиляции плана
,qs.[execution_count] --Количество выполнений плана с момента последней компиляции
,qs.[total_worker_time] --Общее время ЦП, затраченное на выполнение плана с момента компиляции, в микросекундах (но с точностью до миллисекунды)
,qs.[min_last_worker_time] --Минимальное время ЦП, затраченное на последнее выполнение плана, в микросекундах (но с точностью до миллисекунды)
,qs.[max_last_worker_time] --Максимальное время ЦП, затраченное на последнее выполнение плана, в микросекундах (но с точностью до миллисекунды)
,qs.[min_worker_time] --Минимальное время ЦП, когда-либо затраченное на выполнение плана, в микросекундах (но с точностью до миллисекунды)
,qs.[max_worker_time] --Максимальное время ЦП, когда-либо затраченное на выполнение плана, в микросекундах (но с точностью до миллисекунды)
,qs.[total_physical_reads] --Общее количество операций физического считывания при выполнении плана с момента его компиляции.
--Значение всегда равно 0 при запросе оптимизированной для памяти таблицы
,qs.[min_last_physical_reads] --Минимальное количество операций физического считывания за время последнего выполнения плана.
--Значение всегда равно 0 при запросе оптимизированной для памяти таблицы
,qs.[max_last_physical_reads] --Максимальное количество операций физического считывания за время последнего выполнения плана.
--Значение всегда равно 0 при запросе оптимизированной для памяти таблицы
,qs.[min_physical_reads] --Минимальное количество операций физического считывания за одно выполнение плана.
--Значение всегда равно 0 при запросе оптимизированной для памяти таблицы
,qs.[max_physical_reads] --Максимальное количество операций физического считывания за одно выполнение плана.
--Значение всегда равно 0 при запросе оптимизированной для памяти таблицы
,qs.[total_logical_writes] --Общее количество операций логической записи при выполнении плана с момента его компиляции.
--Значение всегда равно 0 при запросе оптимизированной для памяти таблицы
,qs.[min_last_logical_writes] --Минимальное количество страниц в буферном пуле, загрязненных во время последнего выполнения плана.
--Если страница уже является «грязной» (т. е. измененной), операции записи не учитываются.
--Значение всегда равно 0 при запросе оптимизированной для памяти таблицы
,qs.[max_last_logical_writes] --Максимальное количество страниц в буферном пуле, загрязненных во время последнего выполнения плана.
--Если страница уже является «грязной» (т. е. измененной), операции записи не учитываются.
--Значение всегда равно 0 при запросе оптимизированной для памяти таблицы
,qs.[min_logical_writes] --Минимальное количество операций логической записи за одно выполнение плана.
--Значение всегда равно 0 при запросе оптимизированной для памяти таблицы
,qs.[max_logical_writes] --Максимальное количество операций логической записи за одно выполнение плана.
--Значение всегда равно 0 при запросе оптимизированной для памяти таблицы
,qs.[total_logical_reads] --Общее количество операций логического считывания при выполнении плана с момента его компиляции.
--Значение всегда равно 0 при запросе оптимизированной для памяти таблицы
,qs.[min_last_logical_reads] --Минимальное количество операций логического считывания за время последнего выполнения плана.
--Значение всегда равно 0 при запросе оптимизированной для памяти таблицы
,qs.[max_last_logical_reads] --Максимальное количество операций логического считывания за время последнего выполнения плана.
--Значение всегда равно 0 при запросе оптимизированной для памяти таблицы
,qs.[min_logical_reads]	   --Минимальное количество операций логического считывания за одно выполнение плана.
--Значение всегда равно 0 при запросе оптимизированной для памяти таблицы
,qs.[max_logical_reads]	--Максимальное количество операций логического считывания за одно выполнение плана.
--Значение всегда равно 0 при запросе оптимизированной для памяти таблицы
,qs.[total_clr_time]	--Время, в микросекундах (но с точностью до миллисекунды),
--внутри Microsoft .NET Framework общеязыковая среда выполнения (CLR) объекты при выполнении плана с момента его компиляции.
--Объекты среды CLR могут быть хранимыми процедурами, функциями, триггерами, типами и статистическими выражениями
,qs.[min_last_clr_time] --Минимальное время, в микросекундах (но с точностью до миллисекунды),
--затраченное внутри .NET Framework объекты среды CLR во время последнего выполнения плана.
--Объекты среды CLR могут быть хранимыми процедурами, функциями, триггерами, типами и статистическими выражениями
,qs.[max_last_clr_time] --Максимальное время, в микросекундах (но с точностью до миллисекунды),
--затраченное внутри .NET Framework объекты среды CLR во время последнего выполнения плана.
--Объекты среды CLR могут быть хранимыми процедурами, функциями, триггерами, типами и статистическими выражениями
,qs.[min_clr_time] --Минимальное время, когда-либо затраченное на выполнение плана внутри объектов .NET Framework среды CLR,
--в микросекундах (но с точностью до миллисекунды).
--Объекты среды CLR могут быть хранимыми процедурами, функциями, триггерами, типами и статистическими выражениями
,qs.[max_clr_time] --Максимальное время, когда-либо затраченное на выполнение плана внутри среды CLR .NET Framework,
--в микросекундах (но с точностью до миллисекунды).
--Объекты среды CLR могут быть хранимыми процедурами, функциями, триггерами, типами и статистическими выражениями
--,qs.[total_elapsed_time] --Общее время, затраченное на выполнение плана, в микросекундах (но с точностью до миллисекунды)
,qs.[min_last_elapsed_time] --Минимальное время, затраченное на последнее выполнение плана, в микросекундах (но с точностью до миллисекунды)
,qs.[max_last_elapsed_time] --Максимальное время, затраченное на последнее выполнение плана, в микросекундах (но с точностью до миллисекунды)
,qs.[min_elapsed_time] --Минимальное время, когда-либо затраченное на выполнение плана, в микросекундах (но с точностью до миллисекунды)
,qs.[max_elapsed_time] --Максимальное время, когда-либо затраченное на выполнение плана, в микросекундах (но с точностью до миллисекунды)
,qs.[total_rows] --Общее число строк, возвращаемых запросом. Не может иметь значение null.
--Значение всегда равно 0, если скомпилированная в собственном коде хранимая процедура запрашивает оптимизированную для памяти таблицу
,qs.[min_last_rows] --Минимальное число строк, возвращенных последним выполнением запроса. Не может иметь значение null.
--Значение всегда равно 0, если скомпилированная в собственном коде хранимая процедура запрашивает оптимизированную для памяти таблицу
,qs.[max_last_rows] --Максимальное число строк, возвращенных последним выполнением запроса. Не может иметь значение null.
--Значение всегда равно 0, если скомпилированная в собственном коде хранимая процедура запрашивает оптимизированную для памяти таблицу
,qs.[min_rows] --Минимальное количество строк, когда-либо возвращенных по запросу во время выполнения один
--Значение всегда равно 0, если скомпилированная в собственном коде хранимая процедура запрашивает оптимизированную для памяти таблицу
,qs.[max_rows] --Максимальное число строк, когда-либо возвращенных по запросу во время выполнения один
--Значение всегда равно 0, если скомпилированная в собственном коде хранимая процедура запрашивает оптимизированную для памяти таблицу
,qs.[total_dop] --Общую сумму по степени параллелизма плана используется с момента его компиляции.
--Он всегда будет равно 0 для запроса к таблице, оптимизированной для памяти
,qs.[min_last_dop] --Минимальная степень параллелизма, если время последнего выполнения плана.
--Он всегда будет равно 0 для запроса к таблице, оптимизированной для памяти
,qs.[max_last_dop] --Максимальная степень параллелизма, если время последнего выполнения плана.
--Он всегда будет равно 0 для запроса к таблице, оптимизированной для памяти
,qs.[min_dop] --Минимальная степень параллелизма этот план когда-либо используется во время одного выполнения.
--Он всегда будет равно 0 для запроса к таблице, оптимизированной для памяти
,qs.[max_dop] --Максимальная степень параллелизма этот план когда-либо используется во время одного выполнения.
--Он всегда будет равно 0 для запроса к таблице, оптимизированной для памяти
,qs.[total_grant_kb] --Общий объем зарезервированной памяти в КБ предоставить этот план, полученных с момента его компиляции.
--Он всегда будет равно 0 для запроса к таблице, оптимизированной для памяти
,qs.[min_last_grant_kb] --Минимальный объем зарезервированной памяти предоставляет в КБ, когда время последнего выполнения плана.
--Он всегда будет равно 0 для запроса к таблице, оптимизированной для памяти
,qs.[max_last_grant_kb] --Максимальный объем зарезервированной памяти предоставляет в КБ, когда время последнего выполнения плана.
--Он всегда будет равно 0 для запроса к таблице, оптимизированной для памяти
,qs.[min_grant_kb] --Минимальный объем зарезервированной памяти в КБ предоставить никогда не получено в ходе одного выполнения плана.
--Он всегда будет равно 0 для запроса к таблице, оптимизированной для памяти
,qs.[max_grant_kb] --Максимальный объем зарезервированной памяти в КБ предоставить никогда не получено в ходе одного выполнения плана.
--Он всегда будет равно 0 для запроса к таблице, оптимизированной для памяти
,qs.[total_used_grant_kb] --Общий объем зарезервированной памяти в КБ предоставить этот план, используемый с момента его компиляции.
--Он всегда будет равно 0 для запроса к таблице, оптимизированной для памяти
,qs.[min_last_used_grant_kb] --Минимальная сумма предоставления используемой памяти в КБ, если время последнего выполнения плана.
--Он всегда будет равно 0 для запроса к таблице, оптимизированной для памяти
,qs.[max_last_used_grant_kb] --Максимальная сумма предоставления используемой памяти в КБ, если время последнего выполнения плана.
--Он всегда будет равно 0 для запроса к таблице, оптимизированной для памяти
,qs.[min_used_grant_kb] --Минимальный объем используемой памяти в КБ предоставить никогда не используется при выполнении одного плана.
--Он всегда будет равно 0 для запроса к таблице, оптимизированной для памяти
,qs.[max_used_grant_kb] --Максимальный объем используемой памяти в КБ предоставить никогда не используется при выполнении одного плана.
--Он всегда будет равно 0 для запроса к таблице, оптимизированной для памяти
,qs.[total_ideal_grant_kb] --Общий объем идеальный память в КБ, оценка плана с момента его компиляции.
--Он всегда будет равно 0 для запроса к таблице, оптимизированной для памяти
,qs.[min_last_ideal_grant_kb] --Минимальный объем памяти, идеальным предоставляет в КБ, когда время последнего выполнения плана.
--Он всегда будет равно 0 для запроса к таблице, оптимизированной для памяти
,qs.[max_last_ideal_grant_kb] --Максимальный объем памяти, идеальным предоставляет в КБ, когда время последнего выполнения плана.
--Он всегда будет равно 0 для запроса к таблице, оптимизированной для памяти
,qs.[min_ideal_grant_kb] --Минимальный объем памяти идеальный предоставления в этот план когда-либо оценка во время выполнения один КБ.
--Он всегда будет равно 0 для запроса к таблице, оптимизированной для памяти
,qs.[max_ideal_grant_kb] --Максимальный объем памяти идеальный предоставления в этот план когда-либо оценка во время выполнения один КБ.
--Он всегда будет равно 0 для запроса к таблице, оптимизированной для памяти
,qs.[total_reserved_threads] --Общая сумма по зарезервированным параллельного потоков этот план когда-либо использовавшегося с момента его компиляции.
--Он всегда будет равно 0 для запроса к таблице, оптимизированной для памяти
,qs.[min_last_reserved_threads] --Минимальное число зарезервированных параллельных потоков, когда время последнего выполнения плана.
--Он всегда будет равно 0 для запроса к таблице, оптимизированной для памяти
,qs.[max_last_reserved_threads] --Максимальное число зарезервированных параллельных потоков, когда время последнего выполнения плана.
--Он всегда будет равно 0 для запроса к таблице, оптимизированной для памяти
,qs.[min_reserved_threads] --Минимальное число зарезервированных параллельного потоков, когда-либо использовать при выполнении одного плана.
--Он всегда будет равно 0 для запроса к таблице, оптимизированной для памяти
,qs.[max_reserved_threads] --Максимальное число зарезервированных параллельного потоков никогда не используется при выполнении одного плана.
--Он всегда будет равно 0 для запроса к таблице, оптимизированной для памяти
,qs.[total_used_threads] --Общая сумма используется параллельных потоков этот план когда-либо использовавшегося с момента его компиляции.
--Он всегда будет равно 0 для запроса к таблице, оптимизированной для памяти
,qs.[min_last_used_threads] --Минимальное число используемых параллельных потоков, когда время последнего выполнения плана.
--Он всегда будет равно 0 для запроса к таблице, оптимизированной для памяти
,qs.[max_last_used_threads] --Максимальное число используемых параллельных потоков, когда время последнего выполнения плана.
--Он всегда будет равно 0 для запроса к таблице, оптимизированной для памяти
,qs.[min_used_threads] --Минимальное число используемых параллельных потоков, при выполнении одного плана использовали.
--Он всегда будет равно 0 для запроса к таблице, оптимизированной для памяти
,qs.[max_used_threads] --Максимальное число используемых параллельных потоков, при выполнении одного плана использовали.
--Он всегда будет равно 0 для запроса к таблице, оптимизированной для памяти
from tbl_res_rec as t
left outer join sys.dm_exec_query_memory_grants as mg on t.[plan_handle]=mg.[plan_handle] and t.[sql_handle]=mg.[sql_handle]
left outer join sys.dm_exec_cached_plans as pl on t.[plan_handle]=pl.[plan_handle]
left outer join tbl_rec_stat_g as qs on t.[plan_handle]=qs.[plan_handle] and t.[sql_handle]=qs.[sql_handle] --and qs.[last_execution_time]=cast(t.[start_time] as date);

Ka m chetakwa gị na dịka ọnụ ọgụgụ ndị anakọtara si dị, ị nwere ike nweta ajụjụ ndị siri ike:
Usoro

/*
creation_time - Время, когда запрос был скомпилирован. Поскольку при старте сервера кэш пустой, данное время всегда больше либо равно моменту запуска сервиса. Если время, указанное в этом столбце позже, чем предполагаемое (первое использование процедуры), это говорит о том, что запрос по тем или иным причинам был рекомпилирован.
last_execution_time - Момент фактического последнего выполнения запроса.
execution_count - Сколько раз запрос был выполнен с момента компиляции
Количество выполнений позволяет найти ошибки в алгоритмах - часто в наиболее выполняемых запросах оказываются те, которые находятся внутри каких-либо циклов однако могут быть выполнены перед самим циклом один раз. Например, получение каких-либо параметров из базы данных, не меняющихся внутри цикла.
CPU - Суммарное время использования процессора в миллисекундах. Если запрос обрабатывается параллельно, то это время может превысить общее время выполнения запроса, поскольку суммируется время использования запроса каждым ядром. Во время использования процессора включается только фактическая нагрузка на ядра, в нее не входят ожидания каких-либо ресурсов.
Очевидно, что данный показатель позволяет выявлять запросы, наиболее сильно загружающие процессор.
AvgCPUTime - Средняя загрузка процессора на один запрос. 
TotDuration - Общее время выполнения запроса, в миллисекундах.
Данный параметр может быть использован для поиска тех запросов, которые, независимо от причины выполняются "наиболее долго". Если общее время выполнения запроса существенно ниже времени CPU (с поправкой на параллелизм) - это говорит о том, что при выполнения запроса были ожидания каких-либо ресурсов. В большинстве случаев это связано с дисковой активностью или блокировками, но также это может быть сетевой интерфейс или другой ресурс. 
Полный список типов ожиданий можно посмотреть в описании представления sys.dm_os_wait_stats.
AvgDur - Среднее время выполнения запроса в миллисекундах.
Reads - Общее количество чтений.
Это пожалуй лучший агрегатный показатель, позволяющий выявить наиболее нагружающие сервер запросы.
Логическое чтение - это разовое обращение к странице данных, физические чтения не учитываются.
В рамках выполнения одного запроса, могут происходить неоднократные обращения к одной и той же странице.
Чем больше обращений к страницам, тем больше требуется дисковых чтений, памяти и, если речь идет о повторных обращениях, большее время требуется удерживать страницы в памяти.
Writes - Общее количество изменений страниц данных.
Характеризует то, как запрос "нагружает" дисковую систему операциями записи.
Следует помнить, что этот показатель может быть больше 0 не только у тех запросов, которые явно меняют данные, но также и у тех, которые сохраняют промежуточные данные в tempdb.
AggIO - Общее количество логических операций ввода-вывода (суммарно)
Как правило, количество логических чтений на порядки превышает количество операций записи, поэтому этот показатель сам по себе для анализа применим в редких случаях.
AvgIO - Среднее количество логических дисковых операций на одно выполнение запроса.
Значение данного показателя можно анализировать из следующих соображений:
Одна страница данных - это 8192 байта. Можно получить среднее количество байт данных, "обрабатываемых" данным запросом. Если этот объем превышает реальное количество данных, которые обрабатывает запрос (суммарный объем данных в используемых в запросе таблицах), это говорит о том, что был выбран заведомо плохой план выполнения и требуется заняться оптимизацией данного запроса.
Я встречал случай, когда один запрос делал количество обращений, эквивалентных объему в 5Тб, при этом общий объем данных в это БД был 300Гб, а объем данных в таблицах, задействованных в запросе не превышал 10Гб.
В общем можно описать одну причину такого поведения сервера - вместо использования индекса сервер предпочитает сканировать таблицу или наоборот.
Если объем логических чтений в разы превосходит общие объем данных, то это вызвано повторным обращениям к одним и тем же страницам данных. Помимо того, что в одном запросе таблица может быть использована несколько раз, к одним и тем же страницам сервер обращается например в случаях, когда используется индекс и по результатам поиска по нему, найденные некоторые строки данных лежат на одной и той же странице. Конечно, в таком случае предпочтительным могло бы быть сканирование таблицы - в этом случае сервер обращался бы к каждой странице данных только один раз. Однако этому часто мешают... попытки оптимизации запросов, когда разработчик явно указывает, какой индекс или тип соединения должен быть использован.
Обратный случай - вместо использования индекса было выбрано сканирование таблицы. Как правило, это связано с тем, что статистика устарела и требуется её обновление. Однако и в этом случае причиной неудачно выбранного плана вполне могут оказаться подсказки оптимизатору запросов.
query_text - Текст самого запроса
database_name - Имя базы данных, в находится объект, содержащий запрос. NULL для системных процедур
object_name - Имя объекта (процедуры или функции), содержащего запрос.
*/
with s as (
select  creation_time,
last_execution_time,
execution_count,
total_worker_time/1000 as CPU,
convert(money, (total_worker_time))/(execution_count*1000)as [AvgCPUTime],
qs.total_elapsed_time/1000 as TotDuration,
convert(money, (qs.total_elapsed_time))/(execution_count*1000)as [AvgDur],
total_logical_reads as [Reads],
total_logical_writes as [Writes],
total_logical_reads+total_logical_writes as [AggIO],
convert(money, (total_logical_reads+total_logical_writes)/(execution_count + 0.0))as [AvgIO],
[sql_handle],
plan_handle,
statement_start_offset,
statement_end_offset
from sys.dm_exec_query_stats as qs with(readuncommitted)
where convert(money, (qs.total_elapsed_time))/(execution_count*1000)>=100 --выполнялся запрос не менее 100 мс
)
select
s.creation_time,
s.last_execution_time,
s.execution_count,
s.CPU,
s.[AvgCPUTime],
s.TotDuration,
s.[AvgDur],
s.[Reads],
s.[Writes],
s.[AggIO],
s.[AvgIO],
--st.text as query_text,
case 
when sql_handle IS NULL then ' '
else(substring(st.text,(s.statement_start_offset+2)/2,(
case
when s.statement_end_offset =-1 then len(convert(nvarchar(MAX),st.text))*2      
else s.statement_end_offset    
end - s.statement_start_offset)/2  ))
end as query_text,
db_name(st.dbid) as database_name,
object_schema_name(st.objectid, st.dbid)+'.'+object_name(st.objectid, st.dbid) as [object_name],
sp.[query_plan],
s.[sql_handle],
s.plan_handle
from s
cross apply sys.dm_exec_sql_text(s.[sql_handle]) as st
cross apply sys.dm_exec_query_plan(s.[plan_handle]) as sp

Ị nwekwara ike ide maka MySQL. Iji mee nke a, ịkwesịrị ịwụnye mysql-njikọ-net wee dee koodu dị ka nke a:
Koodu maka arịrịọ na-echere

#Задаем переменные для подключение к MySQL и само подключение
[string]$sMySQLUserName = 'UserName'
[string]$sMySQLPW = 'UserPassword'
[string]$sMySQLDB = 'db'
[string]$sMySQLHost = 'IP-address'
[void][System.Reflection.Assembly]::LoadWithPartialName("MySql.Data");
[string]$sConnectionString = "server="+$sMySQLHost+";port=3306;uid=" + $sMySQLUserName + ";pwd="+"'" + $sMySQLPW +"'"+ ";database="+$sMySQLDB;
#Open a Database connection
$oConnection = New-Object MySql.Data.MySqlClient.MySqlConnection($sConnectionString)
$Error.Clear()
try
{
$oConnection.Open()
}
catch
{
write-warning ("Could not open a connection to Database $sMySQLDB on Host $sMySQLHost. Error: "+$Error[0].ToString())
}
#The first query
# Get an instance of all objects need for a SELECT query. The Command object
$oMYSQLCommand = New-Object MySql.Data.MySqlClient.MySqlCommand;
# DataAdapter Object
$oMYSQLDataAdapter = New-Object MySql.Data.MySqlClient.MySqlDataAdapter;
# And the DataSet Object
$oMYSQLDataSet = New-Object System.Data.DataSet;
# Assign the established MySQL connection
$oMYSQLCommand.Connection=$oConnection;
# Define a SELECT query
$oMYSQLCommand.CommandText='query';
$oMYSQLDataAdapter.SelectCommand=$oMYSQLCommand;
# Execute the query
$count=$oMYSQLDataAdapter.Fill($oMYSQLDataSet, "data");
$result = $oMYSQLDataSet.Tables[0].Rows[0]["Count"];
write-host $result;

N'ihi

Edemede a lere anya n'atụmatụ nke counter arụmọrụ (ihe data) na Zabbix. Ụzọ a na-enye ohere ka ndị nchịkwa mara banyere nsogbu dị iche iche ozugbo ma ọ bụ mgbe oge ụfọdụ gasịrị. Ya mere, ụzọ a na-enye anyị ohere ibelata ihe omume nke nsogbu dị oke egwu n'ọdịnihu ma kwụsị ọrụ DBMS na ihe nkesa, nke na-echebe mmepụta site na nkwụsị ọrụ.
Isiokwu gara aga: Arụ ọrụ oge niile na nchekwa data sistemụ 24 × 7 na MS SQL Server

Isi mmalite:

» Zabbix 3.4
» Ọnụ ahịa arụmọrụ
» Ebe arụmọrụ maka Azure SQL Database na SQL Server Database Engine
» Ụdị ndụ SQL
» Nkà SQLS
» TechNet Microsoft
» Na-enyocha ojiji ebe nchekwa
» Nyocha arụmọrụ
» Akwụkwọ SQL
» Ihe ndetu gbasara Windows

isi: www.habr.com

Tinye a comment