Lilo Zabbix lati Atẹle aaye data olupin MS SQL

Ọrọ iṣaaju

Nigbagbogbo iwulo wa lati jabo si alakoso ni akoko gidi nipa awọn iṣoro ti o jọmọ ibi ipamọ data (database).

Nkan yii yoo ṣe apejuwe ohun ti o nilo lati tunto ni Zabbix lati ṣe atẹle aaye data MS SQL Server kan.

Jọwọ ṣe akiyesi pe awọn alaye lori bi o ṣe le tunto kii yoo fun, sibẹsibẹ, awọn agbekalẹ ati awọn iṣeduro gbogbogbo, bakannaa alaye alaye ti fifi awọn eroja data aṣa kun nipasẹ awọn ilana ti o fipamọ ni yoo fun ni nkan yii.
Pẹlupẹlu, awọn iṣiro iṣẹ akọkọ nikan ni yoo jiroro nibi.

Ipinnu

Ni akọkọ, Emi yoo ṣe apejuwe gbogbo awọn iṣiro iṣẹ ṣiṣe (nipasẹ awọn eroja data ni Zabbix) ti a nilo:

  1. Disiki mogbonwa
    1. Apapọ Disiki iṣẹju-aaya/Ka
      Ṣe afihan akoko apapọ, ti a fihan ni iṣẹju-aaya, fun kika data lati disiki naa. Apapọ iṣiro iṣẹ ṣiṣe aropin. Disk iṣẹju-aaya/Ka ko yẹ ki o kọja 10 milliseconds. Iye to pọju ti counter išẹ Avg. Disk iṣẹju-aaya/Ka ko yẹ ki o kọja 50 milliseconds.

      Zabbix: perf_counter [LogicalDisk (_Total) Apapọ. Disk iṣẹju-aaya/Ka], ati pe o tun ṣe pataki lati tọju abala disk ti o fẹ, fun apẹẹrẹ bii eyi: perf_counter [LogicalDisk (C :) Avg. Disk iṣẹju-aaya/Ka]

      Awọn apẹẹrẹ okunfa:
      {NODE_NAME:perf_counter[LogicalDisk(_Total)Apapọ. Disk iṣẹju-aaya/Ka] kẹhin ()}>0.005, ipele-giga
      и
      {NODE_NAME:perf_counter[LogicalDisk(_Total)Apapọ. Disk iṣẹju-aaya/Ka].kẹhin ()}>0.0025, ipele-alabọde

    2. Apapọ Disiki iṣẹju-aaya/Kọ
      Ṣe afihan akoko apapọ, ti a fihan ni iṣẹju-aaya, fun kikọ data si disk. Apapọ iṣiro iṣẹ ṣiṣe aropin. Disk iṣẹju-aaya/Kọ ko yẹ ki o kọja 10 milliseconds. Iye ti o pọju ti counter iṣẹ Avg. Disk iṣẹju-aaya/Kọ ko yẹ ki o kọja 50 milliseconds.

      Zabbix: perf_counter [LogicalDisk (_Total) Apapọ. Disk iṣẹju-aaya / Kọ], ati pe o tun ṣe pataki lati tọju abala disk ti o fẹ, fun apẹẹrẹ bii eyi: perf_counter [LogicalDisk (C :) Avg. Disk iṣẹju-aaya/Kọ]

      Awọn apẹẹrẹ okunfa:
      {NODE_NAME:perf_counter[LogicalDisk(_Total)Apapọ. Disk iṣẹju-aaya/Kọ].kẹhin ()}>0.005, ipele-giga
      и
      {NODE_NAME:perf_counter[LogicalDisk(_Total)Apapọ. Disk iṣẹju-aaya/Kọ].kẹhin ()}>0.0025, ipele-alabọde

    3. Apapọ Disk isinyi Gigun

      Apapọ isinyi ipari ti awọn ibeere si disk. Ṣe afihan nọmba awọn ibeere disiki ni isunmọtosi sisẹ laarin aarin akoko kan pato. A ti isinyi ti ko si siwaju sii ju 2 fun nikan disk ti wa ni ka deede. Ti o ba ju awọn ibeere meji lọ ni isinyi, disiki naa le jẹ apọju ko le ṣe ilana awọn ibeere ti nwọle. O le wa iru awọn iṣẹ ṣiṣe ti disiki ko le mu ni lilo awọn iṣiro Avg. Disk Read Queue Gigun ati Avg. Disk Wright Queue Gigun (isinyi ti awọn ibeere kikọ).
      Iwọn aropin Ipari Disk Queue ko ṣe iwọn, ṣugbọn ṣe iṣiro lilo ofin Little lati imọ-ẹrọ mathematiki ti isinyi. Gẹgẹbi ofin yii, nọmba awọn ibeere ti nduro lati ṣiṣẹ ni, ni apapọ, dogba si igbohunsafẹfẹ ti awọn ibeere ti o pọ si nipasẹ akoko ṣiṣe ibeere. Awon. ninu ọran tiwa Avg. Ipari isinyi Disk = (Awọn Gbigbe Disiki/aaya) * (Avg. Disk sec/Gbigbe lọ sibi).

      Apapọ Disk Queue Gigun ni a fun ni bi ọkan ninu awọn iṣiro akọkọ fun ṣiṣe ipinnu fifuye lori eto inu disiki, sibẹsibẹ, lati ṣe iṣiro rẹ ni deede, o jẹ dandan lati ṣe aṣoju deede eto ti ara ti eto ipamọ. Fun apẹẹrẹ, fun dirafu lile kan iye ti o tobi ju 2 ni a ka pe o ṣe pataki, ati pe ti disiki naa wa lori ọna RAID ti awọn disiki 4, lẹhinna o yẹ ki o ṣe aibalẹ ti iye naa ba tobi ju 4 * 2 = 8.

      Zabbix: perf_counter [LogicalDisk (_Total) Apapọ. Disk Queue Length], ati pe o tun ṣe pataki lati tọju abala disk ti o fẹ, fun apẹẹrẹ bii eyi: perf_counter [LogicalDisk (C :) Avg. Iwọn isinyi Disk]

  2. Memory
    1. Awọn oju-iwe / iṣẹju-aaya
      Ṣe afihan nọmba awọn oju-iwe ti SQL Server ka lati disiki tabi kowe si disk lati yanju awọn iraye si awọn oju-iwe iranti ti a ko kojọpọ sinu Ramu ni akoko iwọle. Iye yii jẹ akopọ ti Awọn oju-iwe Input/aaya ati Ijade Awọn oju-iwe / iṣẹju-aaya, ati tun ṣe akiyesi paging (paging/swaping) ti kaṣe eto fun iwọle si awọn faili data ohun elo. Ni afikun, eyi pẹlu paging ti awọn faili ti kii ṣe cache ti o ya aworan taara sinu iranti. Eyi ni counter akọkọ ti o yẹ ki o ṣe abojuto ti o ba ni iriri lilo iranti giga ati paging ti o ni nkan ṣe. Kọngi yii ṣe afihan iye swapping ati deede (kii ṣe tente oke) iye yẹ ki o sunmọ odo. Ilọsoke ninu swapping tọkasi iwulo lati mu Ramu pọ si tabi dinku nọmba awọn eto ohun elo ti n ṣiṣẹ lori olupin naa.

      Zabbix: perf_counter[MemoryPages/iseju] Apeere okunfa:
      {NODE_NAME:perf_counter[MemoryPages/sec].min(5m)}>1000, alaye ipele

    2. Awọn aṣiṣe oju-iwe / iṣẹju-aaya

      Eyi ni iye counter aṣiṣe oju-iwe naa. Aṣiṣe oju-iwe kan waye nigbati ilana kan tọka oju-iwe iranti foju ti ko si ninu eto iṣẹ ti Ramu. counter yii ṣe akiyesi awọn aṣiṣe oju-iwe mejeeji ti o nilo iraye si disk, ati awọn ti o fa nipasẹ oju-iwe ti o wa ni ita ti ṣeto iṣẹ ni Ramu. Pupọ awọn ilana le mu awọn aṣiṣe oju-iwe Iru 2 mu laisi idaduro pupọ. Sibẹsibẹ, mimu iru awọn aṣiṣe oju-iwe 1 ti o nilo iraye si disk le fa awọn idaduro pataki.

      Zabbix: perf_counter[MemoryPage Faults/sec] Apeere okunfa:
      {NODE_NAME:perf_counter[MemoryPage Faults/sec].min(5m)}>1000, alaye ipele

    3. Baiti to wa

      Ṣe itọju iye iranti ti o wa ninu awọn baiti fun ọpọlọpọ awọn ilana lati ṣiṣẹ. Awọn kika kekere tọkasi iranti kekere. Ojutu ni lati mu iranti sii. Mita yii yẹ ki o wa ni ọpọlọpọ igba nigbagbogbo ju 5000 kV.
      O jẹ oye lati ṣeto iloro fun Mbytes Wa pẹlu ọwọ fun awọn idi wọnyi:

      • 50% iranti ofe wa = O tayọ
      •25% iranti to wa = Nilo akiyesi
      • 10% ofe = Awọn iṣoro to ṣeeṣe
      Kere ju 5% iranti ti o wa = Pataki fun iyara, o nilo lati laja.
      Zabbix: perf_counter[MemoryAvailable Bytes]

  3. isise (Lapapọ):% isise Time
    Kọnkiti yii n ṣe afihan ipin ogorun akoko ti ero isise naa n ṣiṣẹ lọwọ lati ṣiṣẹ awọn iṣẹ ṣiṣe fun awọn okun ti ko ṣiṣẹ. Iye yii le ṣe akiyesi bi ipin akoko ti a lo lati ṣe iṣẹ ti o wulo. A le fi ero isise kọọkan si okun ti ko ṣiṣẹ, eyiti o nlo awọn iyipo ero isise ti ko ni iṣelọpọ ti ko lo nipasẹ awọn okun miiran. Yi counter ti wa ni characterized nipasẹ kukuru ga ju ti o le de ọdọ 100 ogorun. Bibẹẹkọ, ti awọn akoko ti o gbooro ba wa nibiti iṣamulo ero isise wa loke 80 ogorun, lẹhinna eto naa yoo munadoko diẹ sii nipa lilo awọn ilana diẹ sii.

    Zabbix: perf_counter[Processor(_Total)% Processor Time], nibi o tun le ṣe afihan nipasẹ mojuto
    Apeere okunfa:
    {NODE_NAME:perf_counter[Oluṣakoso(_Total)% Akoko isise].min(5m)}>80, alaye ipele

  4. Ni wiwo Nẹtiwọọki (*): % Lapapọ Awọn baiti / iṣẹju-aaya
    Lapapọ nọmba ti awọn baiti rán ati ki o gba fun keji kọja gbogbo awọn atọkun. Eyi ni bandiwidi wiwo (ni awọn baiti). O jẹ dandan lati ṣe afiwe iye ti counter yii pẹlu bandiwidi ti o pọju ti kaadi nẹtiwọki. Ni gbogbogbo, counter yii ko yẹ ki o ṣafihan diẹ sii ju 50% lilo bandiwidi oluyipada nẹtiwọki.
    Zabbix: perf_counter[Nẹtiwọki Interface(*)Bytes Ti firanṣẹ/iṣẹju-aaya]
  5. MS SQL Server: Awọn ọna Wiwọle
    Ohunkan Awọn ọna Wiwọle ni SQL Server n pese awọn onka lati ṣe iranlọwọ orin iraye si data ọgbọn laarin aaye data kan. Wiwọle ti ara si awọn oju-iwe data lori disiki jẹ iṣakoso ni lilo awọn iṣiro oluṣakoso ifipamọ. Mimojuto awọn ọna wiwọle data ninu ibi ipamọ data ṣe iranlọwọ lati pinnu boya iṣẹ ṣiṣe ibeere le ni ilọsiwaju nipasẹ fifi kun tabi yiyipada awọn atọka, fifi kun tabi gbigbe awọn ipin, fifi awọn faili kun tabi awọn ẹgbẹ ti awọn faili, awọn atọka defragmenting, tabi yiyipada ọrọ ibeere. Ni afikun, o le lo awọn iṣiro ohun elo Awọn ọna Wiwọle lati ṣe atẹle iwọn data, awọn atọka, ati aaye ọfẹ ninu data data rẹ, agbara ibojuwo ati pipin fun apẹẹrẹ olupin kọọkan. Pipin atọka ti o pọju le dinku iṣẹ ṣiṣe ni pataki.

    1. Oju-iwe Splits/aaya
      Nọmba awọn pipin oju-iwe fun iṣẹju-aaya ti a ṣe bi abajade ti ṣiṣan oju-iwe atọka. Iye giga fun metiriki yii tumọ si pe nigbati o ba n fi sii ati awọn iṣẹ imudojuiwọn lori data, SQL Server gbọdọ ṣe nọmba nla ti awọn iṣẹ aladanla orisun lati pin awọn oju-iwe ati gbe apakan ti oju-iwe ti o wa tẹlẹ si ipo tuntun. Iru awọn iṣẹ ṣiṣe yẹ ki o yago fun nigbakugba ti o ṣeeṣe. O le gbiyanju lati yanju iṣoro naa ni awọn ọna meji:
      - ṣẹda atọka akojọpọ kan fun awọn ọwọn ti n pọ si ni adaṣe. Ni ọran yii, awọn igbasilẹ tuntun kii yoo gbe inu awọn oju-iwe ti o ti gba tẹlẹ nipasẹ data, ṣugbọn yoo gba awọn oju-iwe tuntun ni atẹlera;
      - tun awọn atọka kọ nipa jijẹ iye ti paramita Fillfactor. Aṣayan yii ngbanilaaye lati ṣafipamọ aaye ọfẹ ni awọn oju-iwe atọka ti yoo ṣee lo lati gba data tuntun, laisi iwulo fun awọn iṣẹ pipin oju-iwe.
      Zabbix: perf_counter["MSSQL$INSTANCE_NAME:Wiwọle Awọn ọna Wiwọle Oju-iwe Pipin/aaya",30] Apeere okunfa: {NODE_NAME:perf_counter["MSSQL$INSTANCE_NAME: Awọn ọna Wọle si Oju-iwe Pipin/aaya",30]kẹhin()}>{NODE_NAME:perf_counter["MSSQL$INSTANCE_NAME:SQL StatisticsBatch Requests/sec",30]k()} / 5, ipele-alaye
    2. Awọn ọlọjẹ ni kikun / iṣẹju-aaya
      Nọmba ailopin ti awọn iwoye kikun fun iṣẹju-aaya. Awọn iṣẹ wọnyi pẹlu awọn ọlọjẹ tabili akọkọ ati awọn ọlọjẹ atọka kikun. Ilọsiwaju iduroṣinṣin ninu atọka yii le tọka ibajẹ eto (aini awọn atọka pataki, ipin wọn ti o lagbara, ikuna ti olupilẹṣẹ lati lo awọn atọka ti o wa tẹlẹ, niwaju awọn atọka ti ko lo). Sibẹsibẹ, o tọ lati ṣe akiyesi pe ọlọjẹ kikun ni awọn tabili kekere kii ṣe buburu nigbagbogbo, nitori ti o ba le gbe gbogbo tabili ni Ramu, lẹhinna ọlọjẹ kikun yoo yarayara. Ṣugbọn ni ọpọlọpọ awọn ọran, ilosoke iduroṣinṣin ninu counter yii yoo tọka ibajẹ ti eto naa. Gbogbo eyi wulo fun awọn eto OLTP nikan. Ninu awọn eto OLAP, awọn ọlọjẹ kikun igbagbogbo jẹ deede.
      Zabbix: perf_counter["MSSQL$INSTANCE_NAME:Wiwọle Awọn ọna Iwoye Kikun Ayẹwo/aaya",30]

  6. MS SQL Server: Buffer Manager
    Ohun Oluṣakoso Buffer n pese awọn iṣiro ti o ṣe iranlọwọ fun ọ lati ṣe atẹle bi SQL Server ṣe nlo awọn orisun wọnyi:
    - iranti fun titoju awọn oju-iwe data;
    - awọn iṣiro ti o ṣe atẹle I / O ti ara bi SQL Server ti n ka ati kọ awọn oju-iwe data;
    - Imugboroosi adagun adagun lati faagun kaṣe ifipamọ nipa lilo iranti iyara ti kii ṣe iyipada, gẹgẹbi awọn awakọ ipinlẹ to lagbara (SSD);
    - Abojuto iranti ati awọn iṣiro lilo nipasẹ SQL Server ṣe iranlọwọ lati gba alaye atẹle;
    - boya awọn igo wa ti o ṣẹlẹ nipasẹ aini iranti ti ara. Ti data ti o wọle nigbagbogbo ko le wa ni ipamọ sinu kaṣe, SQL Server ti fi agbara mu lati ka lati disk;
    Ṣe o ṣee ṣe lati mu iṣẹ ṣiṣe ibeere pọ si nipa jijẹ iye iranti tabi pipin iranti afikun si data kaṣe tabi tọju awọn ẹya inu olupin SQL?
    - igba melo ni SQL Server ka data lati disk. Akawe si awọn iṣẹ miiran gẹgẹbi iraye si iranti, I/O ti ara gba to gun lati pari. Idinku I/O le mu iṣẹ ṣiṣe ibeere pọ si.

    1. Kaṣe ifipamọ lu redio
      Tọkasi iye data SQL Server le baamu sinu ifipamọ kaṣe. Ti o ga iye yii, dara julọ, nitori Fun olupin SQL lati wọle si awọn oju-iwe data ni imunadoko, wọn gbọdọ wa ninu ifipamọ kaṣe, ati pe ko gbọdọ jẹ awọn iṣẹ ṣiṣe titẹ sii/jade (I/O) ti ara. Ti o ba rii idinku iduro ni iye apapọ ti counter yii, o yẹ ki o ronu fifi Ramu kun. Atọka yii yẹ ki o ma wa loke 90% fun awọn eto OLTP ati loke 50% fun awọn eto OLAP.
      Zabbix: perf_counter["MSSQL$INSTANCE_NAME:Buffer ManagerBuffer cache hit ratio",30] Awọn apẹẹrẹ okunfa: {NODE_NAME:perf_counter["MSSQL$INSTANCE_NAME:Buffer ManagerBuffer cache hit ratio",30] kẹhin()}<70, ipele-giga
      и
      {NODE_NAME:perf_counter["MSSQL$INSTANCE_NAME: Buffer ManagerBuffer cache hit ratio", 30] kẹhin ()}<80, ipele-alabọde
    2. Ireti igbesi aye oju-iwe
      Ṣe afihan bi oju-iwe naa yoo ṣe pẹ to ni iranti ni ipo lọwọlọwọ rẹ. Ti iye naa ba n lọ silẹ, o tumọ si pe eto naa n ṣe ilokulo adagun ifipamọ naa. Nitorinaa, iṣẹ iranti le fa awọn iṣoro ti o fa iṣẹ ṣiṣe ti ko dara. O ṣe akiyesi pe ko si atọka gbogbo agbaye ni isalẹ eyiti ọkan le ṣe idajọ ni kedere pe eto naa n ṣe ilokulo adagun ifipamọ (itọkasi ti awọn aaya 300 ti igba atijọ lati MS SQL Server 2012).
      Zabbix: perf_counter["MSSQL$INSTANCE_NAME:Buffer ManagerPage ireti aye",30] Apeere okunfa: {NODE_NAME:perf_counter["MSSQL$INSTANCE_NAME:Buffer ManagerPage ireti aye",30]kẹhin()}<5, alaye ipele

  7. MS SQL Server: Gbogbogbo Statistics
    Nkan Awọn Iṣiro Gbogbogbo ni SQL Server n pese awọn iṣiro ti o gba ọ laaye lati ṣe atẹle iṣẹ ṣiṣe olupin gbogbogbo, gẹgẹbi nọmba awọn asopọ nigbakanna ati nọmba awọn olumulo fun isopo keji si tabi ge asopọ lati kọnputa ti n ṣiṣẹ apẹẹrẹ ti SQL Server. Awọn metiriki wọnyi wulo ni awọn ọna ṣiṣe iṣowo ori ayelujara nla (OLTP) nibiti nọmba nla ti awọn alabara n sopọ nigbagbogbo ati ge asopọ lati apẹẹrẹ ti SQL Server.

    1. Ilana dina
      Nọmba awọn ilana lọwọlọwọ dina.
      Zabbix: perf_counter["MSSQL$INSTANCE_NAME: Awọn ilana Iṣiro Gbogbogbo ti dinamọ",30] Apeere okunfa: ({NODE_NAME:perf_counter["MSSQL$INSTANCE_NAME:Ti dina mọ ilana Iṣiro Gbogbogbo",30].min(2m,0)}>=0)
      ati ({NODE_NAME:perf_counter["MSSQL$INSTANCE_NAME: Awọn ilana Iṣiro Gbogbogbo ti dinamọ",30].akoko(0)}>=50000)
      ati ({NODE_NAME:perf_counter["MSSQL$INSTANCE_NAME: Awọn ilana Iṣiro Gbogbogbo ti dinamọ",30].akoko(0)}<=230000), ipele alaye (nibi ni ihamọ ifihan lati 05:00 si 23:00)
    2. Olumulo Awọn isopọ
      Nọmba awọn olumulo lọwọlọwọ ti sopọ si olupin SQL.
      Zabbix: perf_counter["MSSQL$INSTANCE_NAME: Awọn isopọ Olumulo Gbogbogbo Statistics",30]

  8. MS SQL Server: Awọn titipa
    Ohun Awọn titiipa ni Microsoft SQL Server n pese alaye nipa awọn titiipa olupin SQL ti o gba fun awọn iru orisun kọọkan. Awọn titiipa ti wa ni idasilẹ lori awọn orisun olupin SQL, gẹgẹbi awọn ori ila ti a ka tabi ti yipada nipasẹ idunadura kan, lati ṣe idiwọ awọn iṣowo lọpọlọpọ lati lo orisun ni akoko kanna. Fun apẹẹrẹ, ti titiipa iyasoto (X) ba gba nipasẹ idunadura kan ni ọna kan ninu tabili kan, ko si idunadura miiran ti o le yi ila naa pada titi ti titiipa yoo fi tu silẹ. Didindinku lilo awọn titiipa mu concurrency pọ si, eyiti o le mu iṣẹ ṣiṣe pọ si. Ọpọlọpọ awọn iṣẹlẹ ti ohun Awọn titiipa ni a le tọpinpin ni akoko kanna, ọkọọkan eyiti yoo ṣe aṣoju titiipa lori oriṣi orisun ti o yatọ.

    1. Apapọ Akoko Iduro (ms)
      Apapọ iye akoko idaduro (ni awọn iṣẹju-aaya) fun gbogbo awọn ibeere titiipa ti o nilo idaduro. Kọngi yii fihan bi o ṣe pẹ to, ni apapọ, awọn ilana olumulo ni lati duro ni isinyi lati gba titiipa lori orisun kan. Iwọn iyọọda ti o pọju ti counter yii da lori iṣẹ-ṣiṣe rẹ patapata; o ṣoro lati pinnu iye apapọ eyikeyi fun gbogbo awọn ohun elo. Ti counter yii ba ga ju, o le tọkasi awọn iṣoro titiipa ninu aaye data rẹ.
      Zabbix: perf_counter["MSSQL$INSTANCE_NAME:Locks(_Total)Aago Iduro Apapọ (ms)",30] Apeere okunfa: {NODE_NAME:perf_counter["MSSQL$INSTANCE_NAME: Awọn titipa(_Total)Aago Iduro Apapọ (ms)", 30] kẹhin ()}>=500, alaye ipele-ipele
    2. Titiipa Akoko Iduro (ms)
      Lapapọ akoko idaduro titiipa (ni awọn iṣẹju-aaya) ni iṣẹju-aaya to kẹhin.
      Zabbix: perf_counter["MSSQL$INSTANCE_NAME: Awọn titipa(_Total)Aago Iduro Titiipa (ms)",30]
    3. Titiipa Nduro/aaya
      Nọmba awọn akoko ni iṣẹju-aaya ti o kẹhin ti okùn kan ni lati duro nitori ibeere titiipa kan.
      Zabbix: perf_counter["MSSQL$INSTANCE_NAME: Awọn titipa(_Total)Titii duro/iṣẹju iṣẹju",30]
    4. Titiipa Timeouts/aaya
      Nọmba awọn akoko ti titiipa ko le gba nipasẹ robin yika. Iwọn paramita atunto atunto SQL Server ti npinnu iye awọn akoko ti o tẹle ara le yiyi ṣaaju ki o to akoko jade ati okun di aiṣiṣẹ.
      Zabbix: perf_counter["MSSQL$INSTANCE_NAME: Awọn titipa(_Total)Titiipa Awọn akoko asiko/aaya",30] Apeere okunfa: {NODE_NAME:perf_counter["MSSQL$INSTANCE_NAME: Awọn titipa(_Total)Titiipa(_Total)Titiipa Timeouts/sec",30].ikẹhin()}>1000, ipele-alaye.
    5. Titii Awọn ibeere / iṣẹju-aaya
      Nọmba awọn ibeere fun iṣẹju keji ti iru titiipa pàtó kan.
      Zabbix: perf_counter["MSSQL$INSTANCE_NAME: Awọn titiipa(_Total) Awọn ibeere Titiipa/iṣẹju iṣẹju",30] Apeere okunfa: {NODE_NAME:perf_counter["MSSQL$INSTANCE_NAME: Awọn titiipa(_Total) Awọn ibeere Titiipa / iṣẹju-aaya", 30]. kẹhin ()}>500000, alaye ipele
    6. Nọmba Titiipa Awọn titiipa / iṣẹju-aaya
      Nọmba awọn ibeere titiipa fun iṣẹju-aaya ti o ja si titiipa kan. Iwaju awọn titiipa n tọka si awọn ibeere ti a ko ṣe ti ko dara ti o n dina awọn orisun pinpin.
      Zabbix: perf_counter["MSSQL$INSTANCE_NAME:Nọmba ti Deadlocks/sec",30] Apeere okunfa: {NODE_NAME:perf_counter["MSSQL$INSTANCE_NAME: Awọn titipa(_Total)Nọmba ti Deadlocks/sec",30].ikẹhin()}>1, ipele-giga

  9. MS SQL Server: Memory Manager
    Ohun elo Oluṣakoso Iranti ni Microsoft SQL Server n pese awọn iṣiro lati ṣe atẹle lilo iranti olupin jakejado. Mimojuto lilo iranti ti gbogbo olupin lati ṣe iṣiro iṣẹ ṣiṣe olumulo ati lilo awọn orisun le ṣe iranlọwọ idanimọ awọn igo iṣẹ. Abojuto iranti ti a lo nipasẹ apẹẹrẹ ti SQL Server le ṣe iranlọwọ lati pinnu:
    - boya aito iranti ti ara ko to lati fipamọ data ti a lo nigbagbogbo ninu kaṣe. Ti ko ba si iranti to, SQL Server gbọdọ gba data lati disk;
    - Boya iṣẹ ṣiṣe le ni ilọsiwaju ti iranti ba ṣafikun tabi iye iranti ti o wa fun data caching tabi awọn ẹya SQL Server inu ti pọ si.

    1. Iranti igbeowosile dayato
      Ṣe afihan nọmba lapapọ ti awọn ilana ti o gba iranti aaye iṣẹ ni aṣeyọri. Ti olufihan ba lọ silẹ ni imurasilẹ, o jẹ dandan lati mu Ramu pọ si.
      Zabbix: perf_counter["MSSQL$INSTANCE_NAME:Memory ManagerMemory Grants dayato si",30]
    2. Iranti igbeowosile ni isunmọtosi ni
      Tọkasi nọmba lapapọ ti awọn ilana ti nduro lati pin iranti iṣẹ. Pẹlu idagba iduroṣinṣin ti itọkasi, o jẹ dandan lati mu Ramu pọ si.
      Zabbix: perf_counter["MSSQL$INSTANCE_NAME:Memory ManagerMemory Awọn ifunni ni isunmọtosi",30]

  10. MS SQL Server: Statistics
    Ohun Statistics ni Microsoft SQL Server n pese awọn iṣiro lati ṣe atẹle akopọ ati awọn iru awọn ibeere ti a firanṣẹ si apẹẹrẹ ti SQL Server. Abojuto nọmba awọn akojọpọ ibeere ati awọn atunkopọ ati nọmba awọn ipele ti o gba nipasẹ apẹẹrẹ ti SQL Server n pese oye sinu bawo ni iyara SQL Server ṣe n ṣiṣẹ awọn ibeere olumulo ati bawo ni imudara ti o dara ju ibeere ṣe n ṣe ilana wọn.

    1. Awọn ibeere Batch / iṣẹju-aaya
      Nọmba awọn idii aṣẹ Transact-SQL ti a gba ni iṣẹju-aaya. Awọn iṣiro wọnyi ni ipa nipasẹ eyikeyi awọn idiwọn (I/O, nọmba awọn olumulo, iwọn kaṣe, idiju ibeere, ati bẹbẹ lọ). Nọmba ti o ga ti awọn ibeere soso tọkasi ilojade giga.
      Zabbix: perf_counter["MSSQL$INSTANCE_NAME:SQL StatisticsBatch Ibeere/iseju",30]

