Isticmaalka Zabbix si aad ula socoto Xogta Serverka MS SQL

Horudhac

Inta badan waxaa loo baahan yahay in loo sheego maamulaha waqtiga dhabta ah dhibaatooyinka la xiriira keydka macluumaadka (database).

Maqaalkani wuxuu sharxi doonaa waxa loo baahan yahay in lagu habeeyo Zabbix si loo kormeero xogta MS SQL Server.

Fadlan ogow in faahfaahinta sida loo habeeyo aan la bixin doonin, si kastaba ha ahaatee, qaacidooyinka iyo talooyinka guud, iyo sidoo kale sharaxaad faahfaahsan oo ku saabsan ku darida xogta gaarka ah iyada oo loo marayo hababka kaydsan ayaa lagu siin doonaa maqaalkan.
Sidoo kale, kaliya xisaabiyeyaasha waxqabadka ugu muhiimsan ayaa halkan looga hadli doonaa.

go'aanka

Marka hore, waxaan sharxi doonaa dhammaan xisaabiyeyaasha waxqabadka (iyada oo loo marayo walxaha xogta ee Zabbix) ee aan u baahanahay:

  1. Disk macquul ah
    1. Celcelis ahaan saxanka sec/Akhri
      Wuxuu muujiyaa celceliska wakhtiga, lagu muujiyay ilbidhiqsiyo, ee akhrinta xogta saxanka. Celceliska qiimaha celceliska waxqabadka Disk-sek/Akhrigu waa in aanu dhaafin 10 millise seconds. Qiimaha ugu badan ee miiska waxqabadka celceliska Disk-sek/Akhrigu waa in aanu dhaafin 50 millise seconds.

      Zabbix: perf_counter[LogicalDisk(_Total)Ac. Disk sec/Akhri], sidoo kale waa muhiim inaad la socoto saxanka la rabo, tusaale ahaan sidan: perf_counter[LogicalDisk(C:)Avg. Disk sec/Akhri]

      Tusaalooyinka kicinta:
      {NODE_NAME:perf_counter[LogicalDisk (_Total) Celcelis ahaan. Disk sec/Akhri]. Last()}>0.005, heer-sare
      и
      {NODE_NAME:perf_counter[LogicalDisk (_Total) Celcelis ahaan. Disk sec/Akhri].ugu dambeeya()}>0.0025, heer-dhexe

    2. Celcelis ahaan saxanka sec/qor
      Wuxuu muujiyaa celceliska wakhtiga, lagu muujiyay ilbidhiqsiyo, ee xogta loogu qoro saxanka. Celceliska qiimaha celceliska waxqabadka Disk-sek/qoraa waa in aanu dhaafin 10 millise seconds. Qiimaha ugu badan ee miiska waxqabadka celceliska Disk-sek/qoraa waa in aanu dhaafin 50 millise seconds.

      Zabbix: perf_counter[LogicalDisk(_Total)Ac. Disk sec/Write], sidoo kale waxaa muhiim ah in la socdo saxanka la rabo, tusaale ahaan sidan: perf_counter[LogicalDisk(C:)Avg. Disk sec/qor]

      Tusaalooyinka kicinta:
      {NODE_NAME:perf_counter[LogicalDisk (_Total) Celcelis ahaan. Disk sec/qor.ugu dambeeya()}>0.005, heer-sare
      и
      {NODE_NAME:perf_counter[LogicalDisk (_Total) Celcelis ahaan. Disk sec/qor.ugu dambeeya()}>0.0025, heer-dhexe

    3. Celceliska Dhererka Safka Disk-ga

      Celceliska dhererka safka ee codsiyada saxanka. Wuxuu muujiyaa tirada codsiyada saxanka ee la sugayo socodsiinta muddo cayiman gudahood. Safka aan ka badnayn 2 saxan keliya ayaa loo arkaa mid caadi ah. Haddii ay jiraan wax ka badan laba codsi oo safka ku jira, markaas diskka ayaa laga yaabaa in la buux dhaafiyo oo ma socodsiin karo codsiyada soo socda. Waxaad si sax ah u ogaan kartaa hawlaha uu saxanku xamili karin adiga oo isticmaalaya xisaabiyeyaasha Avg. Dhererka Safka Akhriska iyo Celceliska. Dhererka Queue Wright ee Disk-ga (kuyuuga codsiyada qorista).
      Celceliska qiimaha Dhererka Queue Disk-ga lama cabbiro, laakiin waxa lagu xisaabiyaa iyadoo la isticmaalayo sharciga Little ee aragtida xisaabta ee safka. Sida sharcigani qabo, tirada codsiyada sugaysa in laga baaraandego, celcelis ahaan, waxay la mid tahay inta jeer ee codsiyada lagu dhufto wakhtiga habaynta codsiga. Kuwaas. xaaladeena Avg. Dhererka Safka Disk-ga = (Beerayaasha Disk/sicn) * (Acel-is-weydaarsiga sec/ wareejinta).

      Celcelis Dhererka Queue Disk waxaa loo bixiyaa mid ka mid ah xisaabiyeyaasha ugu muhiimsan ee lagu go'aaminayo culeyska ku jira nidaamka hoose ee diskka, si kastaba ha ahaatee, si ku filan loo qiimeeyo, waxaa lagama maarmaan ah in si sax ah loo matalo qaabdhismeedka jireed ee nidaamka kaydinta. Tusaale ahaan, hal dariiq oo adag qiimihiisu ka weyn yahay 2 ayaa loo arkaa inuu yahay mid muhiim ah, haddii diskku ku yaal RAID array of 4 disks, markaa waa inaad ka walwashaa haddii qiimuhu ka weyn yahay 4*2=8.

      Zabbix: perf_counter[LogicalDisk(_Total)Ac. Dhererka Queue Disk], sidoo kale waa muhiim inaad la socoto saxanka la rabo, tusaale ahaan sidan: perf_counter[LogicalDisk(C:)Avg. Dhererka Safka Disk-ga]

  2. Xasuusta
    1. Bogagga/sek
      Muujinaya tirada boggaga SQL Server ka akhriyey saxanka ama ku qoray saxanka si loo xalliyo gelitaanka boggaga xusuusta ee aan lagu shubin RAM wakhtiga gelitaanka. Qiimahani waa wadarta boggaga wax-gelinta/sicn iyo bogag-soo-saarka/seknkii, waxayna sidoo kale tixgalinaysaa bog-goynta (boggagga/isku-beddelka) ee kaydinta nidaamka gelitaanka faylasha xogta codsiga. Intaa waxaa dheer, tan waxaa ka mid ah boggaga faylasha aan kaydsaneyn ee si toos ah loogu dhejiyay xusuusta. Tani waa miiska ugu weyn ee ay tahay in lala socdo haddii aad la kulmeyso isticmaalka xusuusta sare iyo qoraalada xad dhaafka ah ee la xiriira. Miisaankani waxa uu tilmaamayaa cadadka isdhaafsiga iyo qiimihiisa caadiga ah (ma aha ugu sarreeya) waa inuu ku dhawaadaa eber. Kordhinta isdhaafsiga waxay muujineysaa baahida loo qabo in la kordhiyo RAM ama la dhimo tirada barnaamijyada codsiyada ee ku shaqeeya server-ka.

      Zabbix: perf_counter[MemoryPages/sek] Tusaale kicin:
      {NODE_NAME:perf_counter[MemoryPages/sec].min(5m)}>1000, macluumaadka heerka

    2. Cilada Bogga/sek

      Kani waa qiimaha xisaabinta khaladka bogga. Cilladda boggu waxay dhacdaa marka hab-socodku tixraaco bogga xusuusta ee aan ku jirin RAM-ka shaqada. Xisaabiyahani waxa uu xisaabta ku darayaa labada cilada bogag ee u baahan gelitaanka diskka, iyo kuwa ay sababto bogga ka baxsan shaqada RAM. Processor-yaasha badankoodu waxay xamili karaan cilada Nooca XNUMX bog iyagoon wax badan daahin. Si kastaba ha ahaatee, maaraynta ciladaha nooca XNUMX ee u baahan helitaanka diskku waxay sababi kartaa dib u dhac weyn.

      Zabbix: perf_counter [MemoryPage Faults/sec] Tusaale kicin:
      {NODE_NAME:perf_counter[MemoryPage Faults/sec].min(5m)}>1000, macluumaadka heerka

    3. Bytes la heli karo

      Waxa uu la socdaa cadadka xusuusta laga heli karo bytes si ay u socdaan hababka kala duwan. Akhrinta hoose waxay muujinaysaa xusuusta hoose. Xalku waa in la kordhiyo xusuusta. Mitirkani waa in inta badan kiisaska uu si joogto ah uga sarreeyo 5000 kV.
      Waxa macno leh in la dejiyo marinka Mbytes la heli karo gacanta sababahan soo socda awgood:

      • 50% xusuusta xorta ah ayaa la heli karaa = heer sare ah
      •25% xusuusta la heli karo = Waxay u baahan tahay fiiro gaar ah
      • 10% bilaash ah = Dhibaatooyinka suurtagalka ah
      • In ka yar 5% xusuusta la heli karo = Xawaaruhu Halis, waxaad u baahan tahay inaad soo farageliso.
      Zabbix: perf_counter[Memory Available Bytes]

  3. Processor (Guud): % Processor Time-ka
    Miiskani waxa uu tusinayaa boqolkiiba wakhtiga uu processor-ku ku mashquulsanaa fulinta hawlaha dunta aan shaqayn. Qiimahan waxaa loo tixgelin karaa sida saamiga wakhtiga lagu bixiyay samaynta shaqo waxtar leh. Processor kasta waxa lagu meelayn karaa dun aan shaqaynayn, kaas oo cuna wareegyada processor-ka aan wax soo saar lahayn ee aanay isticmaalin dunta kale. Miiskan waxa lagu gartaa meelaha ugu sarreeya oo 100% gaadhi kara Si kastaba ha noqotee, haddii ay jiraan muddo dheer oo isticmaalka processor-ka uu ka sarreeyo boqolkiiba 80, markaa nidaamku wuxuu noqon doonaa mid waxtar leh iyadoo la adeegsanayo processor-yo badan.

    Zabbix: perf_counter[Processor(_Total)% Processor Time], halkan waxa kale oo lagu soo bandhigi karaa xudunta
    Tusaale kicin:
    {NODE_NAME:perf_counter[Processor(_Total)% Processor Time].min(5m)}>80, macluumaadka heerka

  4. Interface Network (*): % Wadarta Guud ee Baytka/sek
    Tirada guud ee bytes soo diray oo helay halkii ilbiriqsi ee dhammaan intersyada. Tani waa bandwidth interface (in bytes). Waa lagama maarmaan in la isbarbar dhigo qiimaha miiskaan iyo xajmiga ugu badan ee kaarka shabakada. Guud ahaan, counter-kani waa inuu muujiyaa wax aan ka badnayn 50% ka faa'iidaysiga xawaaraha isku xidhka adabtarada.
    Zabbix: perf_counter[Network Interface(*)Bytes Sent/sec]
  5. MS SQL Server: Hababka Helitaanka
    Habka Helitaanka ee SQL Server wuxuu bixiyaa xisaabiyeyaasha si ay uga caawiyaan la socodka helitaanka xogta macquulka ah ee gudaha kaydka. Gelitaanka jireed ee boggaga xogta ee diskka waxaa lagu kontaroolaa iyadoo la isticmaalayo xisaabiyeyaasha maamulaha kaydiyaha. La socoshada hababka gelitaanka xogta ee kaydka xogta waxay caawisaa in la go'aamiyo in waxqabadka weydiinta lagu horumarin karo iyada oo lagu darayo ama la beddelo tusmooyin, ku darista ama dhaqaajinta qaybaha, ku darista faylalka ama kooxaha faylalka, tusmooyinka jajabinta, ama beddelidda qoraalka weydiinta. Intaa waxaa dheer, waxaad isticmaali kartaa Hababka Helitaanka tirooyinka shayga si aad ula socoto cabbirka xogta, tusmooyinka, iyo meel bannaan oo bilaash ah ee xogtaada, awoodda la socodka iyo kala qaybsanaanta tusaale ahaan server kasta. Kala qaybsanaanta xad-dhaafka ah waxay si weyn u dhimi kartaa waxqabadka.

    1. Bogga Kala-baxa/sek
      Tirada bogga kala qaybsantay ilbiriqsikii la sameeyay natiijada bogga tusmada oo buux dhaafiyay. Qiimaha sare ee mitirkan macneheedu waxa weeye marka la samaynayo gelinta iyo cusboonaysiinta hawlaha xogta, SQL Server waa in uu sameeyaa tiro badan oo hawlgalo khayraad ah si uu u kala qaybiyo oo uu u wareejiyo qayb ka mid ah bogga jira meel cusub. Hawlgallada noocan oo kale ah waa in laga fogaado mar kasta oo ay suurtagal tahay. Waxaad isku dayi kartaa inaad dhibaatada ku xalliso laba siyaabood:
      - u samee tusaha isku dhafan ee tiirarka si toos ah u kordhiya. Xaaladdan oo kale, diiwaannada cusub laguma dhejin doono gudaha boggag hore loogu kaydiyay xogta, laakiin waxay si isku xigta u qabsan doonaan bogag cusub;
      - dib-u-dhis tusmooyinka iyadoo la kordhinayo qiimaha cabbirka Fillfactor. Doorashadani waxay kuu ogolaanaysaa inaad kaydiso meel bannaan oo bilaash ah boggaga tusmada kuwaas oo loo isticmaali doono in lagu dejiyo xog cusub, iyada oo aan loo baahnayn hawlgallada kala qaybinta bogga.
      Zabbix: perf_counter["MSSQL$INSTANCE_NAME: Hababka Galitaanka Bogga Qaybsan/sek",30] Tusaale kicin: {NODE_NAME:perf_counter["MSSQL$INSTANCE_NAME: Hababka Galitaanka Bogga Kala Qaybsanaanta/sek",30]. Last()}>{NODE_NAME:perf_counter["MSSQL$INSTANCE_NAME:SQL StatisticsBatch Requests/sec",30] /5, macluumaadka heerka
    2. Sawirada buuxa/sek
      Tiro aan xadidneyn oo baaritaan buuxa ah ilbiriqsikii. Hawlgalladan waxaa ka mid ah baarista miiska ugu weyn iyo baarista tusmooyinka buuxa. Kordhinta xasilloon ee tusahan waxay muujin kartaa hoos u dhaca nidaamka (la'aanta tusmooyinka lagama maarmaanka ah, kala qaybsanaantooda ba'an, fashilka hagaajinta isticmaalka tusmooyinka jira, joogitaanka tusmooyinka aan la isticmaalin). Si kastaba ha noqotee, waxaa habboon in la ogaado in sawirka buuxa ee miisaska yaryar uusan had iyo jeer xun ahayn, sababtoo ah haddii aad miiska oo dhan ku dhejin karto RAM, ka dibna sawir buuxa ayaa noqon doona mid degdeg ah. Laakiin inta badan kiisaska, kororka xasilloon ee tilmaamayaasha miiska ayaa muujin doona hoos u dhaca nidaamka. Waxaas oo dhan waxay khuseeyaan kaliya nidaamyada OLTP. Nidaamyada OLAP, baaritaanno buuxa oo joogto ah ayaa caadi ah.
      Zabbix: perf_counter["MSSQL$INSTANCE_NAME:Habka Galitaanka SawiradaFull Scans/sec",30]

  6. MS SQL Server: Maamulaha Buffer
    Shayga Maareeyaha Buffer wuxuu bixiyaa xisaabiyeyaasha kaa caawinaya inaad la socoto sida SQL Server u isticmaalo ilaha soo socda:
    - xusuusta loogu talagalay kaydinta boggaga xogta;
    - xisaabiyeyaasha kormeera I/O jireed sida SQL Server u akhriyo oo u qoro boggaga xogta;
    - ballaadhinta barkadda kaydinta si loo ballaadhiyo kaydka kaydinta iyadoo la adeegsanayo xusuusta degdegga ah ee aan kacsanayn, sida darawallada adag ee gobolka (SSD);
    - Ilaalinta xusuusta iyo xisaabiyeyaasha uu isticmaalo SQL Server waxay ka caawisaa helitaanka macluumaadka soo socda;
    - haddii ay jiraan cilad-xumo ay keento xusuus la'aanta jirka. Haddii xogta inta badan la helo aan lagu kaydin karin kaydka, SQL Server waxa lagu qasbay inuu ka akhriyo saxanka;
    Suurtagal ma tahay in la hagaajiyo waxqabadka weydiinta iyada oo la kordhinayo xaddiga xusuusta ama loo qoondeynayo xusuusta dheeraadka ah xogta kaydinta ama kaydinta dhismayaasha gudaha SQL Server?
    - inta jeer ee SQL Server uu akhriyo xogta diskka. Marka la barbardhigo hawlgallada kale sida gelitaanka xusuusta, I/O jireed waxay qaadataa waqti dheer in la dhammaystiro. Yaraynta I/O waxay wanaajin kartaa waxqabadka weydiinta.

    1. Kaydka kaydka ah ayaa ku dhacay raadiyaha
      Waxay tuseysaa inta xogta SQL Server ku geli karto kaydka kaydka Qiimahan sarreeya, ayaa ka sii fiican, sababtoo ah Si Server-ka SQL uu si wax ku ool ah u galo boggaga xogta, waa inay ku jiraan kaydka kaydka, oo aanay jirin hawl-gallo wax-soo-gelin/wax-soo-saar (I/O) ah. Haddii aad aragto hoos u dhac joogto ah oo ku yimid celceliska qiimaha miiskan, waa inaad tixgelisaa inaad ku darto RAM. Tilmaamahan had iyo jeer waa inuu ka sarreeyaa 90% nidaamyada OLTP iyo in ka sarreeya 50% nidaamyada OLAP.
      Zabbix: perf_counter["MSSQL$INSTANCE_NAME:Buffer ManagerBuffer cache hit ratio",30] Tusaalooyinka kicinta: {NODE_NAME:perf_counter["MSSQL$INSTANCE_NAME:Buffer ManagerBuffer cache hit ratio",30]. Last()} <70, heer-sare
      и
      {NODE_NAME:perf_counter["MSSQL$INSTANCE_NAME:Buffer ManagerBuffer cache hit ratio",30]. Last()} <80, heerka-dhexdhexaad
    2. rajada nolosha bogga
      Waxay tusinaysaa inta boggu si joogto ah ugu ahaan doono xusuusta sida uu hadda yahay. Haddii qiimuhu sii socdo hoos u dhaca, waxay la macno tahay in nidaamku si xun u isticmaalo barkadda kaydka ah. Sidaa darteed, waxqabadka xusuusta ayaa laga yaabaa inuu keeno dhibaatooyin keenaya waxqabad xumo. Waxaa xusid mudan in aysan jirin tilmaame caalami ah oo ka hooseeya kaas oo si cad u xukumi kara in nidaamku si xun u isticmaalo barkadda kaydinta (tusaha 300 ee ilbiriqsigu waa duugoobay tan iyo MS SQL Server 2012).
      Zabbix: perf_counter["MSSQL$INSTANCE_NAME:Buffer Manager Page rajada nolosha",30] Tusaale kicin: {NODE_NAME:perf_counter["MSSQL$INSTANCE_NAME:Buffer Manager Bogga nolosha rajada",30] ugu dambeeya ()} <5, macluumaadka heerka

  7. MS SQL Server: Tirakoobka Guud
    Shayga Tirakoobka Guud ee SQL Server waxa uu bixiyaa xisaabiyayaal kuu oggolaanaya inaad la socoto dhaqdhaqaaqa guud ee server-ka, sida tirada isku xidhka isku xidhan iyo tirada isticmaaleyaasha ilbiriqsi kasta oo ku xidha ama ka goysa kumbiyuutarka ku shaqeeya tusaale ahaan Server-ka SQL. Halbeegyadani waxay faa'iido u leeyihiin nidaamyada habaynta macaamil ganacsi ee internetka (OLTP) halkaasoo tiro badan oo macaamiil ah ay si joogto ah ugu xidhmayaan oo ay uga goynayaan tusaale SQL Server.

    1. Habka waa xannibay
      Tirada hababka hadda la xannibay.
      Zabbix: perf_counter["MSSQL$INSTANCE_NAME:Habraaca Tirakoobka Guud waa la xannibay",30] Tusaale kicin: ( {NODE_NAME:perf_counter["MSSQL$INSTANCE_NAME:Nidaamka Tirakoobka Guud waa la xiray",30].min(2m,0)}>=0)
      iyo ({NODE_NAME:perf_counter["MSSQL$INSTANCE_NAME:Nidaamka Tirakoobka Guud waa la xiray",30].waqti(0)}>=50000)
      iyo ({NODE_NAME:perf_counter["MSSQL$INSTANCE_NAME:Habraaca Tirakoobka Guud waa la xannibay",30].waqtiga(0)}=230000), heerka macluumaadka (halkan waxaa ka jira xaddidaad calaamad laga bilaabo 05:00 ilaa 23:00)
    2. Xiriirinta Isticmaalaha
      Tirada isticmaalayaasha hadda ku xidhan SQL Server.
      Zabbix: perf_counter["MSSQL$INSTANCE_NAME:Xiriirka Isticmaalaha Guud ee Tirakoobka",30]

  8. MS SQL Server: Quful
    Shayga Qufulka ee Microsoft SQL Server wuxuu bixiyaa macluumaad ku saabsan qufullada SQL Server ee loo helay noocyada kheyraadka gaarka ah. Qufulada waxaa lagu soo saaraa agabka SQL Server, sida safafka la akhriyo ama wax laga beddelo, si looga hortago wax kala beddelasho badan oo isku mar ah isticmaalka kheyraadka. Tusaale ahaan, haddii quful gaar ah (X) uu ku helo wax kala beddelasho saf ah oo miiska ku jira, wax macaamil kale ma beddeli karo safkaas ilaa qufulka la sii daayo. Yaraynta isticmaalka qufulyada waxay kordhisaa isdhaafsiga, taas oo hagaajin karta waxqabadka guud. Dhawr jeer oo shayga Qufulka ah ayaa la raadsan karaa isku mar, kuwaas oo mid walba uu matali doono quful nooc gaar ah oo kheyraad ah.

    1. Celceliska Waqtiga Sugidda (ms)
      Celceliska muddada sugitaanka (milli-ilbiriqsi) ee dhammaan codsiyada qufulka ee u baahan sugitaanka. Miiskani waxa uu tusinayaa ilaa inta, celcelis ahaan, hababka adeegsaduhu ay tahay in ay sugaan safka si ay u helaan qufulka kheyraadka. Qiimaha ugu badan ee la oggol yahay ee miiskani wuxuu si buuxda ugu xiran yahay hawshaada; way adag tahay in la go'aamiyo qiime kasta oo celcelis ah dhammaan codsiyada. Haddii miiskani uu aad u sarreeyo, waxay muujin kartaa dhibaatooyinka qufulka xogtaada.
      Zabbix: perf_counter["MSSQL$INSTANCE_NAME:Locks(_Total) Celceliska Waqtiga Sugidda (ms)",30] Tusaale kicin: {NODE_NAME:perf_counter["MSSQL$INSTANCE_NAME:Locks(_Total) Celceliska Waqtiga Sugidda (ms)", 30]. Last()}>=500, macluumaadka heerka
    2. Quful wakhtiga sugitaanka (ms)
      Wadarta wakhtiga sugidda ee qufulka (milli-ilbiriqsi) in ka badan ilbiriqsi ee u dambeeya.
      Zabbix: perf_counter["MSSQL$INSTANCE_NAME:Locks(_Total)Lock Suit Time (ms)",30]
    3. Quful Sugitaan/sek
      Tirada jeer ee ilbiriqsigii u dambeeyay ee duntu sugi jirtay codsi quful awgeed.
      Zabbix: perf_counter["MSSQL$INSTANCE_NAME:Locks(_Total) Quful Sugitaan/sek",30]
    4. Wakhtiyada Qufulka/sek
      Inta jeer ee aan qufulka lagu heli karin wareega wareega. Qiimaha halbeegga qaabeynta ee SQL Server spin counter counter-counter-ka ayaa go'aamisa tirada jeer ee duntu miiqin karto ka hor intaanay waqtigu dhicin oo duntu noqoto mid aan shaqayn.
      Zabbix: perf_counter["MSSQL$INSTANCE_NAME:Locks(_Total)Waqti dhamaadey/sek",30 Tusaale kicin: {NODE_NAME:perf_counter["MSSQL$INSTANCE_NAME:Locks(_Total) Qufulka
    5. Codsiyada Quful/sek
      Tirada codsiyada ilbiriqsikii ee nooca qufulka ee la cayimay.
      Zabbix: perf_counter["MSSQL$INSTANCE_NAME:Locks(_Total)Codsiyada Quful/sek",30] Tusaale kicin: {NODE_NAME:perf_counter["MSSQL$INSTANCE_NAME:Locks(_Total)Codsiyada Qufulka/sek",30].ugu dambeeya()}>500000, xogta heerka
    6. Quful Tirada Qufulka/sek
      Tirada codsiyada qufulka ee ilbiriqsi kasta oo keena xidhidh. Joogitaanka xannibaadaha ayaa muujinaya su'aalo si liidata loo dhisay oo xannibaya ilaha la wadaago.
      Zabbix: perf_counter["MSSQL$INSTANCE_NAME:Tirada Qufulka/sicn",30] Tusaale kicin: {NODE_NAME:perf_counter["MSSQL$INSTANCE_NAME:Locks(_Total)Tirada Deadlocks/sek",30]. Last()}>1, heer-sare

  9. MS SQL Server: Maamulaha xusuusta
    Shayga Maareeyaha Xusuusta ee Microsoft SQL Server wuxuu bixiyaa xisaabiyeyaasha si ay ula socdaan isticmaalka xusuusta server-ka oo dhan. La socodka isticmaalka xusuusta ee serverka oo dhan si loo qiimeeyo dhaqdhaqaaqa isticmaalaha iyo isticmaalka kheyraadka ayaa kaa caawin kara in la aqoonsado caqabadaha waxqabadka. Kormeerka xusuusta ee uu isticmaalo tusaale ahaan SQL Server ayaa kaa caawin karta go'aaminta:
    - haddii ay jiraan gabaabsi xusuusta jirka ah oo aan ku filnayn si loo kaydiyo xogta inta badan la isticmaalo ee khasnadda. Haddii aysan jirin xusuus ku filan, SQL Server waa inuu ka soo qaataa xogta diskka;
    - Haddii waxqabadka weydiintu uu fiicnaan karo haddii xusuusta lagu daro ama xaddiga xusuusta la heli karo ee kaydinta xogta ama qaabdhismeedka SQL Server ee gudaha ayaa la kordhiyey.

    1. Deeqaha Xusuusta oo heer sare ah
      Waxay muujinaysaa wadarta guud ee habraacyada si guul leh u helay xusuusta goobta shaqada. Haddii tilmaamuhu si tartiib tartiib ah u dhaco, waa lagama maarmaan in la kordhiyo RAM.
      Zabbix: perf_counter["MSSQL$INSTANCE_NAME:Maamulaha Xusuusta Xasuustu waxay siisay Deeq heer sare ah",30]
    2. Deeqaha Xusuusta ee La Sugayo
      Waxay muujinaysaa tirada guud ee hababka sugaya in loo qoondeeyo xusuusta shaqada. Iyada oo kobaca xasilloon ee tusaha, waa lagama maarmaan in la kordhiyo RAM.
      Zabbix: perf_counter["MSSQL$INSTANCE_NAME:Maamulaha Xusuusta Deeqaha la sugayo",30]

  10. MS SQL Server: Tirakoobka
    Shayga Istaatistikada ee Microsoft SQL Server wuxuu bixiyaa xisaabiye si ay ula socdaan isu-ururinta iyo noocyada weydiimaha loo diro tusaale ahaan Server SQL. La socoshada tirada ururinta su'aalaha iyo dib-u-soo-celinta iyo tirada dufcadaha uu helay tusaale ahaan Server-ka SQL waxay ku siinaysaa aragti ku saabsan sida ugu dhakhsaha badan ee SQL Server u fuliyo weydiimaha isticmaalaha iyo sida hufan ee kor u qaadka weydiinta u socodsiiyo.

    1. Codsiyada Dufcadda/sek
      Tirada xirmooyinka amarka Transact-SQL ee la helay ilbiriqsikii. Tirakoobyadan waxaa saameeya xaddidaad kasta (I/O, tirada isticmaalayaasha, cabbirka kaydka, kakanaanta weydiinta, iwm.). Tiro badan oo codsiyada baakidhku waxay muujinayaan soo-saarka sare.
      Zabbix: perf_counter["MSSQL$INSTANCE_NAME:SQL StatisticsBatch Requests/sec",30]

Dhammaan kuwan kor ku xusan, waxa kale oo aad habayn kartaa walxaha kale ee xogta (sidoo kale waxaad ku abuuri kartaa kiciyeyaasha iyaga oo wata ogeysiisyada xiga) Tusaale ahaan:
1) inta uu le'eg yahay diskka bilaashka ah
2) cabbirrada xogta faylalka iyo diiwaannada
iyo wixii la mid ah.
Si kastaba ha ahaatee, dhammaan tilmaamayaashan ma muujiyaan dhibaatada su'aalaha wakhtiga dhabta ah.
Si tan loo sameeyo, waxaad u baahan tahay inaad abuurto xisaabiyeyaashaada gaarka ah.
Sababaha sirta awgeed, ma bixin doono tusaalayaal xisaabaadka noocaas ah. Waxaa intaa dheer, waxay si gaar ah ugu habaysan yihiin nidaam kasta. Laakiin waxaan ogsoonahay in nidaamyada sida 1C, NAV iyo CRM, xisaabiyeyaasha khaaska ah la abuuri karo iyada oo lala kaashanayo horumariyeyaasha ku habboon.
Waxaan ku siin doonaa tusaale abuurista tilmaame guud oo tusinaya inta codsi ee socda iyo inta codsi ee la sugayo (la hakiyay ama la xannibay) waqti kasta.
Si tan loo sameeyo, waxaad u baahan tahay inaad abuurto hab kaydsan:
Code

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

Marka xigta, waxaad u baahan tahay inaad tagto galka meesha uu ku yaal Zabbix (zabbixconfuserparams.d) oo aad abuurto 2 fayl oo leh ps1 (PowerShell) kordhinta oo ku qor koodhadhkan soo socda mid kasta oo ka mid ah:
Koodhka socodsiinta weydiimaha

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

Koodhka codsiyada la sugayo

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

Hadda waxaad u baahan tahay inaad abuurto fayl leh xuduudaha isticmaalaha iyo kordhinta .conf (ama ku dar khadadka faylka isticmaalaha jira, haddii mid hore loo abuuray) oo geli khadadka soo socda:
UserParameter=PARAMETER_NAME_NUMBER_of_QUERIES EXECUTED,powershell -NoProfile -ExecutionPolicy Bypass -Faylka 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
Taas ka dib, kaydi faylka .conf oo dib u bilaw wakiilka Zabbix.
Taas ka dib, waxaan ku darnaa laba walxood oo cusub Zabbix (kiiskan, magacyada iyo furaha waa isku mid):
PARAMETER_NAME_NUMBER OF_REQUESTS LA SAMEEYAY
PARAMETER_NAME_NUMBER OF_WAITING_REQUESTS
Waxaad hadda abuuri kartaa garaafyo iyo kiciyeyaasha walxaha xogta gaarka ah ee la sameeyay.

Haddii tirada codsiyada la sugayo ay si aad ah u korodho, markaa su'aasha soo socotaa waxay soo bandhigi kartaa dhammaan codsiyada socda iyo kuwa la sugayo wakhti go'an oo ay ku jiraan faahfaahinta halka iyo hoosteeda waxa codsiga la fuliyo, qoraalka iyo qorshaha weydiinta, iyo sidoo kale faahfaahin kale:
Code

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

Aan sidoo kale ku xasuusiyo in marka la eego tirakoobyada la ururiyay, aad heli karto weydiimaha ugu adag:
Code

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

Waxaad sidoo kale u qori kartaa MySQL. Si aad tan u samayso waxaad u baahan tahay inaad rakibto mysql-connector-net ka dibna u qor code sidatan:
Koodhka codsiyada la sugayo

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

natiijada

Maqaalkani wuxuu eegay tusaale ka mid ah xisaabiyeyaasha waxqabadka (alaabta xogta) ee Zabbix. Habkani wuxuu u oggolaanayaa maamulayaasha in la ogeysiiyo dhibaatooyinka kala duwan waqtiga dhabta ah ama ka dib waqti cayiman. Sidaa darteed, habkani wuxuu noo ogolaanayaa inaan yareyno dhacdooyinka dhibaatada muhiimka ah mustaqbalka oo aan joojino shaqada DBMS iyo server-ka, taas oo markaa ka ilaalinaysa wax soo saarka joojinta hababka shaqada.
Maqaal hore: Shaqada joogtada ah ee xogta nidaamka macluumaadka 24×7 ee MS SQL Server

Ilaha:

» Zabbix 3.4
» Miisaanka waxqabadka
» Xarunta Waxqabadka ee Azure SQL Database iyo SQL Server Database Engine
» Hab-nololeedka SQL
» Xirfadaha SQLS
» TechNet Microsoft
» Falanqaynta isticmaalka xusuusta
» Falanqaynta Waxqabadka
» Dukumentiyada SQL
» Qoraalada ku saabsan Windows

Source: www.habr.com

Add a comment