{"id":56075,"date":"2020-02-04T00:00:00","date_gmt":"2020-02-03T21:00:00","guid":{"rendered":"https:\/\/prohoster.info\/blog\/blog_prohoster\/osnovy-monitoringa-postgresql-aleksej-lesovskij"},"modified":"2020-02-18T14:04:16","modified_gmt":"2020-02-18T11:04:16","slug":"osnovy-monitoringa-postgresql-aleksej-lesovskij","status":"publish","type":"post","link":"https:\/\/prohoster.info\/da\/blog\/administrirovanie\/osnovy-monitoringa-postgresql-aleksej-lesovskij","title":{"rendered":"Grundl\u00e6ggende overv\u00e5gning af PostgreSQL. Alexey Lesovsky","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><strong>Jeg vil gerne pr\u00e6sentere en oversigt over pr\u00e6sentationen af Alexey Lesovsky fra Data Egret \"Grundlag for overv\u00e5gning af PostgreSQL\"<\/strong><\/p>\n<p><\/p>\n<p>I denne pr\u00e6sentation vil Alexey Lesovsky tale om de centrale punkter i PostgreSQL-statistik, hvad de betyder, og hvorfor de skal v\u00e6re en del af overv\u00e5gningen; hvilke grafer der b\u00f8r v\u00e6re med i overv\u00e5gningen, hvordan man tilf\u00f8jer dem, og hvordan man fortolker dem. Pr\u00e6sentationen vil v\u00e6re nyttig for databaseadministratorer, systemadministratorer og udviklere, der er interesserede i fejlfindingsarbejde i Postgres.<\/p>\n<p>\n<center><div class=\"youtube-placeholder\" data-id=\"Hbi2AFhd4nY\" onclick=\"loadVideo(this)\">\r\n        <img decoding=\"async\" src=\"https:\/\/img.youtube.com\/vi\/Hbi2AFhd4nY\/hqdefault.jpg\" alt=\"Afspil video\" loading=\"lazy\" width=\"480\" height=\"360\" style=\"width:100%;height:auto;\">\r\n        <div class=\"play-button\"><\/div>\r\n    <\/div><\/center><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<p><img decoding=\"async\" alt=\"Grundl\u00e6ggende overv\u00e5gning af PostgreSQL. Alexey Lesovsky\" src=\"\/wp-content\/uploads\/2020\/02\/07b4739a84eb36c84e0c663c5d721435.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Mit navn er Alexey Lesovsky, jeg repr\u00e6senterer Data Egret. <\/p>\n<p><\/p>\n<p>Lidt om mig selv. Jeg startede engang for l\u00e6nge siden som systemadministrator. <\/p>\n<p><\/p>\n<p>Jeg administrerede forskellige Linux-systemer og arbejdede med forskellige opgaver relateret til Linux, dvs. virtualisering, overv\u00e5gning, arbejdede med proxy osv. Men p\u00e5 et tidspunkt begyndte jeg at fokusere mere p\u00e5 databaser, PostgreSQL. Jeg kunne virkelig godt lide det. Og p\u00e5 et tidspunkt begyndte jeg at arbejde med PostgreSQL det meste af min arbejdstid. S\u00e5 gradvist blev jeg PostgreSQL DBA.<\/p>\n<p><\/p>\n<p>Og gennem hele min karriere har jeg altid v\u00e6ret interesseret i emner som statistik, overv\u00e5gning og indsamling af telemetri. Da jeg var systemadministrator, arbejdede jeg t\u00e6t med Zabbix. Jeg skrev et lille s\u00e6t scripts som <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/lesovsky\/zabbix-extensions\">zabbix-extensions<\/a><\/noindex>. Det var ret popul\u00e6rt p\u00e5 det tidspunkt. Og man kunne overv\u00e5ge meget vigtige aspekter, ikke kun Linux, men ogs\u00e5 forskellige komponenter.<\/p>\n<p><\/p>\n<p>I dag arbejder jeg med PostgreSQL. Jeg skriver noget andet, som muligg\u00f8r arbejde med PostgreSQL-statistik. Det hedder <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/lesovsky\/pgcenter\">pgCenter<\/a><\/noindex> (artikel p\u00e5 Habr \u2014 <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/425083\/\">Postgres-statistik uden nerve og stress<\/a><\/noindex>). <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Grundl\u00e6ggende overv\u00e5gning af PostgreSQL. Alexey Lesovsky\" src=\"\/wp-content\/uploads\/2020\/02\/10f619998e38e7dce6c2b042565c6aee.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>En lille introduktion. Hvilke situationer oplever vores kunder? Der opst\u00e5r en fejl relateret til databasen. Og n\u00e5r databasen er blevet gendannet, kommer lederen af afdelingen eller udviklingslederen og siger: \u201eVenner, vi b\u00f8r overv\u00e5ge databasen, fordi der skete noget d\u00e5rligt, og vi skal s\u00f8rge for, at det ikke sker igen i fremtiden.\u201c Og her begynder den interessante proces med at v\u00e6lge et overv\u00e5gningssystem eller tilpasse et eksisterende overv\u00e5gningssystem, s\u00e5 vi kan overv\u00e5ge vores database \u2013 PostgreSQL, MySQL eller andre. Og kollegerne begynder at foresl\u00e5: \u201eJeg har h\u00f8rt, at der findes en bestemt database. Lad os bruge den.\u201c Kollegerne begynder at diskutere indbyrdes. Og i sidste ende v\u00e6lger vi en bestemt database, men overv\u00e5gningen af PostgreSQL i den er ret svag, og det er ofte n\u00f8dvendigt at tilf\u00f8je noget ekstra. Tage nogle repositories fra GitHub, klone dem, tilpasse scripts, og justere dem p\u00e5 en eller anden m\u00e5de. Og til sidst resulterer det i noget manuelt arbejde. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Grundl\u00e6ggende overv\u00e5gning af PostgreSQL. Alexey Lesovsky\" src=\"\/wp-content\/uploads\/2020\/02\/6a36a566c8c9e155d7b99e2adaf9e70c.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Derfor vil jeg i denne pr\u00e6sentation fors\u00f8ge at give dig nogle indsigter om, hvordan man v\u00e6lger overv\u00e5gning ikke kun for PostgreSQL, men ogs\u00e5 for databaser generelt. Og give den viden, der g\u00f8r det muligt for dig at forbedre din overv\u00e5gning, s\u00e5 du kan f\u00e5 noget nytte ud af det, s\u00e5 du kan overv\u00e5ge din database effektivt og i tide advare om potentielle n\u00f8dsituationer, som kan opst\u00e5. <\/p>\n<p><\/p>\n<p>De id\u00e9er, der pr\u00e6senteres i denne pr\u00e6sentation, kan direkte tilpasses til enhver database, hvad enten det er en SQL-database eller noSQL. S\u00e5 her handler det ikke kun om PostgreSQL, men der vil v\u00e6re mange opskrifter p\u00e5, hvordan man g\u00f8r det i PostgreSQL. Der vil v\u00e6re eksempler p\u00e5 foresp\u00f8rgsler og eksempler p\u00e5 enheder, der findes i PostgreSQL til overv\u00e5gning. Og hvis din database har de samme funktioner, der g\u00f8r det muligt at integrere dem i overv\u00e5gningen, kan du ogs\u00e5 tilpasse dem, tilf\u00f8je dem, og det vil fungere godt.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Grundl\u00e6ggende overv\u00e5gning af PostgreSQL. Alexey Lesovsky\" src=\"\/wp-content\/uploads\/2020\/02\/412766f755018e76ac04c0e399361f4d.jpg\" style=\"display:block;margin: 0 auto;\" \/>I pr\u00e6sentationen vil jeg ikke<br \/>\ntale om, hvordan man indsamler og opbevarer m\u00e5linger. Jeg vil ikke sige noget om efterbehandling af data og om, hvordan man pr\u00e6senterer dem for brugeren. Og jeg vil ikke tale om alarmering.<br \/>\nUnder the narrative, I will share various screenshots of existing monitoring systems and critique them as I go along. However, I will try not to mention brand names in order to avoid creating any advertising or negative advertising for these products. Therefore, any similarities are purely coincidental and left to your imagination.<br \/>\n<img decoding=\"async\" alt=\"Grundl\u00e6ggende overv\u00e5gning af PostgreSQL. Alexey Lesovsky\" src=\"\/wp-content\/uploads\/2020\/02\/e1c6ba71914b5c133f37a76484768d5b.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nLet's start by understanding what monitoring is. Monitoring is a very important element that is essential to have. Everyone understands this. However, at the same time, monitoring does not relate to a business product and does not directly affect a company\u2019s profit, which is why monitoring is often given time on a residual basis. If we have time, we deal with monitoring; if there is no time, that's okay, we'll put it on the back burner and come back to these tasks someday. <\/p>\n<p><\/p>\n<p>Therefore, from our experience when we visit clients, monitoring is often underdeveloped and lacks interesting features that could help us work better with the database. Thus, monitoring always requires improvements. <\/p>\n<p><\/p>\n<p>Databases are complex elements that also need to be monitored because databases are stores of information. And information is very important for a company; it cannot be lost under any circumstances. At the same time, databases are very complex pieces of software. They consist of a large number of components, and many of these components need monitoring. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Grundl\u00e6ggende overv\u00e5gning af PostgreSQL. Alexey Lesovsky\" src=\"\/wp-content\/uploads\/2020\/02\/d2293a3d5089c320aa94471039a6023f.jpg\" style=\"display:block;margin: 0 auto;\" \/>When we talk specifically about PostgreSQL, it can be envisioned as a diagram consisting of many components. These components interact with each other. Meanwhile, PostgreSQL has a so-called Stats Collector subsystem that allows gathering statistics about the operation of these subsystems and provides an interface for the administrator or user to view this statistics. <\/p>\n<p><\/p>\n<p>This statistics is presented as a set of functions and views. They can also be referred to as tables. That is, with a standard psql client, you can connect to the database, perform a select query on these functions and views, and obtain specific figures regarding the performance of PostgreSQL subsystems. <\/p>\n<p><\/p>\n<p>You can add these figures to your favorite monitoring system, create graphs, add functions, and obtain long-term analytics. <\/p>\n<p><\/p>\n<p>Men i denne rapport vil jeg ikke gennemg\u00e5 alle disse funktioner grundigt, fordi det kan tage hele dagen. Jeg vil fokusere p\u00e5 to til fire ting og tale om, hvordan de hj\u00e6lper med at forbedre overv\u00e5gningen.<br \/>\n<img decoding=\"async\" alt=\"Grundl\u00e6ggende overv\u00e5gning af PostgreSQL. Alexey Lesovsky\" src=\"\/wp-content\/uploads\/2020\/02\/13e1b9dc97deeb164576818eb6be17fb.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nOg n\u00e5r vi taler om overv\u00e5gning af databasen, hvad skal vi s\u00e5 overv\u00e5ge? F\u00f8rst og fremmest skal vi overv\u00e5ge tilg\u00e6ngeligheden, fordi databasen er en tjeneste, der giver adgang til data for kunderne, og vi skal overv\u00e5ge dens tilg\u00e6ngelighed, samt nogle kvalitets- og kvantitative karakteristika. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Grundl\u00e6ggende overv\u00e5gning af PostgreSQL. Alexey Lesovsky\" src=\"\/wp-content\/uploads\/2020\/02\/eb54f240bfaf74a356cf87e66ed9f83b.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Vi skal ogs\u00e5 overv\u00e5ge kunderne, der opretter forbindelse til vores database, fordi de kan v\u00e6re b\u00e5de normale kunder og skadelige kunder, der kan skade databasen. Deres aktiviteter skal ogs\u00e5 overv\u00e5ges.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Grundl\u00e6ggende overv\u00e5gning af PostgreSQL. Alexey Lesovsky\" src=\"\/wp-content\/uploads\/2020\/02\/4ef57fc16b0b0974f5d66568534fad96.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>N\u00e5r kunderne opretter forbindelse til databasen, begynder de \u00e5benlyst at arbejde med vores data, s\u00e5 vi skal overv\u00e5ge, hvordan kunderne arbejder med dataene: hvilke tabeller de bruger og, mindre grad, hvilke indekser. Det vil sige, at vi skal vurdere den arbejdsbyrde (workload), som vores kunder skaber.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Grundl\u00e6ggende overv\u00e5gning af PostgreSQL. Alexey Lesovsky\" src=\"\/wp-content\/uploads\/2020\/02\/ef7ee6e5c3b66bb14adc3d8b0c34f4f7.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Men arbejdsbyrden best\u00e5r selvf\u00f8lgelig ogs\u00e5 af foresp\u00f8rgsler. Applikationer opretter forbindelse til databasen og henter data ved hj\u00e6lp af foresp\u00f8rgsler, s\u00e5 det er vigtigt at vurdere, hvilke foresp\u00f8rgsler vi har i databasen, overv\u00e5ge deres passendehed, sikre at de ikke er d\u00e5rligt skrevet, og at nogle indstillinger skal omskrives for at fungere hurtigere og med bedre ydeevne. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Grundl\u00e6ggende overv\u00e5gning af PostgreSQL. Alexey Lesovsky\" src=\"\/wp-content\/uploads\/2020\/02\/cf74205ff688659cae41e4b0cbc4525d.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Og eftersom vi taler om databasen, er databasen altid forbundet med baggrundsprocesser. Baggrundsprocesserne holder databasen i god stand, s\u00e5 de kr\u00e6ver en vis m\u00e6ngde ressourcer til deres drift. Samtidig kan de overlappe med ressourcerne fra kundernes foresp\u00f8rgsler, s\u00e5 en ressourcekr\u00e6vende drift af baggrundsprocesserne kan p\u00e5virke ydeevnen af kundernes foresp\u00f8rgsler. Derfor skal de ogs\u00e5 overv\u00e5ges for at sikre, at der ikke er ubalancer i forhold til baggrundsprocesserne. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Grundl\u00e6ggende overv\u00e5gning af PostgreSQL. Alexey Lesovsky\" src=\"\/wp-content\/uploads\/2020\/02\/50f44ab160e889882210529fa9b7fc57.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Og alt dette i databaseoverv\u00e5gningsplanen forbliver i systemmetrikken. Men i betragtning af at vores infrastruktur stort set flytter til skyen, kommer systemmetrikkerne for en enkelt v\u00e6rt altid i anden r\u00e6kke. Men i databaser er de stadig relevante, og det er selvf\u00f8lgelig ogs\u00e5 n\u00f8dvendigt at overv\u00e5ge systemmetrikker. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Grundl\u00e6ggende overv\u00e5gning af PostgreSQL. Alexey Lesovsky\" src=\"\/wp-content\/uploads\/2020\/02\/71d119b3ef5d5b9eee5510a43ef0e16d.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Med systemmetrikkerne er alt mere eller mindre i orden, alle moderne overv\u00e5gningssystemer underst\u00f8tter allerede disse metrikker, men generelt mangler der stadig nogle komponenter, og der er behov for at tilf\u00f8je visse ting. Dette vil jeg ogs\u00e5 ber\u00f8re, der vil v\u00e6re et par slides om dem. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Grundl\u00e6ggende overv\u00e5gning af PostgreSQL. Alexey Lesovsky\" src=\"\/wp-content\/uploads\/2020\/02\/e38d506da3a168913952a4015ba06e3e.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nDet f\u00f8rste punkt p\u00e5 planen er tilg\u00e6ngelighed. Hvad er tilg\u00e6ngelighed? Tilg\u00e6ngelighed i min opfattelse er evnen for databasen til at h\u00e5ndtere forbindelser, dvs. databasen er oppe, og som en tjeneste accepterer den forbindelser fra kunder. Og denne tilg\u00e6ngelighed kan vurderes ud fra nogle karakteristika. Disse karakteristika er meget bekvemme at vise p\u00e5 dashboards. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Grundl\u00e6ggende overv\u00e5gning af PostgreSQL. Alexey Lesovsky\" src=\"\/wp-content\/uploads\/2020\/02\/befa103d55797b6ec9884541ca70c05a.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nAlle ved, hvad dashboards er. Det er n\u00e5r du kaster et blik p\u00e5 sk\u00e6rmen, hvor den n\u00f8dvendige information er samlet. Og du kan straks afg\u00f8re \u2013 er der et problem i databasen eller ej.<br \/>\nTilsvarende er det altid n\u00f8dvendigt at vise database-tilg\u00e6ngelighed og andre n\u00f8glekarakteristika p\u00e5 dashboards, s\u00e5 denne information er lige ved h\u00e5nden, altid t\u00e6t p\u00e5 dig. Nogle yderligere detaljer, der allerede hj\u00e6lper ved efterforskning af h\u00e6ndelser eller katastrofesituationer, skal allerede vises p\u00e5 sekund\u00e6re dashboards eller skjules i drilldown-links, der f\u00f8rer til tredjeparts overv\u00e5gningssystemer. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Grundl\u00e6ggende overv\u00e5gning af PostgreSQL. Alexey Lesovsky\" src=\"\/wp-content\/uploads\/2020\/02\/6c595fdff1d0626b61bc76ad06299fb0.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Eksempel p\u00e5 et velkendt overv\u00e5gningssystem. Det er et meget imponerende overv\u00e5gningssystem. Det indsamler en masse data, men efter min mening har det en m\u00e6rkelig forst\u00e5else af dashboards. Der er et link til at 'oprette dashboard'. Men n\u00e5r du opretter et dashboard, opretter du en slags liste best\u00e5ende af to kolonner, en slags liste over grafer. Og n\u00e5r du skal se noget, begynder du at klikke med musen, scrolle, lede efter den n\u00f8dvendige graf. Og det tager tid, dvs. der findes ikke rigtige dashboards. Der er kun lister over grafer.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Grundl\u00e6ggende overv\u00e5gning af PostgreSQL. Alexey Lesovsky\" src=\"\/wp-content\/uploads\/2020\/02\/0a82729df59b2e09741bd290e3fb4f29.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Hvad skal der tilf\u00f8jes til disse dashboards? Man kan starte med en egenskab som svartid. I PostgreSQL findes der en visning kaldet pg_stat_statements. Som standard er den deaktiveret, men det er en af de vigtige systemvisninger, som altid skal aktiveres og bruges. Den gemmer oplysninger om alle udf\u00f8rte foresp\u00f8rgsler, der er blevet k\u00f8rt i databasen. <\/p>\n<p><\/p>\n<p>Derfor kan vi tage udgangspunkt i at tage den samlede tid for alle foresp\u00f8rgsler og dividere det med antallet af foresp\u00f8rgsler ved hj\u00e6lp af de f\u00f8rn\u00e6vnte felter. Men det er en gennemsnitlig temperatur p\u00e5 hospitalet. Vi kan tage udgangspunkt i andre felter \u2013 den minimale, maksimale og median tid for udf\u00f8relse af foresp\u00f8rgsler. Vi kan endda bygge percentiler; der er relevante funktioner til dette i PostgreSQL. Og vi kan f\u00e5 nogle tal, der karakteriserer svartiden p\u00e5 vores database baseret p\u00e5 allerede udf\u00f8rte foresp\u00f8rgsler, dvs. vi udf\u00f8rer ikke en falsk foresp\u00f8rgsel 'select 1' og ser p\u00e5 svartiden, men vi analyserer svartiderne for allerede udf\u00f8rte foresp\u00f8rgsler og viser enten et enkelt tal eller tegner en graf baseret p\u00e5 det. <\/p>\n<p><\/p>\n<p>Det er ogs\u00e5 vigtigt at holde \u00f8je med antallet af fejl, der genereres af systemet i \u00f8jeblikket. Og til dette kan man bruge visningen pg_stat_database. Vi orienterer os efter feltet xact_rollback. Dette felt viser ikke kun antallet af rollback, der finder sted i databasen, men tager ogs\u00e5 h\u00f8jde for antallet af fejl. Man kan sige, at vi kan vise dette tal p\u00e5 vores dashboard og se, hvor mange fejl vi har i \u00f8jeblikket. Hvis der er mange fejl, er det en god grund til at kigge i loggene og se, hvad det er for nogle fejl, og hvorfor de opst\u00e5r, og derefter unders\u00f8ge og l\u00f8se dem.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Grundl\u00e6ggende overv\u00e5gning af PostgreSQL. Alexey Lesovsky\" src=\"\/wp-content\/uploads\/2020\/02\/3ee7809fd203c03596633479f34dba12.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Man kan tilf\u00f8je noget som en Tachometer. Dette er antallet af transaktioner pr. sekund og antallet af foresp\u00f8rgsler pr. sekund. Man kan sige, at man kan bruge disse tal som den aktuelle ydelse for sin database og overv\u00e5ge, om der er spidser i foresp\u00f8rgslerne, spidser i transaktionerne, eller om databasen er underbelastet, fordi en eller anden backend er faldet ud. Det er vigtigt altid at holde \u00f8je med dette tal og huske, at for vores projekt er s\u00e5dan en ydelse normal, mens v\u00e6rdier over og under allerede er problematiske og uklare, hvilket betyder, at man skal se p\u00e5, hvorfor s\u00e5danne tal opst\u00e5r.<\/p>\n<p><\/p>\n<p>For evaluating the number of transactions, we can again refer to the pg_stat_database view. We can sum the number of commits and the number of rollbacks to get the number of transactions per second. <\/p>\n<p><\/p>\n<p>Everyone understands that multiple requests can fit into one transaction, right? Therefore, TPS and QPS are slightly different. <\/p>\n<p><\/p>\n<p>The number of requests per second can be obtained from pg_stat_statements by simply calculating the total of all executed requests. It\u2019s clear that we compare the current value with the previous one, subtract, obtain the delta, and get the amount.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Grundl\u00e6ggende overv\u00e5gning af PostgreSQL. Alexey Lesovsky\" src=\"\/wp-content\/uploads\/2020\/02\/d2e521bf6360aa5a34f3042281f9f902.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Additional metrics can be added as desired, which also help to evaluate the availability of our database and track whether there were any downtimes. <\/p>\n<p><\/p>\n<p>One of these metrics is uptime. However, uptime in PostgreSQL is a somewhat tricky thing. Let me explain why. When PostgreSQL starts up, it begins to count uptime. But if at some point, for example at night, a task was executed and the OOM-killer forcefully terminated the PostgreSQL child process, in this case PostgreSQL will disconnect all clients, reset the shared memory area, and begin recovery from the last checkpoint. While this recovery from the checkpoint is ongoing, the database does not accept connections, i.e., this situation can be assessed as downtime. However, the uptime counter will not reset because it tracks the time since the postmaster was first started. Therefore, such situations may be overlooked.<\/p>\n<p><\/p>\n<p>It is also important to monitor the number of vacuum workers. Does everyone know what autovacuum is in PostgreSQL? It is an interesting subsystem in PostgreSQL. Many articles have been written about it, numerous talks have been made. There has been much discussion about vacuum and how it should work. Many consider it an unavoidable evil, and rightly so. It's somewhat akin to a garbage collector that cleans up outdated versions of rows that are needed by none of the transactions and frees up space in tables and indexes for new rows. <\/p>\n<p><\/p>\n<p>Why is it necessary to monitor it? Because vacuum can sometimes cause significant issues. It consumes a large amount of resources, and client requests start to suffer from it. <\/p>\n<p><\/p>\n<p>Og man b\u00f8r overv\u00e5ge det via visningen pg_stat_activity, som jeg vil tale om i n\u00e6ste afsnit. Denne visning viser den aktuelle aktivitet i databasen. Gennem denne aktivitet kan vi spore antallet af vacuum-processer, der arbejder lige nu. Vi kan overv\u00e5ge vacuumene og se, at hvis vi overskrider gr\u00e6nsen, er det en grund til at kigge i PostgreSQL's indstillinger og optimere vacuum-arbejdet. <\/p>\n<p><\/p>\n<p><strong>En anden funktion ved PostgreSQL er, at det virkelig lider under lange transaktioner. Is\u00e6r under transaktioner, der h\u00e6nger og ikke laver noget. Disse kaldes stat idle-in-transaction. En s\u00e5dan transaktion holder l\u00e5se, hvilket forhindrer vacuumet i at arbejde. Som f\u00f8lge heraf svulmer tabellerne op, de \u00f8ges i st\u00f8rrelse. Og foresp\u00f8rgsler, der arbejder med disse tabeller, begynder at k\u00f8re langsommere, fordi de skal l\u00e6se alle de gamle versioner af r\u00e6kker fra hukommelsen til disken og tilbage.<\/strong> Derfor er det ogs\u00e5 vigtigt at overv\u00e5ge tiden, l\u00e6ngden af de l\u00e6ngste transaktioner og de l\u00e6ngste vacuum-foresp\u00f8rgsler. <strong>Og hvis vi ser nogen processer, der har k\u00f8rt meget l\u00e6nge, mere end 10-20-30 minutter for OLTP-belastning, s\u00e5 b\u00f8r vi allerede v\u00e6re opm\u00e6rksomme p\u00e5 dem og afslutte dem tvingende, eller optimere applikationen, s\u00e5 de ikke kaldes og h\u00e6nger s\u00e5 l\u00e6nge.<\/strong> For analytisk belastning er 10-20-30 minutter normalt, der kan endda v\u00e6re endnu l\u00e6ngere. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Grundl\u00e6ggende overv\u00e5gning af PostgreSQL. Alexey Lesovsky\" src=\"\/wp-content\/uploads\/2020\/02\/736035b2ee6106b571ad6f84f2902d41.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nDern\u00e6st har vi muligheden med tilsluttede klienter. N\u00e5r vi har oprettet et dashboard og vist vigtige tilg\u00e6ngelighedsmetrikker, kan vi ogs\u00e5 tilf\u00f8je yderligere information om de tilsluttede klienter. <\/p>\n<p><\/p>\n<p>Information om tilsluttede klienter er vigtig, fordi, set fra PostgreSQL's synspunkt, kan klienter v\u00e6re forskellige. Der er gode klienter, og der er d\u00e5rlige klienter. <\/p>\n<p><\/p>\n<p>Et simpelt eksempel. Med kunden forst\u00e5r jeg en applikation. Applikationen har forbindelse til databasen og begynder straks at sende sine foresp\u00f8rgsler, databasen behandler dem og udf\u00f8rer dem, resultaterne returneres til klienten. Det er gode og korrekte klienter. <\/p>\n<p><\/p>\n<p>Der er situationer, hvor klienten opretter forbindelse, holder forbindelsen, men samtidig ikke laver noget. Den er i en tilstand af idle. <\/p>\n<p><\/p>\n<p>Men findes ogs\u00e5 d\u00e5rlige kunder. For eksempel har en kunde m\u00e5ske tilsluttet sig, \u00e5bnet en transaktion, lavet noget i databasen og derefter g\u00e5et ind i koden for at henvise til en ekstern kilde eller for at bearbejde de data, han har modtaget. Alligevel har han ikke lukket transaktionen. S\u00e5 transaktionen h\u00e6nger i databasen og blokerer en r\u00e6kke. Dette er en d\u00e5rlig tilstand. Hvis applikationen pludselig fejler et sted inde i sig (Exception), kan transaktionen forblive \u00e5ben i lang tid. Dette p\u00e5virker direkte PostgreSQL's ydeevne. PostgreSQL vil arbejde langsommere. Derfor er det vigtigt at overv\u00e5ge s\u00e5danne kunder rettidigt og afslutte deres arbejde tvangsm\u00e6ssigt. Man skal ogs\u00e5 optimere sin applikation for at undg\u00e5 s\u00e5danne situationer. <\/p>\n<p><\/p>\n<p>Andre d\u00e5rlige kunder er ventende kunder. De bliver d\u00e5rlige p\u00e5 grund af omst\u00e6ndigheder. For eksempel kan en simpel ventende transaktion \u00e5bne en transaktion, tage l\u00e5se p\u00e5 nogle r\u00e6kker, og hvis den p\u00e5 et tidspunkt fejler i koden, forbliver der en h\u00e6ngende transaktion. En anden kunde ankommer, anmoder om de samme data, men han st\u00f8der p\u00e5 en blokering, fordi den h\u00e6ngende transaktion allerede holder l\u00e5se p\u00e5 nogle n\u00f8dvendige r\u00e6kker. Den anden transaktion vil s\u00e5 h\u00e6nge i venten p\u00e5, at den f\u00f8rste transaktion afsluttes eller p\u00e5 at dens administrator tvangsm\u00e6ssigt lukker den. P\u00e5 den m\u00e5de kan ventende transaktioner hobe sig op og overskride databasen tilslutningsgr\u00e6nse. N\u00e5r gr\u00e6nsen overskrides, kan applikationen ikke l\u00e6ngere arbejde med databasen. Dette er en n\u00f8dsituation for projektet. Derfor er det vigtigt at overv\u00e5ge d\u00e5rlige kunder og reagere i tide. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Grundl\u00e6ggende overv\u00e5gning af PostgreSQL. Alexey Lesovsky\" src=\"\/wp-content\/uploads\/2020\/02\/41eaa8fcb747bf5ca4e0d6d264d1e0ac.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Et andet eksempel p\u00e5 overv\u00e5gning. Her er allerede et ordentligt dashboard. Der er information om forbindelserne \u00f8verst. DB connection \u2013 8 stykker. Og det er alt. Vi har ikke information om, hvilke kunder der er aktive, og hvilke der bare er idle og ikke laver noget. Der er ingen information om h\u00e6ngende transaktioner eller ventende forbindelser, alts\u00e5 er det bare et tal, der viser antallet af forbindelser og intet andet. Og s\u00e5 m\u00e5 man g\u00e6tte selv.<br \/>\n<img decoding=\"async\" alt=\"Grundl\u00e6ggende overv\u00e5gning af PostgreSQL. Alexey Lesovsky\" src=\"\/wp-content\/uploads\/2020\/02\/553a4b6432c308c0023e49c4a35aa0a1.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nFor at tilf\u00f8je denne information til overv\u00e5gning, skal man henvise til systemvisningen pg_stat_activity. Hvis du tilbringer meget tid i PostgreSQL, er dette en fremragende visning, der b\u00f8r blive din ven, da den viser den aktuelle aktivitet i PostgreSQL, dvs. hvad der sker i det. Hver proces har en separat linje, der viser information om denne proces: fra hvilken v\u00e6rt forbindelsen er etableret, under hvilken bruger, med hvilket navn, hvorn\u00e5r transaktionen blev startet, hvilken foresp\u00f8rgsel der udf\u00f8res nu, og hvilken foresp\u00f8rgsel der blev udf\u00f8rt sidst. Og i overensstemmelse hermed kan vi vurdere klientens tilstand ud fra feltet stat. Man kan sige, at vi kan gruppere efter dette felt og f\u00e5 de nuv\u00e6rende stats, der findes i databasen, samt antallet af forbindelser, der har denne stat i databasen. Og de opn\u00e5ede tal kan vi sende til vores overv\u00e5gning og tegne grafer baseret p\u00e5 dem.<br \/>\nDet er ogs\u00e5 vigtigt at vurdere varigheden af transaktionen. Jeg har allerede n\u00e6vnt, at det er vigtigt at vurdere varigheden af vacuum-processerne, men transaktionerne skal vurderes p\u00e5 samme m\u00e5de. Der er felterne xact_start og query_start. De viser, n\u00e5r transaktionen og foresp\u00f8rgslen startede. Vi anvender funktionen now(), som viser det nuv\u00e6rende tidsstempel, og tr\u00e6kker tidsstemplet for transaktionen og foresp\u00f8rgslen fra. Og vi f\u00e5r varigheden af transaktionen, varigheden af foresp\u00f8rgslen. <\/p>\n<p><\/p>\n<p>Hvis vi ser lange transaktioner, b\u00f8r vi afslutte dem. <strong>For OLTP-belastning er lange transaktioner mere end 1-2-3 minutter<\/strong>. <strong>For OLAP-belastning er lange transaktioner normale, men hvis de varer mere end to timer, er det ogs\u00e5 et tegn p\u00e5, at vi har en ubalance et sted.<\/strong> <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Grundl\u00e6ggende overv\u00e5gning af PostgreSQL. Alexey Lesovsky\" src=\"\/wp-content\/uploads\/2020\/02\/1f3caea3077c0c5c2bcf60ee2f1be884.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nN\u00e5r kunderne har oprettet forbindelse til databasen, begynder de at arbejde med vores data. De henvender sig til tabeller, de henvender sig til indekser for at hente data fra tabellen. Og det er vigtigt at vurdere, hvordan kunderne arbejder med disse data.<\/p>\n<p><\/p>\n<p>Dette er n\u00f8dvendigt for at vurdere vores arbejdsbelastning og f\u00e5 en id\u00e9 om, hvilke tabeller der er de mest \"aktive\". Dette er vigtigt i situationer, hvor vi \u00f8nsker at placere de \"aktive\" tabeller p\u00e5 hurtig SSD-lagring. For eksempel kan vi flytte nogle arkivtabeller, som vi ikke l\u00e6ngere bruger, til en \"kold\" arkivplads p\u00e5 SATA-diske, hvor de kan v\u00e6re, og tilgangen til dem vil ske efter behov. <\/p>\n<p><\/p>\n<p>Det er ogs\u00e5 nyttigt til at opdage anomalier efter forskellige udgivelser og deployment. Antag, at et projekt har lanceret en ny funktion. For eksempel er der blevet tilf\u00f8jet ny funktionalitet til arbejdet med databasen. Hvis vi opbygger grafer over brugen af tabellerne, vil vi let kunne opdage disse anomalier p\u00e5 graferne. For eksempel kan vi se spidser i opdateringer eller sletninger. Det vil v\u00e6re meget tydeligt.<\/p>\n<p><\/p>\n<p>Vi kan ogs\u00e5 opdage anomalier i \"forstyrret\" statistik. Hvad betyder det? PostgreSQL har en st\u00e6rk og meget god foresp\u00f8rgselsplanl\u00e6gger. Og udviklerne bruger mange ressourcer p\u00e5 at forbedre den. Hvordan fungerer den? For at kunne opbygge gode planer indsamler PostgreSQL statistik om datafordelingen i tabellerne med et vist tidsinterval og regelm\u00e6ssighed. Det er de mest hyppige v\u00e6rdier: antal unikke v\u00e6rdier, information om NULL i tabellen, en masse information. <\/p>\n<p><\/p>\n<p>Baseret p\u00e5 denne statistik opbygger planl\u00e6ggeren flere foresp\u00f8rgsler, v\u00e6lger den mest optimale og bruger denne foresp\u00f8rgselsplan til at udf\u00f8re selve foresp\u00f8rgslen og returnere dataene. <\/p>\n<p><\/p>\n<p>Nogle gange kan statistikken v\u00e6re \"forstyrret\". Kvaliteten og m\u00e6ngden af data kan have \u00e6ndret sig i tabellen, men statistikken er ikke blevet indsamlet. Og de dannede planer kan vise sig at v\u00e6re suboptimale. Hvis vi har suboptimale planer i henhold til den indsamlede overv\u00e5gning af tabellerne, kan vi se denne anomalier. For eksempel kan dataene have \u00e6ndret kvalitet, og i stedet for at bruge indekset er der blevet anvendt en sekventiel gennemgang af tabellen. Det vil sige, hvis foresp\u00f8rgslen kun skal tilbagef\u00f8re 100 r\u00e6kker (med begr\u00e6nsning limit 100), s\u00e5 vil der blive foretaget en fuld gennemgang for denne foresp\u00f8rgsel. Og det p\u00e5virker altid ydeevnen negativt. <\/p>\n<p><\/p>\n<p>Og vi kan se dette i overv\u00e5gningen. Og allerede se denne foresp\u00f8rgsel, udf\u00f8re en explain for den, samle statistik, bygge et nyt ekstra indeks. Og allerede reagere p\u00e5 dette problem. Derfor er det vigtigt. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Grundl\u00e6ggende overv\u00e5gning af PostgreSQL. Alexey Lesovsky\" src=\"\/wp-content\/uploads\/2020\/02\/a586b45241efc73b5c59b8e21b9c2629.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Et andet eksempel p\u00e5 overv\u00e5gning. Jeg tror, mange kender det, fordi det er meget popul\u00e6rt. Hvem bruger det i deres projekter. <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/prometheus\/prometheus\">Prometheus<\/a><\/noindex>? \u0410 \u043a\u0442\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u044d\u0442\u043e\u0442 \u043f\u0440\u043e\u0434\u0443\u043a\u0442 \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u043d\u043e \u0441 Prometheus? \u0414\u0435\u043b\u043e \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u0432 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u043e\u043c \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0438 \u044d\u0442\u043e\u0433\u043e \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433\u0430 \u0435\u0441\u0442\u044c \u0434\u0430\u0448\u0431\u043e\u0440\u0434 \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 PostgreSQL \u2013 <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/wrouesnel\/postgres_exporter\">postgres_exporter<\/a><\/noindex> Prometheus. Men der er \u00e9n d\u00e5rlig detalje. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Grundl\u00e6ggende overv\u00e5gning af PostgreSQL. Alexey Lesovsky\" src=\"\/wp-content\/uploads\/2020\/02\/5a9de42b009c7bb333ee72f01bb46fb9.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Der er flere grafer. Og som en enhed er der angivet bytes, dvs. der er 5 grafer. Det er Insert data, Update data, Delete data, Fetch data og Return data. Som enhed for m\u00e5ling er der angivet bytes. Men det er s\u00e5dan, at statistikken i PostgreSQL returnerer data i tuples (r\u00e6kker). Og derfor er disse grafer en meget god m\u00e5de at undervurdere din arbejdsbelastning flere gange, ti gange, fordi en tuple ikke er en byte, en tuple er en r\u00e6kke, det er mange bytes, og den har altid variabel l\u00e6ngde. Det vil sige, at det at beregne arbejdsbelastningen i bytes ved hj\u00e6lp af tuples er en umulig opgave eller meget vanskelig. Derfor, n\u00e5r du bruger dashboardet eller indbygget overv\u00e5gning, er det altid vigtigt at forst\u00e5, at det fungerer korrekt og returnerer dig korrekt vurderede data. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Grundl\u00e6ggende overv\u00e5gning af PostgreSQL. Alexey Lesovsky\" src=\"\/wp-content\/uploads\/2020\/02\/697ca274c58466beec45614e9d57bda7.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Hvordan f\u00e5r man statistik for disse tabeller? Til dette har PostgreSQL et vist antal visninger. Og den prim\u00e6re visning er <noindex><a rel=\"nofollow\" href=\"https:\/\/www.postgresql.org\/docs\/10\/monitoring-stats.html\">pg_stat_user_tables<\/a><\/noindex>. User_tables betyder, at tabellerne er oprettet p\u00e5 brugerens vegne. I mods\u00e6tning til dette er der systemvisninger, som bruges af PostgreSQL selv. Og der er en opsummeringstabel kaldet Alltables, som inkluderer b\u00e5de system- og brugertabeller. Du kan basere dig p\u00e5 hvilken som helst af dem, som du bedst kan lide.<\/p>\n<p><\/p>\n<p>Efter de angivne felter kan man vurdere antallet af insert, update og delete. Det eksempel dashboard, jeg brugte, bruger netop disse felter til at vurdere egenskaberne ved arbejdsbelastningen. Derfor kan vi ogs\u00e5 basere os p\u00e5 dem. Men det er v\u00e6rd at huske, at det er tuples og ikke bytes, s\u00e5 vi kan ikke bare tage og g\u00f8re det til bytes.<\/p>\n<p><\/p>\n<p>Baseret p\u00e5 disse data kan vi konstruere s\u00e5kaldte TopN-tabeller. For eksempel, Top-5, Top-10. Og man kan spore de 'varme' tabeller, der anvendes mere end andre. For eksempel de 5 'varme' tabeller p\u00e5 inds\u00e6ttelse. Og ud fra disse TopN-tabeller vurderer vi vores arbejdsbelastning og kan vurdere udsving i arbejdsbelastningen efter forskellige udgivelser, opdateringer og implementeringer. <\/p>\n<p><\/p>\n<p>Det er ogs\u00e5 vigtigt at vurdere st\u00f8rrelsen p\u00e5 tabellen, da udviklere nogle gange ruller en ny funktion ud, og vores tabeller begynder at vokse i st\u00f8rrelse, fordi de beslutter at tilf\u00f8je yderligere data, men ikke har forudset, hvordan det vil p\u00e5virke st\u00f8rrelsen p\u00e5 databasen. S\u00e5danne tilf\u00e6lde er ogs\u00e5 overraskelser for os. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Grundl\u00e6ggende overv\u00e5gning af PostgreSQL. Alexey Lesovsky\" src=\"\/wp-content\/uploads\/2020\/02\/9b964b332210c5bef77f99dfa386a2b2.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Og nu et lille sp\u00f8rgsm\u00e5l til dig. Hvilket sp\u00f8rgsm\u00e5l opst\u00e5r, n\u00e5r du bem\u00e6rker belastning p\u00e5 databaserver? Hvilket n\u00e6ste sp\u00f8rgsm\u00e5l t\u00e6nker du straks? <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Grundl\u00e6ggende overv\u00e5gning af PostgreSQL. Alexey Lesovsky\" src=\"\/wp-content\/uploads\/2020\/02\/b72286a22e6e3ad0f1b6c8a478cf65b3.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Men i virkeligheden opst\u00e5r det n\u00e6ste sp\u00f8rgsm\u00e5l. Hvilke foresp\u00f8rgsler for\u00e5rsager belastningen? Alts\u00e5, det er ikke interessant at se p\u00e5 processerne, som for\u00e5rsager belastningen. Det er klart, at hvis der er en host med en database, s\u00e5 k\u00f8rer databasen der, og det er klart, at det kun er databasen, der vil blive udnyttet. Hvis vi \u00e5bner Top, vil vi se en liste over processer i PostgreSQL, som laver et eller andet. Fra Top vil det ikke v\u00e6re klart, hvad de laver. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Grundl\u00e6ggende overv\u00e5gning af PostgreSQL. Alexey Lesovsky\" src=\"\/wp-content\/uploads\/2020\/02\/3d8c06dfe22d5fe93427055c39925a2a.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Derfor er det n\u00f8dvendigt at opdage de foresp\u00f8rgsler, der for\u00e5rsager den h\u00f8jeste belastning, fordi tuning af foresp\u00f8rgsler som regel giver mere gevinst end tuning af PostgreSQL-konfigurationen eller operativsystemet, eller endda tuning af hardwaren. Efter min vurdering er det cirka 80-85-90 %. Og det kan g\u00f8res meget hurtigere. Det er hurtigere at rette en foresp\u00f8rgsel end at \u00e6ndre konfigurationen, planl\u00e6gge en genstart, is\u00e6r hvis databasen ikke kan genstartes, eller tilf\u00f8je hardware. Det er nemmere at omskrive en foresp\u00f8rgsel et sted eller tilf\u00f8je et indeks for at f\u00e5 et bedre resultat fra denne foresp\u00f8rgsel. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Grundl\u00e6ggende overv\u00e5gning af PostgreSQL. Alexey Lesovsky\" src=\"\/wp-content\/uploads\/2020\/02\/f41c9f7596f527a4403c5a5981f3a0d2.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nDerfor er det n\u00f8dvendigt at overv\u00e5ge foresp\u00f8rgslerne og deres ad\u00e6kvathed. Lad os tage et andet eksempel p\u00e5 overv\u00e5gning. Og her ser overv\u00e5gningen ogs\u00e5 fremragende ud. Der er information om replikation, der er information om b\u00e5ndbredde, l\u00e5sning, ressourceudnyttelse. Alt ser perfekt ud, men der er ingen information om foresp\u00f8rgsler. Det er uklart, hvilke foresp\u00f8rgsler der udf\u00f8res i vores database, hvor l\u00e6nge de udf\u00f8res, og hvor mange af disse foresp\u00f8rgsler er der. Vi skal altid have denne information i overv\u00e5gningen. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Grundl\u00e6ggende overv\u00e5gning af PostgreSQL. Alexey Lesovsky\" src=\"\/wp-content\/uploads\/2020\/02\/d92327c0486336105fb9a8005b6032ae.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Og for at f\u00e5 disse oplysninger kan vi bruge modulet pg_stat_statements. Baseret p\u00e5 det kan vi opbygge forskellige typer diagrammer. For eksempel kan vi f\u00e5 information om de mest hyppige foresp\u00f8rgsler, det vil sige dem, der udf\u00f8res oftest. Ja, efter deployment er det ogs\u00e5 meget nyttigt at se p\u00e5 det og forst\u00e5, om der er nogen pludselige stigninger i foresp\u00f8rgslerne. <\/p>\n<p><\/p>\n<p>Vi kan overv\u00e5ge de l\u00e6ngste foresp\u00f8rgsler, det vil sige de foresp\u00f8rgsler, der tager l\u00e6ngst tid at udf\u00f8re. De belaster CPU'en og forbruger I\/O. Vi kan ogs\u00e5 vurdere dette ud fra felterne total_time, mean_time, blk_write_time og blk_read_time. <\/p>\n<p><\/p>\n<p>Vi kan vurdere og overv\u00e5ge de mest ressourcekr\u00e6vende foresp\u00f8rgsler, dem der l\u00e6ser fra disken, som arbejder med hukommelsen, eller omvendt, som skaber en skrivebelastning.<\/p>\n<p><\/p>\n<p>Vi kan vurdere de mest gener\u00f8se foresp\u00f8rgsler. Det er de foresp\u00f8rgsler, der returnerer et stort antal r\u00e6kker. For eksempel kan det v\u00e6re en foresp\u00f8rgsel, hvor der er glemt at s\u00e6tte en gr\u00e6nse. Og den returnerer simpelthen alt indholdet i tabellen eller foresp\u00f8rgslen for de anmodede tabeller.<\/p>\n<p><\/p>\n<p>Og vi kan ogs\u00e5 overv\u00e5ge foresp\u00f8rgsler, der bruger midlertidige filer eller midlertidige tabeller. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Grundl\u00e6ggende overv\u00e5gning af PostgreSQL. Alexey Lesovsky\" src=\"\/wp-content\/uploads\/2020\/02\/7b33a882f23dc99ae5b6d158eaffdad5.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nOg vi har baggrundsprocesser. Baggrundsprocesser er prim\u00e6rt tjekpunkter, eller hvad de ogs\u00e5 kaldes, kontrolpunkter, autovacuum og replikation. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Grundl\u00e6ggende overv\u00e5gning af PostgreSQL. Alexey Lesovsky\" src=\"\/wp-content\/uploads\/2020\/02\/8fb2f921b60bd25053896155c90d7e53.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Et andet eksempel p\u00e5 overv\u00e5gning. Der er en fane til venstre kaldet Maintenance, vi g\u00e5r ind p\u00e5 den og h\u00e5ber at se noget nyttigt. Men her er der kun information om tiden for vakuum og statistikindsamling, ikke mere. Det er meget fattige oplysninger, s\u00e5 vi skal altid have information om, hvordan baggrundsprocesserne fungerer i vores database, og om der er problemer som f\u00f8lge af deres arbejde. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Grundl\u00e6ggende overv\u00e5gning af PostgreSQL. Alexey Lesovsky\" src=\"\/wp-content\/uploads\/2020\/02\/137acdb66afc49d0a61d74581bf51b39.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>N\u00e5r vi betragter kontrolpunkter, skal vi huske, at kontrolpunkter rydder \u00absnuskede\u00bb sider fra det shardede hukommelsesomr\u00e5de til disken og derefter opretter et kontrolpunkt. Dette kontrolpunkt kan derefter bruges som et sted ved genopretning, hvis PostgreSQL skulle afsluttes pludseligt. <\/p>\n<p><\/p>\n<p>For this reason, to flush all 'dirty' pages to disk, a certain amount of writing needs to be done. Typically, on systems with large memory, this is substantial. If we have checkpoints occurring very frequently within a short interval, disk performance can significantly decline. Client requests will suffer from a lack of resources. They will compete for resources and will find the performance inadequate. <\/p>\n<p><\/p>\n<p>Accordingly, through pg_stat_bgwriter and the specified fields, we can monitor the number of occurring checkpoints. If we have a lot of checkpoints within a certain time frame (10-15-20 minutes, half an hour), say 3-4-5, it may indicate a problem. We need to examine the database and check the configuration to identify what is causing this abundance of checkpoints. There might be some large write operations. Based on the workload, we can assess since the workload graphs have already been added. We can fine-tune the checkpoint parameters so that they do not significantly impact query performance.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Grundl\u00e6ggende overv\u00e5gning af PostgreSQL. Alexey Lesovsky\" src=\"\/wp-content\/uploads\/2020\/02\/3d86b57d87ec592f307b28ea4efb26ae.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>I am returning to autovacuum because it is something, as I've mentioned, that can easily hinder the performance of both disks and queries, so it's always important to evaluate the number of autovacuum tasks. <\/p>\n<p><\/p>\n<p>The number of autovacuum workers in the database is limited. By default, there are three, so if we consistently have three workers running in the database, it means that autovacuum is underconfigured. Limits need to be raised, and autovacuum settings should be reviewed to delve into the configuration.<br \/>\nIt is important to evaluate which autovacuum workers are running. It may be one initiated by a user, where a DBA manually started a vacuum task, creating a load. We may encounter certain issues that arise from this. Alternatively, it could be the number of vacuums that are incrementing the transaction counter. For some versions of PostgreSQL, these can be very intensive vacuums. They can easily hinder performance since they read the entire table completely, scanning all blocks in the table. <\/p>\n<p><\/p>\n<p>Og selvf\u00f8lgelig varigheden af vakuumerne. Hvis vi har lange vakuumer, der arbejder i meget lang tid, betyder det, at vi igen skal overveje konfigurationen af vakuummet og muligvis revidere dets indstillinger. For der kan opst\u00e5 en situation, hvor vakuummet arbejder over en tabel i lang tid (3-4 timer), men i l\u00f8bet af vakuumets arbejde har der igen samlet sig et stort antal d\u00f8de r\u00e6kker i tabellen. Og s\u00e5 snart vakuummet er f\u00e6rdigt, skal det igen vakuumere denne tabel. Og vi ender i en situation med et uendeligt vakuum. I s\u00e5danne tilf\u00e6lde klarer vakuummet ikke sit arbejde, og tabellerne begynder gradvist at svulme i st\u00f8rrelse, selvom m\u00e6ngden af nyttige data i dem forbliver den samme. Derfor ser vi altid p\u00e5 konfigurationen ved lange vakuumer og fors\u00f8ger at optimere den, men uden at det g\u00e5r ud over ydeevnen for kundernes foresp\u00f8rgsler. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Grundl\u00e6ggende overv\u00e5gning af PostgreSQL. Alexey Lesovsky\" src=\"\/wp-content\/uploads\/2020\/02\/bf109b53e0ad70bbb3fba727149e5086.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Der er nu n\u00e6sten ikke nogen installation af PostgreSQL, hvor der ikke er stream replication. Replication er processen med at overf\u00f8re data fra master til replika.<\/p>\n<p><\/p>\n<p>Replication i PostgreSQL fungerer via transaktionsloggen. Master genererer transaktionsloggen. Transaktionsloggen sendes via netv\u00e6rksforbindelsen til replikaen, og derefter bliver den reproduceret p\u00e5 replikaen. Det er meget simpelt. <\/p>\n<p><\/p>\n<p>Til overv\u00e5gning af replikaionslag anvendes visningen pg_stat_replication. Men det er ikke s\u00e5 enkelt. I version 10 har visningen gennemg\u00e5et flere \u00e6ndringer. For det f\u00f8rste er nogle felter blevet omd\u00f8bt. Og nogle felter er blevet tilf\u00f8jet. I version 10 er der tilf\u00f8jet felter, der g\u00f8r det muligt at vurdere replikaionslaget i sekunder. Det er meget praktisk. Inden version 10 var det muligt at vurdere replikaionslaget i bytes. Denne mulighed er ogs\u00e5 bevaret i version 10, dvs. du kan v\u00e6lge, hvad der er mere praktisk for dig - at vurdere laget i bytes eller vurdere laget i sekunder. Mange g\u00f8r begge dele.<\/p>\n<p><\/p>\n<p>Men for at kunne vurdere replikaionslaget skal man kende journalens position i transaktionen. Og disse journalpositioner findes netop i visningen pg_stat_replication. Groft sagt kan vi ved hj\u00e6lp af funktionen pg_xlog_location_diff() tage to punkter i transaktionsloggen. Beregn forskellen mellem dem og f\u00e5 replikaionslaget i bytes. Det er meget praktisk og enkelt. <\/p>\n<p><\/p>\n<p>I den tiende version blev denne funktion omd\u00f8bt til pg_wal_lsn_diff(). Generelt blev alle funktioner, udsigtsposter og v\u00e6rkt\u00f8jer, der indeholdt ordet 'xlog', \u00e6ndret til 'wal'. Dette g\u00e6lder b\u00e5de for udsigtsposter og funktioner. Det er s\u00e5dan en nyhed. <\/p>\n<p><\/p>\n<p>Derudover blev der i den tiende version tilf\u00f8jet linjer, som specifikt viser lag. Det er write lag, flush lag, replay lag. Det vil sige, at disse faktorer er vigtige at overv\u00e5ge. Hvis vi ser, at der er lag i replikationen, skal vi unders\u00f8ge, hvorfor det opstod, hvor det kom fra, og l\u00f8se problemet. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Grundl\u00e6ggende overv\u00e5gning af PostgreSQL. Alexey Lesovsky\" src=\"\/wp-content\/uploads\/2020\/02\/5b29d7519f28da63446b741024a68bb8.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Med de systemm\u00e6ssige m\u00e5linger er n\u00e6sten alt i orden. N\u00e5r der oprettes en hvilken som helst overv\u00e5gning, starter den med systemm\u00e6ssige m\u00e5linger. Dette d\u00e6kker CPU-udnyttelse, hukommelse, swap, netv\u00e6rk og disk. Men der er mange parametre, der ikke er inkluderet som standard. <\/p>\n<p><\/p>\n<p>Hvis CPU-udnyttelsen er i orden, er der problemer med diskudnyttelsen. Som regel tilf\u00f8jer udviklere overv\u00e5gningsv\u00e6rkt\u00f8jer oplysninger om b\u00e5ndbredde. Det kan v\u00e6re i iops eller bytes. Men de glemmer latency og udnyttelse af diskene. Disse er vigtigere parametre, som g\u00f8r det muligt at vurdere, hvor belastede vores diske er, og hvor meget de bremser. <strong>Hvis vi har h\u00f8j latency, betyder det, at der er problemer med diskene. Hvis vi har h\u00f8j udnyttelse, betyder det, at diskene ikke kan klare opgaven.<\/strong> Dette er mere kvalitetsegnede karakteristika end b\u00e5ndbredde.<\/p>\n<p><\/p>\n<p>Selvom denne statistik ogs\u00e5 kan opn\u00e5s fra filsystemet \/proc, som det g\u00f8res for CPU-udnyttelse. Jeg ved ikke, hvorfor de ikke inkluderer disse oplysninger i overv\u00e5gninger. <strong>Men det er da vigtigt at have dette i sin overv\u00e5gning.<\/strong> <\/p>\n<p><\/p>\n<p>Det samme g\u00e6lder netv\u00e6rksinterfaces. <strong>Der er oplysninger om netv\u00e6rksb\u00e5ndbredde i pakker, i bytes, men alligevel er der ingen information om latency og ingen information om udnyttelse, selvom det ogs\u00e5 er nyttig information.<\/strong> <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Grundl\u00e6ggende overv\u00e5gning af PostgreSQL. Alexey Lesovsky\" src=\"\/wp-content\/uploads\/2020\/02\/3b9b2c300bcc8a30e1b6fae1a55e6f21.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Enhver overv\u00e5gning har mangler. Uanset hvilken overv\u00e5gning du v\u00e6lger, vil den altid ikke opfylde visse kriterier. Men alligevel udvikler de sig, nye funktioner og nye ting tilf\u00f8jes, s\u00e5 v\u00e6lg noget og finpuds det. <\/p>\n<p><\/p>\n<p>Og for at kunne finpudse skal man altid have et klart billede af, hvad den leverede statistik betyder og hvordan man kan bruge den til at l\u00f8se problemer. <\/p>\n<p><\/p>\n<p>Og nogle n\u00f8glepunkter:<\/p>\n<p><\/p>\n<ul>\n<li>Det er altid vigtigt at overv\u00e5ge tilg\u00e6ngeligheden og have dashboards, s\u00e5 du hurtigt kan vurdere, at alt er i orden med databasen. <\/li>\n<li>Det er altid vigtigt at have en forst\u00e5else for, hvilke kunder der arbejder med din database, s\u00e5 du kan identificere d\u00e5rlige kunder og ekskludere dem. <\/li>\n<li>Det er vigtigt at vurdere, hvordan disse kunder arbejder med dataene. Du skal have en forst\u00e5else af din arbejdsbelastning.<\/li>\n<li>Det er vigtigt at vurdere, hvordan denne arbejdsbelastning dannes, og hvilke foresp\u00f8rgsler der anvendes. Du kan vurdere foresp\u00f8rgslerne, optimere dem, refaktorere dem og bygge indekser til dem. Dette er meget vigtigt.<\/li>\n<li>Baggrundsprocesser kan negativt p\u00e5virke kundeforesp\u00f8rgsler, s\u00e5 det er vigtigt at overv\u00e5ge, s\u00e5 de ikke bruger for mange ressourcer.<\/li>\n<li>Systemmetrikker giver dig mulighed for at lave planer for skalering og \u00f8gning af kapaciteten p\u00e5 dine servere, s\u00e5 det er ogs\u00e5 vigtigt at overv\u00e5ge og vurdere dem.<\/li>\n<\/ul>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Grundl\u00e6ggende overv\u00e5gning af PostgreSQL. Alexey Lesovsky\" src=\"\/wp-content\/uploads\/2020\/02\/7ece1ec5ffc67d68697c0932a2fbf7db.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Hvis du er interesseret i dette emne, kan du f\u00f8lge disse links.<br \/>\n<noindex><a rel=\"nofollow\" href=\"http:\/\/bit.do\/stats_collector\">http:\/\/bit.do\/stats_collector<\/a><\/noindex> \u2014 det er den officielle dokumentation til statistikindsamlere. Der er en beskrivelse af alle statistiske visninger og beskrivelse af alle felter. Du kan l\u00e6se dem, forst\u00e5 dem og analysere dem. Og p\u00e5 baggrund af dem kan du bygge dine egne grafer og tilf\u00f8je dem til dine overv\u00e5gningssystemer. <\/p>\n<p><\/p>\n<p>Eksempler p\u00e5 foresp\u00f8rgsler:<br \/>\n<noindex><a rel=\"nofollow\" href=\"http:\/\/bit.do\/dataegret_sql\">http:\/\/bit.do\/dataegret_sql<\/a><\/noindex><br \/>\n<noindex><a rel=\"nofollow\" href=\"http:\/\/bit.do\/lesovsky_sql\">http:\/\/bit.do\/lesovsky_sql<\/a><\/noindex><\/p>\n<p><\/p>\n<p>Dette er vores virksomheders repository og mit eget. Der er eksempler p\u00e5 foresp\u00f8rgsler. Der er ikke foresp\u00f8rgsler af typen select* from noget som helst. Der er allerede klare foresp\u00f8rgsler med joins og anvendelse af interessante funktioner, der g\u00f8r r\u00e5 tal til l\u00e6selige, brugbare v\u00e6rdier, alts\u00e5 bytes, tid. Du kan udforske dem, se p\u00e5 dem, analysere dem, tilf\u00f8je dem til dine overv\u00e5gningssystemer og bygge dine egne overv\u00e5gningssystemer baseret p\u00e5 dem. <\/p>\n<p><\/p>\n<h4 id=\"voprosy\">Sp\u00f8rgsm\u00e5l<\/h4>\n<p><\/p>\n<p>Sp\u00f8rgsm\u00e5l: Du sagde, at du ikke ville reklamerer for m\u00e6rker, men jeg er stadig interesseret \u2013 hvilke dashboards bruger du i dine projekter?<br \/>\nSvar: Forskelligt. Nogle gange kommer vi til en kunde, og de har allerede deres eget overv\u00e5gningssystem. Og vi r\u00e5dgiver kunden om, hvad der skal tilf\u00f8jes til deres overv\u00e5gning. Det v\u00e6rste er med Zabbix. Fordi det ikke har mulighed for at opbygge TopN-grafer. Vi bruger selv <noindex><a rel=\"nofollow\" href=\"https:\/\/okmeter.io\/\">Okmeter<\/a><\/noindex>, fordi vi r\u00e5dgav disse fyre om overv\u00e5gning. De lavede overv\u00e5gningssystemer til PostgreSQL baseret p\u00e5 vores specifikationer. Jeg skriver mit eget pet-project, som indsamler data via Prometheus og visualiserer dem i <noindex><a rel=\"nofollow\" href=\"https:\/\/grafana.com\/\">Grafana<\/a><\/noindex>. Jeg har til opgave at lave min egen eksport\u00f8r i Prometheus og derefter visualisere alt i Grafana.<\/p>\n<p><\/p>\n<p>Sp\u00f8rgsm\u00e5l: Findes der nogen alternativer til AWR-rapporter eller ... aggregationer? Kender du til noget s\u00e5dant?<br \/>\nSvar: Ja, jeg ved, hvad AWR er, det er en fantastisk ting. Der findes faktisk mange forskellige l\u00f8sninger, der implementerer en nogenlunde lignende model. Med bestemte intervaller logges nogle baselines i den samme PostgreSQL eller i et separat lager. De kan findes via Google, og de eksisterer. En af udviklerne af s\u00e5dan en l\u00f8sning er aktiv p\u00e5 forumet sql.ru i tr\u00e5den om PostgreSQL. Du kan fange ham der. Ja, s\u00e5danne l\u00f8sninger er der, og de kan bruges. Plus, jeg arbejder ogs\u00e5 p\u00e5 en l\u00f8sning, der g\u00f8r det samme. <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/lesovsky\/pgcenter\">pgCenter<\/a><\/noindex> Jeg skriver ogs\u00e5 noget, der muligg\u00f8r det samme.<\/p>\n<p><\/p>\n<p>P.S.1 Hvis du bruger postgres_exporter, hvilken dashboard bruger du? Der er flere forskellige. De er allerede for\u00e6ldede. M\u00e5ske kunne f\u00e6llesskabet skabe en opdateret skabelon?<\/p>\n<p><\/p>\n<p>P.S.2 Jeg har fjernet pganalyze, da det er et propriet\u00e6rt SaaS-tilbud, der fokuserer p\u00e5 performancesporing og automatiserede tuningforslag.<\/p>\n<p class=\"for_users_only_msg\">Kun registrerede brugere kan deltage i unders\u00f8gelsen. <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/auth\/login\/\">Log ind<\/a><\/noindex>, please.<\/p>\n<h2 class=\"default-block__polling-title\">Hvilken self-hosted overv\u00e5gning af PostgreSQL (med dashboard) synes du er den bedste?<\/h2>\n<ul class=\"poll-result\">\n<li class=\"poll-result__item\">\n<p>                <strong class=\"poll-result__data-percent  poll-result__data-percent_winner\">30,0%<\/strong>Zabbix + tilf\u00f8jelser fra Alexey Lesovsky eller zabbix 4.4 eller libzbxpgsql + zabbix libzbxpgsql + zabbix3<\/p>\n<\/li>\n<li class=\"poll-result__item\">\n<p>                <strong class=\"poll-result__data-percent\">0,0%<\/strong>https:\/\/github.com\/lesovsky\/pgcenter0<\/p>\n<\/li>\n<li class=\"poll-result__item\">\n<p>                <strong class=\"poll-result__data-percent\">0,0%<\/strong>https:\/\/github.com\/pg-monz\/pg_monz0<\/p>\n<\/li>\n<li class=\"poll-result__item\">\n<p>                <strong class=\"poll-result__data-percent\">20,0%<\/strong>https:\/\/github.com\/cybertec-postgresql\/pgwatch22<\/p>\n<\/li>\n<li class=\"poll-result__item\">\n<p>                <strong class=\"poll-result__data-percent\">20,0%<\/strong>https:\/\/github.com\/postgrespro\/mamonsu2<\/p>\n<\/li>\n<li class=\"poll-result__item\">\n<p>                <strong class=\"poll-result__data-percent\">0,0%<\/strong>https:\/\/www.percona.com\/doc\/percona-monitoring-and-management\/conf-postgres.html0<\/p>\n<\/li>\n<li class=\"poll-result__item\">\n<p>                <strong class=\"poll-result__data-percent\">10,0%<\/strong>pganalyze er et propriet\u00e6rt SaaS \u2013 kan ikke fjerne det.<\/p>\n<\/li>\n<li class=\"poll-result__item\">\n<p>                <strong class=\"poll-result__data-percent\">10,0%<\/strong>https:\/\/github.com\/powa-team\/powa1<\/p>\n<\/li>\n<li class=\"poll-result__item\">\n<p>                <strong class=\"poll-result__data-percent\">0,0%<\/strong>https:\/\/github.com\/darold\/pgbadger0<\/p>\n<\/li>\n<li class=\"poll-result__item\">\n<p>                <strong class=\"poll-result__data-percent\">0,0%<\/strong>https:\/\/github.com\/darold\/pgcluu0<\/p>\n<\/li>\n<li class=\"poll-result__item\">\n<p>                <strong class=\"poll-result__data-percent\">0,0%<\/strong>https:\/\/github.com\/zalando\/PGObserver0<\/p>\n<\/li>\n<li class=\"poll-result__item\">\n<p>                <strong class=\"poll-result__data-percent\">10,0%<\/strong>https:\/\/github.com\/spotify\/postgresql-metrics1<\/p>\n<\/li>\n<\/ul>\n<p>    10 brugere har stemt. 26 brugere har undladt at stemme.<br \/>\n<br \/>Kilde: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/486710\/\">habr.com<\/a><\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u041f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u044e \u043e\u0437\u043d\u0430\u043a\u043e\u043c\u0438\u0442\u044c\u0441\u044f \u0441 \u0440\u0430\u0441\u0448\u0438\u0444\u0440\u043e\u0432\u043a\u043e\u0439 \u0434\u043e\u043a\u043b\u0430\u0434\u0430 \u0410\u043b\u0435\u043a\u0441\u0435\u0439 \u041b\u0435\u0441\u043e\u0432\u0441\u043a\u0438\u0439 \u0438\u0437 Data Egret &quot;\u041e\u0441\u043d\u043e\u0432\u044b \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433\u0430 PostgreSQL&quot; \u0412 \u044d\u0442\u043e\u043c \u0434\u043e\u043a\u043b\u0430\u0434\u0435 \u0410\u043b\u0435\u043a\u0441\u0435\u0439 \u041b\u0435\u0441\u043e\u0432\u0441\u043a\u0438\u0439 \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0435\u0442 \u043e \u043a\u043b\u044e\u0447\u0435\u0432\u044b\u0445 \u043c\u043e\u043c\u0435\u043d\u0442\u0430\u0445 \u043f\u043e\u0441\u0442\u0433\u0440\u0435\u0441\u043e\u0432\u043e\u0439 \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0438, \u0447\u0442\u043e \u043e\u043d\u0438 \u043e\u0437\u043d\u0430\u0447\u0430\u044e\u0442, \u0438 \u043f\u043e\u0447\u0435\u043c\u0443 \u043e\u043d\u0438 \u0434\u043e\u043b\u0436\u043d\u044b \u043f\u0440\u0438\u0441\u0443\u0442\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u0432 \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433\u0435; \u043e \u0442\u043e\u043c, \u043a\u0430\u043a\u0438\u0435 \u0433\u0440\u0430\u0444\u0438\u043a\u0438 \u0434\u043e\u043b\u0436\u043d\u044b \u0431\u044b\u0442\u044c \u0432 \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433\u0435, \u043a\u0430\u043a \u0438\u0445 \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0438 \u043a\u0430\u043a \u0438\u043d\u0442\u0435\u0440\u043f\u0440\u0435\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c. \u0414\u043e\u043a\u043b\u0430\u0434 \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u043b\u0435\u0437\u0435\u043d \u0430\u0434\u043c\u0438\u043d\u0438\u0441\u0442\u0440\u0430\u0442\u043e\u0440\u0430\u043c \u0431\u0430\u0437 \u0434\u0430\u043d\u043d\u044b\u0445, \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u043c [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-56075","post","type-post","status-publish","format-standard","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.3 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u041f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u044e \u043e\u0437\u043d\u0430\u043a\u043e\u043c\u0438\u0442\u044c\u0441\u044f \u0441 \u0440\u0430\u0441\u0448\u0438\u0444\u0440\u043e\u0432\u043a\u043e\u0439 \u0434\u043e\u043a\u043b\u0430\u0434\u0430 \u0410\u043b\u0435\u043a\u0441\u0435\u0439 \u041b\u0435\u0441\u043e\u0432\u0441\u043a\u0438\u0439 \u0438\u0437 Data Egret &quot;\u041e\u0441\u043d\u043e\u0432\u044b \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433\u0430 PostgreSQL&quot; \u0412 \u044d\u0442\u043e\u043c \u0434\u043e\u043a\u043b\u0430\u0434\u0435 \u0410\u043b\u0435\u043a\u0441\u0435\u0439 \u041b\u0435\u0441\u043e\u0432\u0441\u043a\u0438\u0439 \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0435\u0442 \u043e \u043a\u043b\u044e\u0447\u0435\u0432\u044b\u0445 \u043c\u043e\u043c\u0435\u043d\u0442\u0430\u0445 \u043f\u043e\u0441\u0442\u0433\u0440\u0435\u0441\u043e\u0432\u043e\u0439.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/da\/blog\/administrirovanie\/osnovy-monitoringa-postgresql-aleksej-lesovskij\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.3\" \/>\n\t\t<meta property=\"og:locale\" content=\"da_DK\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47\u041e\u0441\u043d\u043e\u0432\u044b \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433\u0430 PostgreSQL. \u0410\u043b\u0435\u043a\u0441\u0435\u0439 \u041b\u0435\u0441\u043e\u0432\u0441\u043a\u0438\u0439 | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u041f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u044e \u043e\u0437\u043d\u0430\u043a\u043e\u043c\u0438\u0442\u044c\u0441\u044f \u0441 \u0440\u0430\u0441\u0448\u0438\u0444\u0440\u043e\u0432\u043a\u043e\u0439 \u0434\u043e\u043a\u043b\u0430\u0434\u0430 \u0410\u043b\u0435\u043a\u0441\u0435\u0439 \u041b\u0435\u0441\u043e\u0432\u0441\u043a\u0438\u0439 \u0438\u0437 Data Egret &quot;\u041e\u0441\u043d\u043e\u0432\u044b \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433\u0430 PostgreSQL&quot; \u0412 \u044d\u0442\u043e\u043c \u0434\u043e\u043a\u043b\u0430\u0434\u0435 \u0410\u043b\u0435\u043a\u0441\u0435\u0439 \u041b\u0435\u0441\u043e\u0432\u0441\u043a\u0438\u0439 \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0435\u0442 \u043e \u043a\u043b\u044e\u0447\u0435\u0432\u044b\u0445 \u043c\u043e\u043c\u0435\u043d\u0442\u0430\u0445 \u043f\u043e\u0441\u0442\u0433\u0440\u0435\u0441\u043e\u0432\u043e\u0439.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/da\/blog\/administrirovanie\/osnovy-monitoringa-postgresql-aleksej-lesovskij\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2020-02-03T21:00:00+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-02-18T11:04:16+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47Grundl\u00e6ggende overv\u00e5gning af PostgreSQL. Alexey Lesovsky | ProHoster","description":"Jeg foresl\u00e5r, at du ser n\u00e6rmere p\u00e5 opl\u00e6gget fra Alexey Lesovsky fra Data Egret \"Grundl\u00e6ggende overv\u00e5gning af PostgreSQL\". I dette opl\u00e6g vil Alexey Lesovsky fort\u00e6lle om de centrale punkter i PostgreSQL.","canonical_url":"https:\/\/prohoster.info\/da\/blog\/administrirovanie\/osnovy-monitoringa-postgresql-aleksej-lesovskij","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"da_DK","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47\u041e\u0441\u043d\u043e\u0432\u044b \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433\u0430 PostgreSQL. \u0410\u043b\u0435\u043a\u0441\u0435\u0439 \u041b\u0435\u0441\u043e\u0432\u0441\u043a\u0438\u0439 | ProHoster","og:description":"\u041f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u044e \u043e\u0437\u043d\u0430\u043a\u043e\u043c\u0438\u0442\u044c\u0441\u044f \u0441 \u0440\u0430\u0441\u0448\u0438\u0444\u0440\u043e\u0432\u043a\u043e\u0439 \u0434\u043e\u043a\u043b\u0430\u0434\u0430 \u0410\u043b\u0435\u043a\u0441\u0435\u0439 \u041b\u0435\u0441\u043e\u0432\u0441\u043a\u0438\u0439 \u0438\u0437 Data Egret &quot;\u041e\u0441\u043d\u043e\u0432\u044b \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433\u0430 PostgreSQL&quot; \u0412 \u044d\u0442\u043e\u043c \u0434\u043e\u043a\u043b\u0430\u0434\u0435 \u0410\u043b\u0435\u043a\u0441\u0435\u0439 \u041b\u0435\u0441\u043e\u0432\u0441\u043a\u0438\u0439 \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0435\u0442 \u043e \u043a\u043b\u044e\u0447\u0435\u0432\u044b\u0445 \u043c\u043e\u043c\u0435\u043d\u0442\u0430\u0445 \u043f\u043e\u0441\u0442\u0433\u0440\u0435\u0441\u043e\u0432\u043e\u0439.","og:url":"https:\/\/prohoster.info\/da\/blog\/administrirovanie\/osnovy-monitoringa-postgresql-aleksej-lesovskij","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2020-02-03T21:00:00+00:00","article:modified_time":"2020-02-18T11:04:16+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"56075","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":null,"breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-02-28 19:31:43","updated":"2022-09-29 10:21:06","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/posts\/56075","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/comments?post=56075"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/posts\/56075\/revisions"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/media?parent=56075"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/categories?post=56075"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/tags?post=56075"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}