Inġinier - tradott mil-Latin - ispirat.
Inġinier jista 'jagħmel kull ħaġa. (c) R. Diżil.
Epigrafi.
Jew storja dwar għaliex amministratur tad-database jeħtieġ li jiftakar il-passat tal-ipprogrammar tiegħu.
Daħla
L-ismijiet kollha ġew mibdula. Il-kumbinazzjonijiet huma każwali. Il-materjal jirrappreżenta biss l-opinjoni personali tal-awtur.
Ċaħda ta' garanziji: Is-serje ppjanata ta' artikoli mhux se jkun fiha deskrizzjoni dettaljata u preċiża tat-tabelli u l-iskripts użati. Il-materjali ma jistgħux jintużaw immedjatament "KIF INHI".
L-ewwelnett, minħabba l-volum kbir ta 'materjal,
it-tieni, minħabba r-relazzjoni mill-qrib mal-bażi tal-produzzjoni ta 'klijent reali.
Għalhekk, l-artikoli se jkun fihom biss ideat u deskrizzjonijiet fl-aktar forma ġenerali.
Forsi fil-futur is-sistema se tikber sal-livell li tiġi stazzjonata fuq GitHub, jew forsi le. Il-ħin se juri.
Il-bidu tal-istorja - "
Dak li ġara bħala riżultat, fl-aktar termini ġenerali - "
Għaliex għandi bżonn dan kollu?
Ukoll, l-ewwelnett, biex ma ninsewx, niftakru l-jiem glorjużi fl-irtirar.
It-tieni nett, biex jiġi sistematizzat dak li nkiteb. Għax kultant nibda nħawwad u ninsa ċerti partijiet.
Ukoll, u l-iktar ħaġa importanti hija li tista 'tkun utli għal xi ħadd u tgħinu jevitaw li jivvintaw mill-ġdid ir-rota u ma jiġbrux rake. Fi kliem ieħor, ittejjeb il-karma tiegħek (mhux dik ta’ Khabrov). Għax l-iktar ħaġa ta’ valur f’din id-dinja huma l-ideat. Il-ħaġa prinċipali hija li ssib idea. Iżda ddawwar idea f'realtà hija kwistjoni purament teknika.
Mela, ejja nibdew, ftit ftit...
Formulazzjoni tal-problema.
Disponibbli:
Database PostgreSQL(10.5), tip ta 'tagħbija mħallta (OLTP + DSS), tagħbija medja ħafifa, li tinsab fis-sħaba tal-AWS.
M'hemm l-ebda monitoraġġ tad-database; il-monitoraġġ tal-infrastruttura huwa pprovdut fil-forma ta 'għodod AWS standard f'konfigurazzjoni minima.
Huwa meħtieġ:
Tissorvelja l-prestazzjoni u l-istatus tad-database, sib u jkollok informazzjoni inizjali għall-ottimizzazzjoni tal-mistoqsijiet tad-database tqal.
Introduzzjoni qasira jew analiżi ta 'għażliet ta' soluzzjoni
Biex nibdew, ejja nippruvaw nanalizzaw l-għażliet biex issolvi l-problema mil-lat ta 'analiżi komparattiva tal-benefiċċji u l-iżvantaġġi għall-inġinier, u ħalli dawk li huma intitolati għaliha skont l-iskeda tal-persunal jittrattaw il-benefiċċji u telf ta' ġestjoni.
Għażla 1 - "Ħidma fuq talba"
Inħallu kollox kif inhu. Jekk il-klijent ma jkunx sodisfatt b'xi ħaġa fil-funzjonalità, il-prestazzjoni tad-database jew l-applikazzjoni, huwa jinnotifika lill-inġiniera tad-DBA permezz ta 'e-mail jew billi joħloq inċident fit-trej tal-biljetti.
L-inġinier, wara li jkun irċieva n-notifika, jifhem il-problema, joffri soluzzjoni jew ipoġġi l-problema fuq il-back burner, bit-tama li kollox isolvi ruħu, u xorta waħda, kollox dalwaqt jintesa.
Gingerbread u donuts, tbenġil u ħotobGingerbread u donuts:
1. M'hemmx għalfejn tagħmel xi ħaġa żejda.
2. Dejjem hemm l-opportunità li tagħmel l-iskużi u tħaffef.
3. Ħafna ħin li tista 'tqatta' fid-diskrezzjoni tiegħek.
Tbenġil u ħotob:
1. Illum jew għada, il-klijent jaħseb dwar l-essenza tal-eżistenza u l-ġustizzja universali f'din id-dinja u għal darb'oħra jistaqsi lilu nnifsu l-mistoqsija - għaliex qed inħallashom il-flus tiegħi? Il-konsegwenza hija dejjem l-istess - l-unika mistoqsija hija meta l-klijent se jiddejjaq u jxejjen addiju. U l-alimentatriċi se jkun vojt. Huwa imdejjaq.
2. Żvilupp ta 'inġinier - żero.
3. Diffikultajiet fl-ippjanar tax-xogħol u t-tagħbija
Għażla 2- "Żfin bit-tamburini, fwar u tlibbes iż-żraben"
Paragrafu 1-Għaliex għandna bżonn sistema ta 'monitoraġġ, aħna se nirċievu kollox b'talbiet. Aħna nħaddmu mazz ta 'kull xorta ta' mistoqsijiet lid-dizzjunarju tad-dejta u fehmiet dinamiċi, nixgħel kull xorta ta 'counters, inpoġġu kollox f'tabelli, u perjodikament nanalizzaw listi u tabelli. Bħala riżultat, għandna graffs sbieħ jew mhux daqshekk sbieħ, tabelli, rapporti. Il-ħaġa prinċipali hija li jkollok aktar, aktar.
Paragrafu 2-Aħna niġġeneraw attività u nniedu l-analiżi ta 'dan kollu.
Paragrafu 3-Qed nippreparaw ċertu dokument, insejħu dan id-dokument sempliċement - "kif għandna nwaqqfu database."
Paragrafu 4-Il-klijent, jara dan kollu Splendor ta 'grafiċi u numri, huwa fi childish, kunfidenza naive - issa kollox se jaħdem għalina, dalwaqt. U, huwa faċilment u bla tbatija jifred mir-riżorsi finanzjarji tiegħu. Il-ġestjoni hija wkoll kunfidenti li l-inġiniera tagħna jaħdmu tajjeb. Tagħbija fil-massimu.
Paragrafu 5-Irrepeti l-Pass 1 regolarment.
Gingerbread u donuts, tbenġil u ħotobGingerbread u donuts:
1. Il-ħajja tal-maniġers u l-inġiniera hija sempliċi, prevedibbli u mimlija b'attività. Kollox huwa buzzing, kulħadd huwa okkupat.
2. Il-ħajja tal-klijent lanqas mhix ħażina - huwa dejjem ċert li jeħtieġ biss li jkun ftit paċenzja u kollox se jirnexxi. Mhux qed titjieb, ukoll, id-dinja hija inġusta, fil-ħajja li jmiss tkun xortik tajba.
Tbenġil u ħotob:
1. Illum jew għada, se jkun hemm fornitur aktar mgħaġġel ta 'servizz simili li se jagħmel l-istess ħaġa, iżda ftit irħas. U jekk ir-riżultat huwa l-istess, għaliex tħallas aktar. Li jerġa 'jwassal għall-għajbien tal-feeder.
2. Huwa boring. Kemm hi boring kull attività bla sens.
3. Bħal fil-verżjoni preċedenti, m'hemm l-ebda żvilupp. Iżda għal inġinier, l-iżvantaġġ huwa li, b'differenza mill-ewwel għażla, għandek bżonn tiġġenera kontinwament IBD. U dan jieħu ż-żmien. Li tista’ tonfoq għall-benefiċċju tal-maħbub tiegħek. Għax ma tistax tieħu ħsiebek, ħadd ma jagħti kas minnek.
Għażla 3 - M'għandekx bżonn li tivvinta rota, trid biss tixtriha u tirkebha.
Mhux ta’ b’xejn li inġiniera minn kumpaniji oħra jieklu pizza bil-birra (oh, il-ġranet tal-glorja ta’ San Pietruburgu fis-snin 90). Ejja nużaw sistemi ta 'monitoraġġ li huma magħmula, debugged u jaħdmu, u ġeneralment jibbenefikaw (ukoll, għall-inqas għall-ħallieqa tagħhom).
Gingerbread u donuts, tbenġil u ħotobGingerbread u donuts:
1. M'hemmx għalfejn taħli ħin biex toħroġ b'xi ħaġa li diġà ġiet ivvintata. Ħudha u użaha.
2. Is-sistemi ta' monitoraġġ mhumiex miktuba minn iblah u huma, ovvjament, utli.
3. Is-sistemi ta 'monitoraġġ tax-xogħol normalment jipprovdu informazzjoni ffiltrata utli.
Tbenġil u ħotob:
1. L-inġinier f'dan il-każ mhuwiex inġinier, iżda biss utent tal-prodott ta 'xi ħadd ieħor jew utent.
2. Il-klijent għandu jkun konvint mill-ħtieġa li jixtri xi ħaġa li, b'mod ġenerali, ma jridx jifhem, u m'għandux, u b'mod ġenerali l-baġit għas-sena ġie approvat u mhux se jinbidel. Imbagħad għandek bżonn talloka riżors separat u tikkonfiguraha għal sistema speċifika. Dawk. l-ewwel trid tħallas, tħallas u terġa' tħallas. U l-klijent huwa stingy. Din hija n-norma ta’ din il-ħajja.
X'għandek tagħmel - Chernyshevsky? Il-mistoqsija tiegħek hija pertinenti ħafna. (Ma)
F'dan il-każ partikolari u s-sitwazzjoni attwali, tista 'tagħmel dan ftit differenti - ejja nagħmlu s-sistema ta 'monitoraġġ tagħna stess.
Ukoll, mhux sistema, ovvjament, fis-sens sħiħ tal-kelma, li hija qawwija wisq u presumptuous, iżda għall-inqas b'xi mod tagħmel il-kompitu tiegħek aktar faċli u tiġbor aktar informazzjoni biex issolvi l-inċidenti tal-prestazzjoni. Sabiex ma ssibx ruħek f'sitwazzjoni - "mur hemm, ma nafx fejn, sib xi ħaġa, ma nafx xiex."
X'inhuma l-vantaġġi u l-iżvantaġġi ta 'din l-għażla:
Pros:
1. Dan huwa interessanti. Tajjeb, għall-inqas huwa aktar interessanti mill-kostanti "itnaqqas il-fajl tad-dejta, ibiddel l-ispazju tat-tabella, eċċ."
2. Dawn huma ħiliet ġodda u żvilupp ġdid. Li, illum jew għada, jagħtik gingerbread u donuts mistħoqqa.
Cons:
1. Ikollok taħdem. Aħdem iebes.
2. Ikollok tispjega regolarment it-tifsira u l-prospetti tal-attivitajiet kollha.
3. Xi ħaġa trid tiġi sagrifikata, għax l-unika riżorsa disponibbli għal inġinier - iż-żmien - hija limitata mill-Univers.
4. L-agħar u l-aktar ħaġa spjaċevoli - ir-riżultat jista 'jkun bullshit bħal "Mhux ġurdien, mhux Żrinġ, iżda annimal mhux magħruf."
Min ma jieħux riskji ma jixrobx xampanja.
Allura - jibda l-gost.
Idea ġenerali - skematikament
(Illustrazzjoni meħuda mill-artiklu «
Spjegazzjoni:
- L-estensjoni standard PostgreSQL "pg_stat_statements" hija installata fid-database fil-mira.
- Fid-database tal-monitoraġġ, noħolqu sett ta' tabelli tas-servizz għall-ħażna tal-istorja pg_stat_statements fl-istadju inizjali u għat-twaqqif ta' metriċi u monitoraġġ fil-futur
- Fuq l-host ta 'monitoraġġ, noħolqu sett ta' skripts bash, inklużi dawk għall-ġenerazzjoni ta 'inċidenti fis-sistema tal-biljetti.
Imwejjed tas-servizz
L-ewwel, ERD skematiku simplifikat, dak li ġara fl-aħħar:
Deskrizzjoni qasira tat-tabelliendpoint — host, punt ta' konnessjoni mal-istanza
database - parametri tad-database
pg_stat_history - tabella storika għall-ħażna ta' snapshots temporanji tal-veduta pg_stat_statements tad-database fil-mira
metric_glossary - dizzjunarju tal-metriċi tal-prestazzjoni
metric_config — konfigurazzjoni ta' metriċi individwali
metrika — metrika speċifika għat-talba li qed tiġi mmonitorjata
metric_alert_history - storja ta' twissijiet ta' prestazzjoni
log_query — tabella ta’ servizz għall-ħażna ta’ rekords parsed minn fajl log PostgreSQL imniżżel minn AWS
linja bażi — parametri tal-perjodi ta' żmien użati bħala l-bażi
punt ta ’kontroll — konfigurazzjoni tal-metriċi għall-iċċekkjar tal-istatus tad-database
checkpoint_alert_history — storja ta' twissija tal-metriċi tal-kontroll tas-saħħa tad-database
pg_stat_db_queries — tabella ta' servizz ta' talbiet attivi
activity_log — tabella tas-servizz tar-reġistru tal-attività
trap_oid — tabella tas-servizz tal-konfigurazzjoni tan-nases
Stadju 1 - iġbor informazzjoni statistika dwar il-prestazzjoni u tirċievi rapporti
Tabella tintuża biex tinħażen informazzjoni statistika pg_stat_history
struttura tat-tabella pg_stat_history
Tabella "public.pg_stat_history" Kolonna | Tip | Modifikaturi---------------------+-------------------------- - -+----------------------------------------- id | numru sħiħ | mhux null default nextval('pg_stat_history_id_seq'::regclass) snapshot_timestamp | timestamp mingħajr żona tal-ħin | database_id | numru sħiħ | dbid | oid | userid | oid | queryid | bigint | mistoqsija | test | sejħiet | bigint | ħin_total | preċiżjoni doppja | min_time | preċiżjoni doppja | max_time | preċiżjoni doppja | mean_time | preċiżjoni doppja | stddev_time | preċiżjoni doppja | ringieli | bigint | shared_blks_hit | bigint | shared_blks_read | bigint | shared_blks_dirtied | bigint | shared_blks_written | bigint | local_blks_hit | bigint | local_blks_read | bigint | local_blks_dirtied | bigint | local_blks_written | bigint | temp_blks_read | bigint | temp_blks_written | bigint | blk_read_time | preċiżjoni doppja | blk_write_time | preċiżjoni doppja | baseline_id | numru sħiħ | Indiċijiet: "pg_stat_history_pkey" EWLENIN PRIMARJA, btree (id) "database_idx" btree (database_id) "queryid_idx" btree (queryid) "snapshot_timestamp_idx" btree (snapshot_timestamp) Foreign-key-keybase FOREIGN_Database constraints: database (id ) FUQ TĦASSAR CASCADE
Kif tistgħu taraw, it-tabella hija biss id-dejta tal-vista kumulattiva pg_stat_statements fid-database fil-mira.
L-użu ta 'din it-tabella huwa sempliċi ħafna
pg_stat_history se tirrappreżenta statistika akkumulata tal-eżekuzzjoni tal-mistoqsija għal kull siegħa. Fil-bidu ta 'kull siegħa, wara li timla t-tabella, statistika pg_stat_statements reset ma pg_stat_statements_reset().
Nota: L-istatistika tinġabar għal mistoqsijiet b'tul ta' eżekuzzjoni ta' aktar minn sekonda.
Il-popolazzjoni tat-tabella pg_stat_history
--pg_stat_history.sql
CREATE OR REPLACE FUNCTION pg_stat_history( ) RETURNS boolean AS $$
DECLARE
endpoint_rec record ;
database_rec record ;
pg_stat_snapshot record ;
current_snapshot_timestamp timestamp without time zone;
BEGIN
current_snapshot_timestamp = date_trunc('minute',now());
FOR endpoint_rec IN SELECT * FROM endpoint
LOOP
FOR database_rec IN SELECT * FROM database WHERE endpoint_id = endpoint_rec.id
LOOP
RAISE NOTICE 'NEW SHAPSHOT IS CREATING';
--Connect to the target DB
EXECUTE 'SELECT dblink_connect(''LINK1'',''host='||endpoint_rec.host||' dbname='||database_rec.name||' user=USER password=PASSWORD '')';
RAISE NOTICE 'host % and dbname % ',endpoint_rec.host,database_rec.name;
RAISE NOTICE 'Creating snapshot of pg_stat_statements for database %',database_rec.name;
SELECT
*
INTO
pg_stat_snapshot
FROM dblink('LINK1',
'SELECT
dbid , SUM(calls),SUM(total_time),SUM(rows) ,SUM(shared_blks_hit) ,SUM(shared_blks_read) ,SUM(shared_blks_dirtied) ,SUM(shared_blks_written) ,
SUM(local_blks_hit) , SUM(local_blks_read) , SUM(local_blks_dirtied) , SUM(local_blks_written) , SUM(temp_blks_read) , SUM(temp_blks_written) , SUM(blk_read_time) , SUM(blk_write_time)
FROM pg_stat_statements WHERE dbid=(SELECT oid from pg_database where datname=current_database() )
GROUP BY dbid
'
)
AS t
( dbid oid , calls bigint ,
total_time double precision ,
rows bigint , shared_blks_hit bigint , shared_blks_read bigint ,shared_blks_dirtied bigint ,shared_blks_written bigint ,
local_blks_hit bigint ,local_blks_read bigint , local_blks_dirtied bigint ,local_blks_written bigint ,
temp_blks_read bigint ,temp_blks_written bigint ,
blk_read_time double precision , blk_write_time double precision
);
INSERT INTO pg_stat_history
(
snapshot_timestamp ,database_id ,
dbid , calls ,total_time ,
rows ,shared_blks_hit ,shared_blks_read ,shared_blks_dirtied ,shared_blks_written ,local_blks_hit ,
local_blks_read,local_blks_dirtied,local_blks_written,temp_blks_read,temp_blks_written,
blk_read_time, blk_write_time
)
VALUES
(
current_snapshot_timestamp ,
database_rec.id ,
pg_stat_snapshot.dbid ,pg_stat_snapshot.calls,
pg_stat_snapshot.total_time,
pg_stat_snapshot.rows ,pg_stat_snapshot.shared_blks_hit ,pg_stat_snapshot.shared_blks_read ,pg_stat_snapshot.shared_blks_dirtied ,pg_stat_snapshot.shared_blks_written ,
pg_stat_snapshot.local_blks_hit , pg_stat_snapshot.local_blks_read , pg_stat_snapshot.local_blks_dirtied , pg_stat_snapshot.local_blks_written ,
pg_stat_snapshot.temp_blks_read , pg_stat_snapshot.temp_blks_written , pg_stat_snapshot.blk_read_time , pg_stat_snapshot.blk_write_time
);
RAISE NOTICE 'Creating snapshot of pg_stat_statements for queries with min_time more than 1000ms';
FOR pg_stat_snapshot IN
--All queries with max_time greater than 1000 ms
SELECT
*
FROM dblink('LINK1',
'SELECT
dbid , userid ,queryid,query,calls,total_time,min_time ,max_time,mean_time, stddev_time ,rows ,shared_blks_hit ,
shared_blks_read ,shared_blks_dirtied ,shared_blks_written ,
local_blks_hit , local_blks_read , local_blks_dirtied ,
local_blks_written , temp_blks_read , temp_blks_written , blk_read_time ,
blk_write_time
FROM pg_stat_statements
WHERE dbid=(SELECT oid from pg_database where datname=current_database() AND min_time >= 1000 )
'
)
AS t
( dbid oid , userid oid , queryid bigint ,query text , calls bigint ,
total_time double precision ,min_time double precision ,max_time double precision , mean_time double precision , stddev_time double precision ,
rows bigint , shared_blks_hit bigint , shared_blks_read bigint ,shared_blks_dirtied bigint ,shared_blks_written bigint ,
local_blks_hit bigint ,local_blks_read bigint , local_blks_dirtied bigint ,local_blks_written bigint ,
temp_blks_read bigint ,temp_blks_written bigint ,
blk_read_time double precision , blk_write_time double precision
)
LOOP
INSERT INTO pg_stat_history
(
snapshot_timestamp ,database_id ,
dbid ,userid , queryid , query , calls ,total_time ,min_time ,max_time ,mean_time ,stddev_time ,
rows ,shared_blks_hit ,shared_blks_read ,shared_blks_dirtied ,shared_blks_written ,local_blks_hit ,
local_blks_read,local_blks_dirtied,local_blks_written,temp_blks_read,temp_blks_written,
blk_read_time, blk_write_time
)
VALUES
(
current_snapshot_timestamp ,
database_rec.id ,
pg_stat_snapshot.dbid ,pg_stat_snapshot.userid ,pg_stat_snapshot.queryid,pg_stat_snapshot.query,pg_stat_snapshot.calls,
pg_stat_snapshot.total_time,pg_stat_snapshot.min_time ,pg_stat_snapshot.max_time,pg_stat_snapshot.mean_time, pg_stat_snapshot.stddev_time ,
pg_stat_snapshot.rows ,pg_stat_snapshot.shared_blks_hit ,pg_stat_snapshot.shared_blks_read ,pg_stat_snapshot.shared_blks_dirtied ,pg_stat_snapshot.shared_blks_written ,
pg_stat_snapshot.local_blks_hit , pg_stat_snapshot.local_blks_read , pg_stat_snapshot.local_blks_dirtied , pg_stat_snapshot.local_blks_written ,
pg_stat_snapshot.temp_blks_read , pg_stat_snapshot.temp_blks_written , pg_stat_snapshot.blk_read_time , pg_stat_snapshot.blk_write_time
);
END LOOP;
PERFORM dblink_disconnect('LINK1');
END LOOP ;--FOR database_rec IN SELECT * FROM database WHERE endpoint_id = endpoint_rec.id
END LOOP;
RETURN TRUE;
END
$$ LANGUAGE plpgsql;
Bħala riżultat, wara xi perjodu ta 'żmien fit-tabella pg_stat_history se jkollna sett ta 'snapshots tal-kontenut tat-tabella pg_stat_statements database tal-mira.
Attwalment rappurtar
Billi tuża mistoqsijiet sempliċi, tista 'tikseb rapporti pjuttost utli u interessanti.
Dejta aggregata għal perjodu ta' żmien partikolari
Talba
SELECT
database_id ,
SUM(calls) AS calls ,SUM(total_time) AS total_time ,
SUM(rows) AS rows , SUM(shared_blks_hit) AS shared_blks_hit,
SUM(shared_blks_read) AS shared_blks_read ,
SUM(shared_blks_dirtied) AS shared_blks_dirtied,
SUM(shared_blks_written) AS shared_blks_written ,
SUM(local_blks_hit) AS local_blks_hit ,
SUM(local_blks_read) AS local_blks_read ,
SUM(local_blks_dirtied) AS local_blks_dirtied ,
SUM(local_blks_written) AS local_blks_written,
SUM(temp_blks_read) AS temp_blks_read,
SUM(temp_blks_written) temp_blks_written ,
SUM(blk_read_time) AS blk_read_time ,
SUM(blk_write_time) AS blk_write_time
FROM
pg_stat_history
WHERE
queryid IS NULL AND
database_id = DATABASE_ID AND
snapshot_timestamp BETWEEN BEGIN_TIMEPOINT AND END_TIMEPOINT
GROUP BY database_id ;
Ħin DB
to_char(intervall '1 millisecond' * pg_total_stat_history_rec.total_time, 'HH24:MI:SS.MS')
Ħin I/O
to_char(intervall '1 millisecond' * ( pg_total_stat_history_rec.blk_read_time + pg_total_stat_history_rec.blk_write_time ), 'HH24:MI:SS.MS')
TOP10 SQL minn total_time
Talba
SELECT
queryid ,
SUM(calls) AS calls ,
SUM(total_time) AS total_time
FROM
pg_stat_history
WHERE
queryid IS NOT NULL AND
database_id = DATABASE_ID AND
snapshot_timestamp BETWEEN BEGIN_TIMEPOINT AND END_TIMEPOINT
GROUP BY queryid
ORDER BY 3 DESC
LIMIT 10
------------------------------------------------- ----------------------------------- | TOP10 SQL B'ĦIN TOTALI TA' EŻEKUZZJONI | #| queryid| sejħiet| sejħiet %| ħin_total (ms) | dbtime % +----------+-----------+-----------+-----------+ ------ --------------------------+----------- | 1| 821760255| 2| .00001|00:03:23.141( 203141.681 ms.)| 5.42 | 2| 4152624390| 2| .00001|00:03:13.929( 193929.215 ms.)| 5.17 | 3| 1484454471| 4| .00001|00:02:09.129( 129129.057 ms.)| 3.44 | 4| 655729273| 1| .00000|00:02:01.869( 121869.981 ms.)| 3.25 | 5| 2460318461| 1| .00000|00:01:33.113( 93113.835 ms.)| 2.48 | 6| 2194493487| 4| .00001|00:00:17.377( 17377.868 ms.)| .46 | 7| 1053044345| 1| .00000|00:00:06.156( 6156.352 ms.)| .16 | 8| 3644780286| 1| .00000|00:00:01.063( 1063.830 ms.)| .03
TOP10 SQL bil-ħin totali I/O
Talba
SELECT
queryid ,
SUM(calls) AS calls ,
SUM(blk_read_time + blk_write_time) AS io_time
FROM
pg_stat_history
WHERE
queryid IS NOT NULL AND
database_id = DATABASE_ID AND
snapshot_timestamp BETWEEN BEGIN_TIMEPOINT AND END_TIMEPOINT
GROUP BY queryid
ORDER BY 3 DESC
LIMIT 10
------------------------------------------------- -------------------------------------- | TOP10 SQL B'ĦIN TOTALI I/O | #| queryid| sejħiet| sejħiet %| Ħin I/O (ms)|db Ħin I/O % +----+-----------+-----------+------ -----------+-------------------------------+----- ------ -- | 1| 4152624390| 2| .00001|00:08:31.616( 511616.592 ms.)| 31.06 | 2| 821760255| 2| .00001|00:08:27.099( 507099.036 ms.)| 30.78 | 3| 655729273| 1| .00000|00:05:02.209( 302209.137 ms.)| 18.35 | 4| 2460318461| 1| .00000|00:04:05.981( 245981.117 ms.)| 14.93 | 5| 1484454471| 4| .00001|00:00:39.144( 39144.221 ms.)| 2.38 | 6| 2194493487| 4| .00001|00:00:18.182( 18182.816 ms.)| 1.10 | 7| 1053044345| 1| .00000|00:00:16.611( 16611.722 ms.)| 1.01 | 8| 3644780286| 1| .00000|00:00:00.436( 436.205 ms.)| .03
TOP10 SQL mill-ħin massimu ta 'eżekuzzjoni
Talba
SELECT
id AS snapshotid ,
queryid ,
snapshot_timestamp ,
max_time
FROM
pg_stat_history
WHERE
queryid IS NOT NULL AND
database_id = DATABASE_ID AND
snapshot_timestamp BETWEEN BEGIN_TIMEPOINT AND END_TIMEPOINT
ORDER BY 4 DESC
LIMIT 10
------------------------------------------------- --------------------------------------- | TOP10 SQL B'ĦIN MAX TA' EŻEKUZZJONI | #| snapshot| snapshotID| queryid| max_time (ms) +----+------------------+-----------+--------- --+---------------------------------------- | 1| 05.04.2019/01/03 4169:655729273| 00| 02| 01.869:121869.981:2( 04.04.2019 ms.) | 17| 00/4153/821760255 00:01| 41.570| 101570.841| 3:04.04.2019:16( 00 ms.) | 4146| 821760255/00/01 41.570:101570.841| 4| 04.04.2019| 16:00:4144( 4152624390 ms.) | 00| 01/36.964/96964.607 5:04.04.2019| 17| 00| 4151:4152624390:00(01 ms.) | 36.964| 96964.607/6/05.04.2019 10:00| 4188| 1484454471| 00:01:33.452(93452.150 ms.) | 7| 04.04.2019/17/00 4150:2460318461| 00| 01| 33.113:93113.835:8( 04.04.2019 ms.) | 15| 00/4140/1484454471 00:00| 11.892| 11892.302| 9:04.04.2019:16(00 ms.) | 4145| 1484454471/00/00 11.892:11892.302| 10| 04.04.2019| 17:00:4152( 1484454471 ms.) | 00| 00/11.892/11892.302 XNUMX:XNUMX| XNUMX| XNUMX| XNUMX:XNUMX:XNUMX( XNUMX ms.) | XNUMX| XNUMX/XNUMX/XNUMX XNUMX:XNUMX| XNUMX| XNUMX| XNUMX:XNUMX:XNUMX( XNUMX ms.)
TOP10 SQL minn buffer SHARED qari/kitba
Talba
SELECT
id AS snapshotid ,
queryid ,
snapshot_timestamp ,
shared_blks_read ,
shared_blks_written
FROM
pg_stat_history
WHERE
queryid IS NOT NULL AND
database_id = DATABASE_ID AND
snapshot_timestamp BETWEEN BEGIN_TIMEPOINT AND END_TIMEPOINT AND
( shared_blks_read > 0 OR shared_blks_written > 0 )
ORDER BY 4 DESC , 5 DESC
LIMIT 10
------------------------------------------------- ------------------------------------------ | TOP10 SQL MILL-QARI/KITBA TAL-BUFFER MAQSUMA | #| snapshot| snapshotID| queryid| blokki kondiviżi jinqraw| blokki maqsuma ikteb +----+------------------+-----------+---------- -+---------------------+--------------------- | 1| 04.04.2019/17/00 4153:821760255| 797308| 0| 2| 04.04.2019 | 16| 00/4146/821760255 797308:0| 3| 05.04.2019| 01| 03 | 4169| 655729273/797158/0 4:04.04.2019| 16| 00| 4144| 4152624390 | 756514| 0/5/04.04.2019 17:00| 4151| 4152624390| 756514| 0 | 6| 04.04.2019/17/00 4150:2460318461| 734117| 0| 7| 04.04.2019 | 17| 00/4155/3644780286 52973:0| 8| 05.04.2019| 01| 03 | 4168| 1053044345/52818/0 9:04.04.2019| 15| 00| 4141| 2194493487 | 52813| 0/10/04.04.2019 16:00| 4147| 2194493487| 52813| 0 | XNUMX| XNUMX/XNUMX/XNUMX XNUMX:XNUMX| XNUMX| XNUMX| XNUMX| XNUMX | XNUMX| XNUMX/XNUMX/XNUMX XNUMX:XNUMX| XNUMX| XNUMX| XNUMX| XNUMX ------------------------------------------------- -------------------------------------------
Istogramma tad-distribuzzjoni tat-talbiet skond il-ħin massimu ta' eżekuzzjoni
Talbiet
SELECT
MIN(max_time) AS hist_min ,
MAX(max_time) AS hist_max ,
(( MAX(max_time) - MIN(min_time) ) / hist_columns ) as hist_width
FROM
pg_stat_history
WHERE
queryid IS NOT NULL AND
database_id = DATABASE_ID AND
snapshot_timestamp BETWEEN BEGIN_TIMEPOINT AND END_TIMEPOINT ;
SELECT
SUM(calls) AS calls
FROM
pg_stat_history
WHERE
queryid IS NOT NULL AND
database_id =DATABASE_ID AND
snapshot_timestamp BETWEEN BEGIN_TIMEPOINT AND END_TIMEPOINT AND
( max_time >= hist_current_min AND max_time < hist_current_max ) ;
|------------------------------------------------ --------------------------------------------- | MAX_TIME HISTOGRAM | SEJĦAT TOTALI: 33851920 | ĦIN MIN: 00:00:01.063 | ĦIN MAX: 00:02:01.869 ------------------------------------------ --------------------------------------- | tul ta' min| tul massimu| sejħiet +---------------------------------+------------- ---------------------+---------- | 00:00:01.063( 1063.830 ms.) | 00:00:13.144( 13144.445 ms.) | 9 | 00:00:13.144( 13144.445 ms.) | 00:00:25.225( 25225.060 ms.) | 0 | 00:00:25.225( 25225.060 ms.) | 00:00:37.305( 37305.675 ms.) | 0 | 00:00:37.305( 37305.675 ms.) | 00:00:49.386( 49386.290 ms.) | 0 | 00:00:49.386( 49386.290 ms.) | 00:01:01.466( 61466.906 ms.) | 0 | 00:01:01.466( 61466.906 ms.) | 00:01:13.547( 73547.521 ms.) | 0 | 00:01:13.547( 73547.521 ms.) | 00:01:25.628( 85628.136 ms.) | 0 | 00:01:25.628( 85628.136 ms.) | 00:01:37.708( 97708.751 ms.) | 4 | 00:01:37.708( 97708.751 ms.) | 00:01:49.789( 109789.366 ms.) | 2 | 00:01:49.789( 109789.366 ms.) | 00:02:01.869( 121869.981 ms.) | 0
TOP10 Snapshots minn Mistoqsija kull Sekondi
Talbiet
--pg_qps.sql
--Calculate Query Per Second
CREATE OR REPLACE FUNCTION pg_qps( pg_stat_history_id integer ) RETURNS double precision AS $$
DECLARE
pg_stat_history_rec record ;
prev_pg_stat_history_id integer ;
prev_pg_stat_history_rec record;
total_seconds double precision ;
result double precision;
BEGIN
result = 0 ;
SELECT *
INTO pg_stat_history_rec
FROM
pg_stat_history
WHERE id = pg_stat_history_id ;
IF pg_stat_history_rec.snapshot_timestamp IS NULL
THEN
RAISE EXCEPTION 'ERROR - Not found pg_stat_history for id = %',pg_stat_history_id;
END IF ;
--RAISE NOTICE 'pg_stat_history_id = % , snapshot_timestamp = %', pg_stat_history_id ,
pg_stat_history_rec.snapshot_timestamp ;
SELECT
MAX(id)
INTO
prev_pg_stat_history_id
FROM
pg_stat_history
WHERE
database_id = pg_stat_history_rec.database_id AND
queryid IS NULL AND
id < pg_stat_history_rec.id ;
IF prev_pg_stat_history_id IS NULL
THEN
RAISE NOTICE 'Not found previous pg_stat_history shapshot for id = %',pg_stat_history_id;
RETURN NULL ;
END IF;
SELECT *
INTO prev_pg_stat_history_rec
FROM
pg_stat_history
WHERE id = prev_pg_stat_history_id ;
--RAISE NOTICE 'prev_pg_stat_history_id = % , prev_snapshot_timestamp = %', prev_pg_stat_history_id , prev_pg_stat_history_rec.snapshot_timestamp ;
total_seconds = extract(epoch from ( pg_stat_history_rec.snapshot_timestamp - prev_pg_stat_history_rec.snapshot_timestamp ));
--RAISE NOTICE 'total_seconds = % ', total_seconds ;
--RAISE NOTICE 'calls = % ', pg_stat_history_rec.calls ;
IF total_seconds > 0
THEN
result = pg_stat_history_rec.calls / total_seconds ;
ELSE
result = 0 ;
END IF;
RETURN result ;
END
$$ LANGUAGE plpgsql;
SELECT
id ,
snapshot_timestamp ,
calls ,
total_time ,
( select pg_qps( id )) AS QPS ,
blk_read_time ,
blk_write_time
FROM
pg_stat_history
WHERE
queryid IS NULL AND
database_id = DATABASE_ID AND
snapshot_timestamp BETWEEN BEGIN_TIMEPOINT AND END_TIMEPOINT AND
( select pg_qps( id )) IS NOT NULL
ORDER BY 5 DESC
LIMIT 10
|------------------------------------------------ --------------------------------------------- | TOP10 Snapshots ordnati bin-numri QueryPerSeconds -------------------------------------------- ------------------------------------------------- ------------------------------------------------ | #| snapshot| snapshotID| sejħiet| totali dbtime| QPS| Ħin I/O| Ħin I/O % +-----+------------------+-----------+------- ----+---------------------------------+---------- -+------------------------+----------- | 1| 04.04.2019/20/04 4161:5758631| 00| 06| 30.513:390513.926:1573.396( 00 ms.)| 00| 01.470:1470.110:376( 2 ms.)| .04.04.2019 | 17| 00/4149/3529197 00:11| 48.830| 708830.618| 980.332:00:12( 47.834 ms.)| 767834.052| 108.324:3:04.04.2019( 16 ms.)| 00 | 4143| 3525360/00/10 13.492:613492.351| 979.267| 00| 08:41.396:521396.555( 84.988 ms.)| 4| 04.04.2019:21:03(4163 ms.)| 2781536 | 00| 03/06.470/186470.979 785.745:00| 00| 00.249| 249.865:134:5( 04.04.2019 ms.)| 19| 03:4159:2890362( 00 ms.)| .03 | 16.784| 196784.755 776.979:00| 00| 01.441| 1441.386:732:6( 04.04.2019 ms.)| 14| 00:4137:2397326( 00 ms.)| .04 | 43.033| 283033.854/665.924/00 00:00.024| 24.505| 009| 7:04.04.2019:15( 00 ms.)| 4139| 2394416:00:04(51.435 ms.)| .291435.010 | 665.116| 00/00/12.025 12025.895:4.126| 8| 04.04.2019| 13:00:4135( 2373043 ms.)| 00| 04:26.791:266791.988( 659.179 ms.)| 00 | 00| 00.064 64.261:024| 9| 05.04.2019| 01:03:4167( 4387191 ms.)| 00| 06:51.380:411380.293( 609.332 ms.)| .00 | 05| 18.847/318847.407/77.507 10:04.04.2019| 18| 01| 4157:1145596:00( 01 ms.)| 19.217| 79217.372:313.004:00( 00 ms.)| 01.319 | 1319.676| 1.666/XNUMX/XNUMX XNUMX:XNUMX| XNUMX| XNUMX| XNUMX:XNUMX:XNUMX( XNUMX ms.)| XNUMX| XNUMX:XNUMX:XNUMX( XNUMX ms.)| XNUMX
Storja ta' Eżekuzzjoni kull Siegħa b'QueryPerSeconds u Ħin I/O
Talba
SELECT
id ,
snapshot_timestamp ,
calls ,
total_time ,
( select pg_qps( id )) AS QPS ,
blk_read_time ,
blk_write_time
FROM
pg_stat_history
WHERE
queryid IS NULL AND
database_id = DATABASE_ID AND
snapshot_timestamp BETWEEN BEGIN_TIMEPOINT AND END_TIMEPOINT
ORDER BY 2
|----------------------------------------------------------------------------------------------- | HOURLY EXECUTION HISTORY WITH QueryPerSeconds and I/O Time ----------------------------------------------------------------------------------------------------------------------------------------------- | QUERY PER SECOND HISTORY | #| snapshot| snapshotID| calls| total dbtime| QPS| I/O time| I/O time % +-----+------------------+-----------+-----------+----------------------------------+-----------+----------------------------------+----------- | 1| 04.04.2019 11:00| 4131| 3747| 00:00:00.835( 835.374 ms.)| 1.041| 00:00:00.000( .000 ms.)| .000 | 2| 04.04.2019 12:00| 4133| 1002722| 00:01:52.419( 112419.376 ms.)| 278.534| 00:00:00.149( 149.105 ms.)| .133 | 3| 04.04.2019 13:00| 4135| 2373043| 00:04:26.791( 266791.988 ms.)| 659.179| 00:00:00.064( 64.261 ms.)| .024 | 4| 04.04.2019 14:00| 4137| 2397326| 00:04:43.033( 283033.854 ms.)| 665.924| 00:00:00.024( 24.505 ms.)| .009 | 5| 04.04.2019 15:00| 4139| 2394416| 00:04:51.435( 291435.010 ms.)| 665.116| 00:00:12.025( 12025.895 ms.)| 4.126 | 6| 04.04.2019 16:00| 4143| 3525360| 00:10:13.492( 613492.351 ms.)| 979.267| 00:08:41.396( 521396.555 ms.)| 84.988 | 7| 04.04.2019 17:00| 4149| 3529197| 00:11:48.830( 708830.618 ms.)| 980.332| 00:12:47.834( 767834.052 ms.)| 108.324 | 8| 04.04.2019 18:01| 4157| 1145596| 00:01:19.217( 79217.372 ms.)| 313.004| 00:00:01.319( 1319.676 ms.)| 1.666 | 9| 04.04.2019 19:03| 4159| 2890362| 00:03:16.784( 196784.755 ms.)| 776.979| 00:00:01.441( 1441.386 ms.)| .732 | 10| 04.04.2019 20:04| 4161| 5758631| 00:06:30.513( 390513.926 ms.)| 1573.396| 00:00:01.470( 1470.110 ms.)| .376 | 11| 04.04.2019 21:03| 4163| 2781536| 00:03:06.470( 186470.979 ms.)| 785.745| 00:00:00.249( 249.865 ms.)| .134 | 12| 04.04.2019 23:03| 4165| 1443155| 00:01:34.467( 94467.539 ms.)| 200.438| 00:00:00.015( 15.287 ms.)| .016 | 13| 05.04.2019 01:03| 4167| 4387191| 00:06:51.380( 411380.293 ms.)| 609.332| 00:05:18.847( 318847.407 ms.)| 77.507 | 14| 05.04.2019 02:03| 4171| 189852| 00:00:10.989( 10989.899 ms.)| 52.737| 00:00:00.539( 539.110 ms.)| 4.906 | 15| 05.04.2019 03:01| 4173| 3627| 00:00:00.103( 103.000 ms.)| 1.042| 00:00:00.004( 4.131 ms.)| 4.010 | 16| 05.04.2019 04:00| 4175| 3627| 00:00:00.085( 85.235 ms.)| 1.025| 00:00:00.003( 3.811 ms.)| 4.471 | 17| 05.04.2019 05:00| 4177| 3747| 00:00:00.849( 849.454 ms.)| 1.041| 00:00:00.006( 6.124 ms.)| .721 | 18| 05.04.2019 06:00| 4179| 3747| 00:00:00.849( 849.561 ms.)| 1.041| 00:00:00.000( .051 ms.)| .006 | 19| 05.04.2019 07:00| 4181| 3747| 00:00:00.839( 839.416 ms.)| 1.041| 00:00:00.000( .062 ms.)| .007 | 20| 05.04.2019 08:00| 4183| 3747| 00:00:00.846( 846.382 ms.)| 1.041| 00:00:00.000( .007 ms.)| .001 | 21| 05.04.2019 09:00| 4185| 3747| 00:00:00.855( 855.426 ms.)| 1.041| 00:00:00.000( .065 ms.)| .008 | 22| 05.04.2019 10:00| 4187| 3797| 00:01:40.150( 100150.165 ms.)| 1.055| 00:00:21.845( 21845.217 ms.)| 21.812
Test tas-selezzjonijiet SQL kollha
Talba
SELECT
queryid ,
query
FROM
pg_stat_history
WHERE
queryid IS NOT NULL AND
database_id = DATABASE_ID AND
snapshot_timestamp BETWEEN BEGIN_TIMEPOINT AND END_TIMEPOINT
GROUP BY queryid , query
Total
Kif tistgħu taraw, billi tuża mezzi pjuttost sempliċi, tista 'tikseb ħafna informazzjoni utli dwar l-ammont ta' xogħol u l-istat tad-database.
Nota:Jekk nirreġistraw il-queryid f'mistoqsijiet, se nġibu l-istorja għal mistoqsija separata (sabiex niffrankaw l-ispazju, ir-rapporti għal mistoqsija separata jitħallew barra).
Għalhekk, id-dejta statistika dwar il-prestazzjoni tal-mistoqsijiet hija disponibbli u miġbura.
L-ewwel stadju "ġbir ta' data statistika" tlesta.
Tista 'tgħaddi għat-tieni stadju - "jitwaqqaf metriċi tal-prestazzjoni".
Imma dik hija storja kompletament differenti.
Biex titkompla ...
Sors: www.habr.com