Ni afikun si gbogbo awọn ti o wa loke, o tun le tunto awọn eroja data miiran (bakannaa ṣẹda awọn okunfa lori wọn pẹlu awọn iwifunni ti o tẹle) Fun apẹẹrẹ:
1) iye aaye disk ọfẹ
2) awọn iwọn ti awọn faili data data data ati awọn akọọlẹ
abbl.
Sibẹsibẹ, gbogbo awọn afihan wọnyi ko ṣe afihan iṣoro ti awọn ibeere akoko gidi.
Lati ṣe eyi, o nilo lati ṣẹda awọn iṣiro pataki ti ara rẹ.
Nitori awọn idi aṣiri, Emi kii yoo fun awọn apẹẹrẹ ti iru awọn iṣiro bẹ. Pẹlupẹlu, wọn tunto ni iyasọtọ fun eto kọọkan. Ṣugbọn Mo ṣe akiyesi pe fun awọn ọna ṣiṣe bii 1C, NAV ati CRM, awọn iṣiro pataki ni a le ṣẹda papọ pẹlu awọn olupilẹṣẹ ti o yẹ.
Emi yoo fun apẹẹrẹ ti ṣiṣẹda atọka gbogbogbo ti o fihan iye awọn ibeere ti nṣiṣẹ ati iye awọn ibeere ti o wa ni isunmọ (ti daduro tabi dina) ni aaye kọọkan ni akoko.
Lati ṣe eyi, o nilo lati ṣẹda ilana ti o fipamọ:
Koodu

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

