Tlhaloso
Hangata ho na le tlhokahalo ea ho tlaleha ho mookameli ka nako ea sebele mabapi le mathata a amanang le database (database).
Sengoliloeng sena se tla hlalosa se hlokang ho hlophisoa ho Zabbix ho beha leihlo database ea MS SQL Server.
Ka kopo hlokomela hore lintlha tse mabapi le mokhoa oa ho lokisa li ke ke tsa fanoa, leha ho le joalo, liforomo le likhothaletso tse akaretsang, hammoho le tlhaloso e qaqileng ea ho eketsa lintlha tsa data tse tloaelehileng ka mekhoa e bolokiloeng e tla fanoa sehloohong sena.
Hape, mona ho tla buisanoa ka li- main performance counters feela.
u etsa qeto ea
Taba ea pele, ke tla hlalosa li-counters tseo kaofela tsa ts'ebetso (ka likarolo tsa data ho Zabbix) tseo re li hlokang:
- Disk e utloahalang
- Avg Disc sec/Read
E bonts'a nako e tloaelehileng, e hlahisoang ka metsotsoana, bakeng sa ho bala data ho tswa ho disk. Avg performance counter average value. Disk sec/Read ha ea lokela ho feta 10 milliseconds. Boleng bo kaholimo ho komporo ea tšebetso Avg. Disk sec/Read ha ea lokela ho feta 50 milliseconds.Zabbix: perf_counter[LogicalDisk(_Total)Avg. Disk sec/Read], hape ho bohlokoa ho boloka tlaleho ea disk e lakatsehang, mohlala joalo ka sena: perf_counter[LogicalDisk(C:)Avg. Disk sec/Bala]
Hlahisa mehlala:
{NODE_NAME:perf_counter[LogicalDisk(_Total)Avg. Disk sec/Read].last()}>0.005, boemo bo holimo
и
{NODE_NAME:perf_counter[LogicalDisk(_Total)Avg. Disk sec/Read].last()}>0.0025, boemo bo mahareng - Avg Disc sec/Ngola
E bonts'a kakaretso ea nako, e hlahisoang ka metsotsoana, bakeng sa ho ngola data ho disk. Avg performance counter average value. Disk sec/Ngola ha ea lokela ho feta 10 milliseconds. Boleng bo kaholimo ho komporo ea tšebetso Avg. Disk sec/Ngola ha ea lokela ho feta 50 milliseconds.Zabbix: perf_counter[LogicalDisk(_Total)Avg. Disk sec/Write], hape ke habohlokoa ho boloka tlaleho ea disk e lakatsehang, mohlala o kang ona: perf_counter[LogicalDisk(C:)Avg. Disk sec/Ngola]
Hlahisa mehlala:
{NODE_NAME:perf_counter[LogicalDisk(_Total)Avg. Disk sec/Ngola].last()}>0.005, boemo bo holimo
и
{NODE_NAME:perf_counter[LogicalDisk(_Total)Avg. Disk sec/Ngola].last()}>0.0025, boemo bo mahareng - Avg Disk Queue Length
Karolelano ea bolelele ba likopo ho disk. E bonts'a palo ea likopo tsa disk tse emetseng ho sebetsa ka nako e behiloeng. Letoto le sa feteng 2 bakeng sa disk e le 'ngoe e nkoa e le ntho e tloaelehileng. Haeba ho na le likopo tse fetang tse peli moleng, joale disk e ka 'na ea tlala haholo' me e sitoa ho sebetsana le likōpo tse kenang. U ka tseba hantle hore na ke ts'ebetso efe eo disk e ke keng ea khona ho e sebetsana le li-counter tsa Avg. Disk Bala Bolelele ba Queue le Avg. Disk Wright Queue Length (tatellano ea likopo tsa ho ngola).
Boleng ba boleng Disk Queue Length ha e lekanngoe, empa e baloa ho sebelisoa molao oa Little ho tsoa ho thuto ea lipalo ea ho koloka. Ho ea ka molao ona, palo ea likopo tse emetseng ho sebetsoa, ka karolelano, e lekana le makhetlo a mangata a likopo tse atolositsoeng ke nako ea kopo ea kopo. Tseo. molemong oa rona Avg. Disk Length Queue = (Disk Transfers/sec) * (Avg. Disk sec/Transfer).Avg. Disk Queue Length e fanoa e le e 'ngoe ea li-counters tse ka sehloohong bakeng sa ho khetholla mojaro ho disk subsystem, leha ho le joalo, ho e hlahloba ka ho lekaneng, hoa hlokahala ho emela ka nepo sebopeho sa' mele sa sistimi ea polokelo. Ka mohlala, bakeng sa hard drive e le 'ngoe boleng bo boholo ho feta 2 bo nkoa bo le bohlokoa,' me haeba disk e fumaneha ho RAID ea li-disk tse 4, joale u lokela ho tšoenyeha haeba boleng bo feta 4 * 2 = 8.
Zabbix: perf_counter[LogicalDisk(_Total)Avg. Disk Queue Length], hape ke habohlokoa ho boloka tlaleho ea disk e lakatsehang, mohlala o kang ona: perf_counter[LogicalDisk(C:)Avg. Bolelele ba Disk Queue]
- Avg Disc sec/Read
- memori
- Maqephe/metsotsoana
E bonts'a palo ea maqephe ao SQL Server e balileng ho tsoa ho disk kapa e ngotseng disk ho rarolla menyetla ea maqephe a memori a neng a sa kengoa ho RAM nakong ea phihlello. Boleng bona ke kakaretso ea Pages Input/sec le Pages Output/sec, hape e ela hloko paging (paging/swaping) ea cache ea sistimi bakeng sa ho fihlella lifaele tsa data tsa ts'ebeliso. Ntle le moo, sena se kenyelletsa ho paging ea lifaele tse sa bolokoang tse kentsoeng ka kotloloho mohopolong. Ena ke k'haonte ea mantlha e lokelang ho beoa leihlo haeba u na le ts'ebeliso e phahameng ea memori mme e amahanngoa le paging e feteletseng. Khaonta ena e tšoaea boholo ba ho fapanyetsana 'me boleng ba eona bo tloaelehileng (eseng tlhoro) bo lokela ho ba haufi le zero. Keketseho ea phapanyetsano e bonts'a tlhoko ea ho eketsa RAM kapa ho fokotsa palo ea mananeo a kopo a sebetsang ho seva.Zabbix: perf_counter[MemoryPages/sec]
Hlahisa mohlala:
{NODE_NAME:perf_counter[MemoryPages/sec].min(5m)}>1000, lintlha tsa boemo - Liphoso Tsa Leqephe/metsotsoana
Ena ke boleng ba counter fault ea leqephe. Phoso ea leqephe e etsahala ha ts'ebetso e bua ka leqephe la memori le leng sieo sehlopheng se sebetsang sa RAM. K'hamphani ena e ela hloko liphoso tsa maqephe a mabeli tse hlokang phihlello ea disk, le tse bakoang ke hore leqephe le ka ntle ho ts'ebetso e behiloeng ho RAM. Boholo ba li-processor li ka sebetsana le liphoso tsa leqephe la Mofuta oa XNUMX ntle le tieho e kholo. Leha ho le joalo, ho sebetsana le liphoso tsa leqephe la mofuta oa XNUMX tse hlokang phihlello ea disk ho ka baka tieho e kholo.
Zabbix: perf_counter[MemoryPage Faults/sec]
Hlahisa mohlala:
{NODE_NAME:perf_counter[MemoryPage Faults/sec].min(5m)}>1000, lintlha tsa boemo - Li-Byte tse fumanehang
E boloka tlaleho ea palo ea memori e fumanehang ka li-byte bakeng sa lits'ebetso tse fapaneng ho sebetsa. Lipalo tse tlase li bontša mohopolo o tlase. Tharollo ke ho eketsa mohopolo. Metara ena hangata e lokela ho lula e le ka holimo ho 5000 kV.
Hoa utloahala ho beha moeli oa li-Mbytes tse fumanehang ka letsoho ka mabaka a latelang:•50% memori ea mahala e fumaneha = E ntle haholo
• 25% e fumanehang mohopolo = E hloka tlhokomelo
• 10% mahala = Mathata a ka bang teng
• Ka tlase ho 5% memori e fumanehang = E bohlokoa bakeng sa lebelo, o hloka ho kenella.
Zabbix: perf_counter[MemoryAvailable Byte]
- Maqephe/metsotsoana
- Motlakase (Kakaretso): % Nako ea Motlakase
K'hamphani ena e bonts'a liperesente tsa nako eo processor e neng e tšoarehile ka eona ho etsa ts'ebetso bakeng sa likhoele tse sa sebetseng. Boleng bona bo ka nkoa e le karolo ea nako e sebelisoang ho etsa mosebetsi o molemo. processor e 'ngoe le e' ngoe e ka abeloa khoele e sa sebetseng, e jang li-processor tse sa hlahiseng litholoana tse sa sebelisoeng ke likhoele tse ling. K'haonte ena e khetholloa ka litlhōrō tse khutšoanyane tse ka fihlang 100 lekholong. Leha ho le joalo, haeba ho na le linako tse atolositsoeng moo ts'ebeliso ea processor e kaholimo ho liperesente tse 80, sistimi e tla sebetsa hantle haholo ho sebelisa li-processor tse ngata.Zabbix: perf_counter[Processor(_Total)% Nako ea processor], mona e ka boela ea hlahisoa ke mantlha
Hlahisa mohlala:
{NODE_NAME:perf_counter[Processor(_Total)% Nako ea Ho Sebetsa].min(5m)}>80, lintlha tsa boemo - Sehokelo sa Marang-rang (*): % Byte Total/sec
Palo eohle ea li-byte tse rometsoeng le tse amoheloang motsotsoana ka bophara. Ena ke sebopeho sa bandwidth (ka li-byte). Hoa hlokahala ho bapisa boleng ba counter ena le boholo ba bandwidth ea karete ea marang-rang. Ka kakaretso, k'hamphani ena ha ea lokela ho bonts'a tšebeliso e fetang 50% ea bandwidth ea adaptara ea marang-rang.
Zabbix: perf_counter[Network Interface(*)Bytes E Rometsoe/motsotsoana] - Seva ea MS SQL: Mekhoa ea ho fihlella
Sesebediswa sa Access Methods ho SQL Server se fana ka dibadi ho thusa ho latela phihlello ya data e utloahalang ka hara database. Phihlello ea 'mele ea maqephe a database ho disk e laoloa ho sebelisoa li-buffer manager counters. Ho beha leihlo mekhoa ea phihlello ea data sebakeng sa polokelo ea litaba ho thusa ho tseba hore na ts'ebetso ea lipotso e ka ntlafatsoa ka ho eketsa kapa ho fetola li-index, ho eketsa kapa ho tsamaisa likarolo, ho eketsa lifaele kapa lihlopha tsa lifaele, li-index tsa defragmenting, kapa ho fetola mongolo oa lipotso. Ntle le moo, o ka sebelisa li-counter tsa lintho tsa Access Methods ho lekola boholo ba data, li-index, le sebaka sa mahala sebakeng sa hau sa polokelo ea litaba, bokhoni ba ho beha leihlo le karohano bakeng sa mohlala o mong le o mong oa seva. Karohano e feteletseng ea index e ka fokotsa ts'ebetso haholo.- Ho arohana ha Maqephe/metsotsoana
Palo ea likhaohano tsa maqephe motsotsoana o entsoeng ka lebaka la ho tlala ha leqephe la index. Boleng bo phahameng ba metric ena e bolela hore ha o etsa ts'ebetso ea ho kenya le ho ntlafatsa ho data, SQL Server e tlameha ho etsa palo e kholo ea ts'ebetso ea lisebelisoa ho arola maqephe le ho isa karolo ea leqephe le teng sebakeng se secha. Liketso tse joalo li lokela ho qojoa neng kapa neng ha ho khoneha. U ka leka ho rarolla bothata ka litsela tse peli:
- theha index e kopantsoeng bakeng sa likholomo tse iketselitseng. Tabeng ena, lirekoto tse ncha li ke ke tsa kenngoa ka har'a maqephe a seng a ntse a sebelisoa ke data, empa li tla nka maqephe a macha ka tatellano;
- aha li-index ka ho eketsa boleng ba paramente ea Fillfactor. Khetho ena e u lumella ho boloka sebaka sa mahala maqepheng a index a tla sebelisoa ho amohela data e ncha, ntle le tlhoko ea ts'ebetso ea ho arola maqephe.
Zabbix: perf_counter["MSSQL$INSTANCE_NAME:Access MethodsPage Splits/sec",30]
Hlahisa mohlala: {NODE_NAME:perf_counter["MSSQL$INSTANCE_NAME:Access MethodsPage Splits/sec",30].last()}>{NODE_NAME:perf_counter["MSSQL$INSTANCE_NAME:SQL StatisticsBatch Requests/sec",30].last()} /5, boemo-boitsebiso - Litlhahlobo tse Felletseng/motsotsoana
Palo e sa lekanyetsoang ea likhakanyo tse felletseng motsotsoana. Ts'ebetso ena e kenyelletsa litlhahlobo tse kholo tsa tafole le li-index tse felletseng. Keketseho e tsitsitseng ea pontšo ena e ka 'na ea bontša ho senyeha ha tsamaiso (ho hloka li-index tse hlokahalang, ho arohana ha tsona ho matla, ho hlōleha ha optimizer ho sebelisa li-index tse teng, ho ba teng ha li-index tse sa sebelisoang). Leha ho le joalo, ke habohlokoa ho hlokomela hore ho hlahloba ka ho feletseng litafoleng tse nyenyane ha ho bonolo kamehla, hobane haeba u ka beha tafole eohle ho RAM, joale scan e feletseng e tla potlaka. Empa maemong a mangata, keketseho e tsitsitseng ea counter ena e tla bontša ho senyeha ha tsamaiso. Sena sohle se sebetsa feela bakeng sa litsamaiso tsa OLTP. Lits'ebetsong tsa OLAP, litlhahlobo tse felletseng li tloaelehile.
Zabbix: perf_counter["MSSQL$INSTANCE_NAME:Access MethodsFull Scans/sec",30]
- Ho arohana ha Maqephe/metsotsoana
- MS SQL Server: Buffer Manager
Ntho ea Buffer Manager e fana ka li-counters tse u thusang ho beha leihlo hore na SQL Server e sebelisa lisebelisoa tse latelang joang:
- memori ea ho boloka maqephe a data;
- li-counter tse behang leihlo I/O ea 'mele ha SQL Server e bala le ho ngola maqephe a polokelo ea litaba;
- katoloso ea letamo la buffer ho holisa cache ea buffer ka memori e potlakileng e sa fetoheng, joalo ka li-drive tse tiileng (SSD);
- Ho beha leihlo memori le li-counter tse sebelisoang ke SQL Server ho thusa ho fumana lintlha tse latelang;
- hore na ho na le mathata a bakoang ke ho hloka mohopolo oa 'mele. Haeba data e fumanehang khafetsa e ke ke ea bolokoa ka har'a cache, SQL Server e qobelloa ho e bala ho tsoa ho disk;
Na hoa khoneha ho ntlafatsa ts'ebetso ea lipotso ka ho eketsa palo ea memori kapa ho fana ka memori e eketsehileng ho cache data kapa ho boloka meaho ea kahare ea SQL Server?
- SQL Server e bala data hangata hakae ho disk. Ha ho bapisoa le lits'ebetso tse ling tse kang phihlello ea mohopolo, I/O ea 'mele e nka nako e telele ho phetheha. Ho fokotsa I/O ho ka ntlafatsa ts'ebetso ea lipotso.- Buffer Cache e otla seea-le-moea
E bonts'a hore na data ea SQL Server e ka lekana hakae ka har'a cache buffer. Ha boleng bona bo phahame, ho molemo, hobane Hore SQL Server e fihlele maqephe a data ka nepo, e tlameha ho ba ka har'a "cache buffer", 'me ha hoa tlameha ho ba le ts'ebetso ea "input/output" (I/O). Haeba u bona ho theoha ho tsitsitseng ha boleng ba kakaretso ea k'haontareng ena, u lokela ho nahana ka ho eketsa RAM. Letšoao lena le lokela ho lula le le ka holimo ho 90% bakeng sa litsamaiso tsa OLTP le ka holimo ho 50% bakeng sa litsamaiso tsa OLAP.
Zabbix: perf_counter["MSSQL$INSTANCE_NAME:Buffer ManagerBuffer cache hit ratio",30]
Hlahisa mehlala: {NODE_NAME:perf_counter["MSSQL$INSTANCE_NAME:Buffer ManagerBuffer cache hit ratio",30].last()}<70, level-high
и
{NODE_NAME:perf_counter["MSSQL$INSTANCE_NAME:Buffer ManagerBuffer cache hit ratio",30].last()}<80, boemo bo mahareng - Leqephe tebello ea bophelo
E bontša hore na leqephe le tla lula le le mohopolong ka nako e kae ha le ntse le le teng. Haeba boleng bo ntse bo theoha, ho bolela hore sistimi e sebelisa hampe letamo la buffer. Ka hona, ts'ebetso ea memori e ka baka mathata a bakang ts'ebetso e fosahetseng. Ke habohlokoa ho hlokomela hore ha ho na pontšo ea bokahohle ka tlase eo motho a ka ahlolang ka ho hlaka hore tsamaiso e sebelisa hampe letamo la "buffer" (pontšo ea metsotsoana e 300 e siiloe ke nako ho tloha MS SQL Server 2012).
Zabbix: perf_counter["MSSQL$INSTANCE_NAME:Buffer ManagerPage tebello ea bophelo",30]
Hlahisa mohlala: {NODE_NAME:perf_counter["MSSQL$INSTANCE_NAME:Buffer ManagerPage tebello ea bophelo",30].last()}<5, boemo-boitsebiso
- Buffer Cache e otla seea-le-moea
- Seva ea MS SQL: Lipalopalo Kakaretso
Sesebediswa sa Dipalopalo se Akaretsang ho SQL Server se fana ka dibadi tse o dumellang ho hlokomela tshebetso ya seva kaofela, jwalo ka palo ya dikgokelo tsa nako e le nngwe le palo ya basebedisi ka motsotsoana ba hokelang kapa ba kgaolang khomphutha e sebedisang mohlala wa SQL Server. Metrics ena e bohlokoa lits'ebetsong tse kholo tsa transaction process (OLTP) moo palo e kholo ea bareki e lulang e hokela le ho itokolla mohlaleng oa SQL Server.- Ts'ebetso e thibetsoe
Palo ea lits'ebetso tse thibetsoeng hajoale.
Zabbix: perf_counter["MSSQL$INSTANCE_NAME:General StatisticsProcesses blocked",30]
Hlahisa mohlala: ({NODE_NAME:perf_counter["MSSQL$INSTANCE_NAME:General StatisticsProcesses blocked",30].min(2m,0)}>=0)
le ({NODE_NAME:perf_counter["MSSQL$INSTANCE_NAME:General StatisticsProcesses blocked",30].time(0)}>=50000)
le ({NODE_NAME:perf_counter["MSSQL$INSTANCE_NAME:General StatisticsProcesses blocked",30].time(0)}<=230000), boemo ba tlhahisoleseding (mona ho na le thibelo ea pontšo ho tloha ka 05:00 ho isa ho 23:00) - Lihokelo tsa basebelisi
Palo ea basebelisi ba hajoale ba hokahaneng le SQL Server.
Zabbix: perf_counter["MSSQL$INSTANCE_NAME:Lipalopalo tse Akaretsang tsa Khokahano ea Basebelisi",30]
- Ts'ebetso e thibetsoe
- Seva ea MS SQL: Liloko
Ntho ea Locks ho Microsoft SQL Server e fana ka leseli mabapi le linotlolo tsa SQL Server tse fumanoeng bakeng sa mefuta ea lisebelisoa ka bomong. Liloko li fanoa ho lisebelisoa tsa SQL Server, tse kang mela e baloang kapa e fetotsoeng ke transaction, ho thibela mekhoa e mengata ea ho sebelisa lisebelisoa ka nako e le 'ngoe. Ka mohlala, haeba senotlolo sa (X) se fumanwa ka kgwebisano ka tatellano ya tafole, ha ho transaction e nngwe e ka fetolang mola oo ho fihlela senotlolo se lokollwa. Ho fokotsa ts'ebeliso ea liloko ho eketsa concurrency, e ka ntlafatsang ts'ebetso ka kakaretso. Maemo a 'maloa a ntho ea Locks e ka lateloa ka nako e le' ngoe, 'me e' ngoe le e 'ngoe e tla emela senotlolo sa mofuta o fapaneng oa lisebelisoa.- Kakaretso ea Nako ea ho Leta (ms)
Kakaretso ea nako ea ho ema (ka milliseconds) bakeng sa likopo tsohle tsa senotlolo tse hlokang ho ema. Khaonta ena e bonts'a hore na, ka kakaretso, lits'ebetso tsa basebelisi li tlameha ho ema nako e kae moleng ho fumana senotlolo mohloding. Boleng bo lumelletsoeng ba k'haontareng ena ka botlalo bo ipapisitse le mosebetsi oa hau; ho thata ho fumana boleng bofe kapa bofe ba karolelano ea lits'ebetso tsohle. Haeba k'haonte ena e phahame haholo, e ka bontša mathata a ho notlela polokelong ea hau.
Zabbix: perf_counter["MSSQL$INSTANCE_NAME:Liloko(_Total)Kakaretso ea Nako ea ho Leta (ms)",30]
Hlahisa mohlala: {NODE_NAME:perf_counter["MSSQL$INSTANCE_NAME:Locks(_Total)Average) Nako ea ho Leta (ms)",30].last()}>=500, lintlha tsa boemo - Lock Wait Time (ms)
Kakaretso ea nako ea ho ema ho notlela (ka milliseconds) motsotsong o fetileng.
Zabbix: perf_counter["MSSQL$INSTANCE_NAME:Locks(_Total)Lock Wait Time (ms)",30] - Lock Waits/sec
Palo ea makhetlo a motsotsoana oa ho qetela ao khoele e ileng ea tlameha ho ema ka lebaka la kopo ea senotlolo.
Zabbix: perf_counter["MSSQL$INSTANCE_NAME:Locks(_Total)Lock Waits/sec",30] - Lock Timeouts/sec
Palo ea makhetlo ao senotlolo se ke keng sa fumanoa ke robin e chitja. The SQL Server spin counter configuration parameter value e lekanya palo ea makhetlo ao khoele e ka ohlang pele e tima 'me khoele e sa sebetse.
Zabbix: perf_counter["MSSQL$INSTANCE_NAME:Locks(_Total)Lock Timeouts/motsotsoana",30]
Hlahisa mohlala: {NODE_NAME:perf_counter["MSSQL$INSTANCE_NAME:Locks(_Total)Locks(_Total)Lock Timeouts/sec",30].last()}>1000, lintlha tsa boemo - Notlela Likopo/mots
Palo ea likopo motsotsoana oa mofuta o boletsoeng oa senotlolo.
Zabbix: perf_counter["MSSQL$INSTANCE_NAME:Locks(_Total)Lock Requests/sec",30]
Hlahisa mohlala: {NODE_NAME:perf_counter["MSSQL$INSTANCE_NAME:Locks(_Total)Lock Requests/sec",30].last()}>500000, lintlha tsa boemo - Nomoro ea Notlolo ea Li-Deadlocks/sec
Palo ea likopo tsa senotlolo ka motsotsoana tse etsang hore ho be le thipa. Ho ba teng ha li-deadlocks ho bontša lipotso tse entsoeng hampe tse thibelang lisebelisoa tse arolelanoang.
Zabbix: perf_counter["MSSQL$INSTANCE_NAME:Nomoro ea Deadlocks/sec",30]
Hlahisa mohlala: {NODE_NAME:perf_counter["MSSQL$INSTANCE_NAME:Locks(_Total)Nomoro ea Deadlocks/sec",30].last()}>1, boemo bo holimo
- Kakaretso ea Nako ea ho Leta (ms)
- Seva ea MS SQL: Motsamaisi oa Memori
Sesebediswa sa Memory Manager ho Microsoft SQL Server se fana ka dibadi ho hlokomela tshebediso ya memori ka bophara. Ho beha leihlo tšebeliso ea memori ea seva kaofela ho lekola tšebetso ea mosebelisi le ts'ebeliso ea lisebelisoa ho ka thusa ho tseba mathata a ts'ebetso. Tlhokomelo ea memori e sebelisoang ke mohlala oa SQL Server e ka thusa ho tseba:
- hore na ho na le khaello ea mohopolo o sa lekaneng oa ho boloka data e sebelisoang khafetsa ka har'a cache. Haeba ho se na memori e lekaneng, SQL Server e tlameha ho lata data ho disk;
- Hore na ts'ebetso ea lipotso e ka ntlafala haeba memori e kentsoe kapa palo ea memori e fumanehang bakeng sa data ea caching kapa meaho ea kahare ea SQL Server e ekelitsoe.- Lithuso tsa Memori li Ikhethile
E bonts'a palo eohle ea lits'ebetso tse fumaneng mohopolo oa sebaka sa mosebetsi ka katleho. Haeba letšoao le theoha butle-butle, hoa hlokahala ho eketsa RAM.
Zabbix: perf_counter["MSSQL$INSTANCE_NAME:Memory ManagerMemory Grants Outstanding",30] - Memory Grants E ntse e Letetse
E bonts'a palo eohle ea lits'ebetso tse emetseng ho abeloa memori e sebetsang. Ka kholo e tsitsitseng ea letšoao, hoa hlokahala ho eketsa RAM.
Zabbix: perf_counter["MSSQL$INSTANCE_NAME:Memory ManagerMemory Grants Pending",30]
- Lithuso tsa Memori li Ikhethile
- Seva ea MS SQL: Lipalopalo
Ntho ea Lipalopalo ho Microsoft SQL Server e fana ka li-counters ho beha leihlo pokello le mefuta ea lipotso tse romelloang mohlala oa SQL Server. Ho beha leihlo palo ea lipotso tse bokelletsoeng le tse bokelletsoeng le palo ea lihlopha tse amohetsoeng ke mohlala oa SQL Server e fana ka leseli la hore na SQL Server e etsa lipotso tsa mosebelisi kapele hakae le hore na optimizer ea lipotso e li sebetsa joang ka nepo.- Likopo tsa Batch/metsotsoana
Palo ea lipakete tsa litaelo tsa Transact-SQL tse amoheloang motsotsoana. Lipalopalo tsena li angoa ke mefokolo efe kapa efe (I/O, palo ea basebelisi, boholo ba cache, ho rarahana ha lipotso, joalo-joalo). Palo e phahameng ea likopo tsa liphutheloana e bonts'a tlhahiso e phahameng.
Zabbix: perf_counter["MSSQL$INSTANCE_NAME:SQL StatisticsBatch Requests/sec",30]
- Likopo tsa Batch/metsotsoana
Ntle le tse ka holimo, o ka boela oa lokisa likarolo tse ling tsa data (hammoho le ho iketsetsa lintho tse susumetsang ka litemoso tse latelang).
1) palo ea sebaka sa mahala sa disk
2) boholo ba lifaele tsa data ea database le li-log
joalo-joalo.
Leha ho le joalo, matšoao ana kaofela ha a bontše bothata ba lipotso tsa nako ea sebele.
Ho etsa sena, o hloka ho iketsetsa li-counters tse khethehileng.
Ka lebaka la mabaka a lekunutu, nke ke ka fana ka mehlala ea libali tse joalo. Ho feta moo, li hlophisitsoe ka mokhoa o ikhethileng bakeng sa sistimi e ngoe le e ngoe. Empa kea hlokomela hore bakeng sa litsamaiso tse kang 1C, NAV le CRM, li-counters tse khethehileng li ka etsoa hammoho le bahlahisi ba amehang.
Ke tla fana ka mohlala oa ho theha letšoao le akaretsang le bontšang hore na ho na le likopo tse kae tse ntseng li etsoa le hore na ke likopo tse kae tse emetseng (tse emisitsoeng kapa tse thibetsoeng) sebakeng se seng le se seng ka nako.
Ho etsa sena, o hloka ho etsa mokhoa o bolokiloeng:
khoutu
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
Ka mor'a moo, u lokela ho ea foldareng moo Zabbix e leng teng (zabbixconfuserparams.d) 'me u thehe lifaele tse 2 ka katoloso ea ps1 (PowerShell) ebe u ngola likhoutu tse latelang ho e' ngoe le e 'ngoe ea tsona:
Khoutu ea ho botsa lipotso
$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;
Khoutu ea likopo tse ntseng li emetse
$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;
Hona joale o hloka ho etsa faele e nang le li-parameter tsa mosebedisi le .conf extension (kapa eketsa mela ho faele e teng ea mosebedisi, haeba e entsoe pejana) ebe o kenya mela e latelang:
UserParameter=PARAMETER_NAME_NUMBER_of_QUERIES EXECUTED,powershell -NoProfile -ExecutionPolicy Bypass -File FULL_PATHzabbixconfuserparams.dFILE_NAME_FOR_EXECUTED_QUERYES.ps1
UserParameter=PARAMETER_NAME_NUMBER_WAITING_REQUESTS,powershell -NoProfile -ExecutionPolicy Bypass -File FULL_PATHzabbixconfuserparams.dFILE_NAME_FOR_WAITING_REQUESTS.ps1
Ka mor'a sena, boloka faele ea .conf 'me u qale hape moemeli oa Zabbix.
Kamora sena, re eketsa lintlha tse peli tse ncha ho Zabbix (tabeng ena, mabitso le senotlolo lia tšoana):
PARAMETER_NAME_NUMBER OF_REQUESTS TSE ETSANG
PARAMETER_NAME_NUMBER OF_WAITING_REQUESTS
Hona joale o ka etsa li-graph le lintho tse susumetsang bakeng sa lintho tse iketselitsoeng tsa data.
Haeba palo ea likopo tse ntseng li emetse e eketseha haholo, potso e latelang e ka bonts'a likopo tsohle tse ntseng li tsoela pele le tse ntseng li emetse ka nako e fanoeng ka lintlha tsa hore na kopo e etsoa hokae le tlas'a hore na kopo e etsoa hokae, mongolo le moralo oa potso, hammoho le lintlha tse ling:
khoutu
/*Активные, готовые к выполнению и ожидающие запросы, а также те, что явно блокируют другие сеансы*/
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);
E re ke u hopotse hape hore ho latela lipalo-palo tse bokelletsoeng u ka fumana lipotso tse thata ka ho fetisisa:
khoutu
/*
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
U ka boela ua ngolla MySQL. Ho etsa sena o hloka ho kenya ebe u ngola khoutu tjena:
Khoutu ea likopo tse ntseng li emetse
#Задаем переменные для подключение к 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;
sephetho
Sengoliloeng sena se shebile mohlala oa lisebelisoa tsa ts'ebetso (lintho tsa data) ho Zabbix. Mokhoa ona o lumella batsamaisi ho tsebisoa ka mathata a fapaneng ka nako ea nnete kapa kamora nako e itseng e itseng. Ka hona, mokhoa ona o re lumella ho fokotsa ho hlaha ha bothata bo boima nakong e tlang le ho emisa ts'ebetso ea DBMS le seva, e leng eona e sireletsang tlhahiso ho thibela mekhoa ea mosebetsi.
Sehlooho se fetileng:
Lisebelisoa:
»
»
»
»
»
»
»
»
»
»
Source: www.habr.com