Nigbamii, o nilo lati lọ si folda nibiti Zabbix wa (zabbixconfuserparams.d) ati ṣẹda awọn faili 2 pẹlu itẹsiwaju ps1 (PowerShell) ki o kọ awọn koodu wọnyi sinu ọkọọkan wọn:
Koodu fun ṣiṣe awọn ibeere

$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 fun ni isunmọtosi ni ibeere

$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;

Bayi o nilo lati ṣẹda faili kan pẹlu awọn paramita olumulo ati itẹsiwaju .conf (tabi ṣafikun awọn laini si iru faili olumulo ti o wa tẹlẹ, ti o ba ṣẹda ọkan tẹlẹ) ki o fi awọn laini wọnyi sii:
UserParameter=PARAMETER_NAME_NUMBER_of_QUERIES EXECUTED,powershell -NoProfile -ExecutionPolicy Fori -Faili FULL_PATHzabbixconfuserparams.dFILE_NAME_FOR_EXECUTED_QUERYES.ps1
UserParameter=PARAMETER_NAME_NUMBER_WAITING_REQUESTS,powershell -NoProfile -ExecutionPolicy Fori -Faili FULL_PATHzabbixconfuserparams.dFILE_NAME_FOR_WAITING_REQUESTS.ps1
Lẹhin eyi, fi faili .conf pamọ ki o tun bẹrẹ aṣoju Zabbix.
Lẹhin eyi, a ṣafikun awọn eroja tuntun meji si Zabbix (ninu ọran yii, awọn orukọ ati bọtini jẹ kanna):
PARAMETER_NAME_NUMBER OF_REQUESTS ṢE
PARAMETER_NAME_NUMBER OF_WAITING_REQUESTS
O le ṣẹda awọn aworan bayi ati awọn okunfa fun awọn ohun data aṣa ti o ṣẹda.

Ti nọmba awọn ibeere isunmọ ba pọ si ni didasilẹ, lẹhinna ibeere atẹle le ṣafihan gbogbo ṣiṣiṣẹ ati awọn ibeere isunmọ ni akoko ti a fun pẹlu awọn alaye lati ibiti ati labẹ kini iwọle ti ibeere naa ṣe, ọrọ ati ero ibeere, ati awọn alaye miiran:
Koodu

/*Активные, готовые к выполнению и ожидающие запросы, а также те, что явно блокируют другие сеансы*/
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);

Jẹ ki n tun leti pe ni ibamu si awọn iṣiro ti a gbajọ o le gba awọn ibeere ti o nira julọ:
Koodu

/*
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

O tun le kọ fun MySQL. Lati ṣe eyi o nilo lati fi sori ẹrọ mysql-asopọ-net ati lẹhinna kọ koodu bi eleyi:
Koodu fun ni isunmọtosi ni ibeere

#Задаем переменные для подключение к 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;

Esi

Nkan yii wo apẹẹrẹ ti awọn iṣiro iṣẹ (awọn nkan data) ni Zabbix. Ọna yii ngbanilaaye awọn alakoso lati wa ni ifitonileti nipa ọpọlọpọ awọn iṣoro ni akoko gidi tabi lẹhin akoko kan pato. Nitorinaa, ọna yii gba wa laaye lati dinku iṣẹlẹ ti iṣoro pataki ni ọjọ iwaju ati da iṣẹ ti DBMS ati olupin duro, eyiti o ṣe aabo fun iṣelọpọ lati didaduro awọn ilana iṣẹ.
Akọsilẹ ti tẹlẹ: Iṣẹ ṣiṣe deede pẹlu data data eto alaye 24×7 ni MS SQL Server

Awọn orisun:

» Zabbix 3.4
» Awọn iṣiro iṣẹ
» Ile-iṣẹ Iṣẹ fun Azure SQL Database ati SQL Server Database Engine
» SQL Igbesi aye
» SQLS ogbon
» TechNet Microsoft
» Iṣayẹwo lilo iranti
» Performance Analysis
» SQL iwe
» Awọn akọsilẹ nipa Windows

orisun: www.habr.com

Fi ọrọìwòye kun