{"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\/es\/blog\/administrirovanie\/osnovy-monitoringa-postgresql-aleksej-lesovskij","title":{"rendered":"Fundamentos de monitoreo de PostgreSQL. Alexey Lesovsky","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><strong>Te invito a revisar la transcripci\u00f3n de la presentaci\u00f3n de Alexey Lesovski de Data Egret \"Fundamentos de la monitorizaci\u00f3n de PostgreSQL\"<\/strong><\/p>\n<p><\/p>\n<p>En esta presentaci\u00f3n, Alexey Lesovski abordar\u00e1 los aspectos clave de la estad\u00edstica de PostgreSQL, lo que significan y por qu\u00e9 deben estar presentes en la monitorizaci\u00f3n; tambi\u00e9n discutir\u00e1 qu\u00e9 gr\u00e1ficos deben incluirse en la monitorizaci\u00f3n, c\u00f3mo a\u00f1adirlos y c\u00f3mo interpretarlos. La charla ser\u00e1 \u00fatil para administradores de bases de datos, administradores de sistemas y desarrolladores interesados en la resoluci\u00f3n de problemas de PostgreSQL.<\/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=\"Reproducir 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=\"Fundamentos de monitoreo de PostgreSQL. Alexey Lesovsky\" src=\"\/wp-content\/uploads\/2020\/02\/07b4739a84eb36c84e0c663c5d721435.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Me llamo Alexey Lesovsky, represento a la empresa Data Egret. <\/p>\n<p><\/p>\n<p>Unas palabras sobre m\u00ed. Comenc\u00e9 hace mucho tiempo como administrador de sistemas. <\/p>\n<p><\/p>\n<p>Administr\u00e9 diversas distribuciones de Linux, ocup\u00e1ndome de cosas como virtualizaci\u00f3n, monitoreo, trabajando con proxies, etc. Pero en alg\u00fan momento me dediqu\u00e9 m\u00e1s a las bases de datos, PostgreSQL. Me encantaba. Y poco a poco, pas\u00e9 la mayor parte de mi tiempo laboral trabajando con PostgreSQL. As\u00ed, gradualmente me convert\u00ed en DBA de PostgreSQL.<\/p>\n<p><\/p>\n<p>A lo largo de mi carrera, siempre me han interesado los temas de estad\u00edstica, monitoreo y obtenci\u00f3n de telemetr\u00eda. Cuando era administrador de sistemas, trabaj\u00e9 mucho con Zabbix. Y escrib\u00ed un peque\u00f1o conjunto de scripts como <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/lesovsky\/zabbix-extensions\">zabbix-extensions<\/a><\/noindex>. Fue bastante popular en su momento. Y se pod\u00eda monitorear cosas muy diversas, no solo Linux, sino tambi\u00e9n diferentes componentes.<\/p>\n<p><\/p>\n<p>Ahora trabajo con PostgreSQL. Estoy escribiendo otra herramienta que permite trabajar con la estad\u00edstica de PostgreSQL. Se llama <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/lesovsky\/pgcenter\">pgCenter<\/a><\/noindex> (art\u00edculo en Habr \u2014 <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/425083\/\">Estad\u00edstica de Postgres sin nervios ni complicaciones<\/a><\/noindex>). <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Fundamentos de monitoreo de PostgreSQL. Alexey Lesovsky\" src=\"\/wp-content\/uploads\/2020\/02\/10f619998e38e7dce6c2b042565c6aee.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Una breve introducci\u00f3n. \u00bfCu\u00e1les son las situaciones que enfrentan nuestros clientes? Ocurre alg\u00fan tipo de accidente relacionado con la base de datos. Y cuando ya se ha recuperado la base de datos, el jefe del departamento o el jefe de desarrollo dice: \u00abAmigos, necesitamos monitorear la base de datos, porque algo malo ha sucedido y debemos asegurarnos de que esto no vuelva a ocurrir en el futuro\u00bb. Y aqu\u00ed comienza un interesante proceso de elecci\u00f3n de un sistema de monitoreo o la adaptaci\u00f3n de un sistema de monitoreo existente para poder monitorear nuestra base de datos: PostgreSQL, MySQL o alguna otra. Y los colegas comienzan a proponer: \u00abHe o\u00eddo que hay una cierta base de datos. Vamos a utilizarla\u00bb. Los colegas comienzan a discutir entre ellos. Y al final resulta que elegimos alguna base de datos, pero el monitoreo de PostgreSQL en ella est\u00e1 bastante limitado y siempre hay que modificar algo. Tomar ciertos repositorios de GitHub, clonarlos, adaptar scripts, ajustarlos de alguna manera. Y al final, esto resulta en un trabajo manual. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Fundamentos de monitoreo de PostgreSQL. Alexey Lesovsky\" src=\"\/wp-content\/uploads\/2020\/02\/6a36a566c8c9e155d7b99e2adaf9e70c.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Por lo tanto, en esta presentaci\u00f3n intentar\u00e9 brindarles algunos conocimientos sobre c\u00f3mo elegir un monitoreo no solo para PostgreSQL, sino tambi\u00e9n para bases de datos en general. Y proporcionar los conocimientos que les permitan mejorar su monitoreo, para obtener alg\u00fan beneficio, para poder monitorear su base de datos de manera efectiva, y prevenir a tiempo posibles situaciones de emergencia que puedan surgir. <\/p>\n<p><\/p>\n<p>Las ideas presentadas en esta exposici\u00f3n pueden adaptarse directamente a cualquier base de datos, ya sea un SGBD o noSQL. Por lo tanto, no se limita solo a PostgreSQL, sino que habr\u00e1 muchas recetas sobre c\u00f3mo implementarlo en PostgreSQL. Habr\u00e1 ejemplos de consultas, ejemplos de entidades que existen en PostgreSQL para monitoreo. Y si su SGBD tiene caracter\u00edsticas similares que permiten integrarlas en el monitoreo, tambi\u00e9n puede adaptarlas, a\u00f1adirlas y ser\u00e1 excelente.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Fundamentos de monitoreo de PostgreSQL. Alexey Lesovsky\" src=\"\/wp-content\/uploads\/2020\/02\/412766f755018e76ac04c0e399361f4d.jpg\" style=\"display:block;margin: 0 auto;\" \/>En la presentaci\u00f3n no hablar\u00e9<br \/>\nsobre c\u00f3mo recopilar y almacenar m\u00e9tricas. No dir\u00e9 nada sobre el post-procesamiento de datos ni su presentaci\u00f3n al usuario. Y no hablar\u00e9 sobre alertas.<br \/>\nA lo largo de la narrativa, ir\u00e9 mostrando diferentes capturas de pantalla de los monitoreos existentes, y las criticar\u00e9 de alguna manera. Sin embargo, tratar\u00e9 de no mencionar marcas para no hacer publicidad ni antireclamo a estos productos. Por lo tanto, todas las coincidencias son aleatorias y quedan a su imaginaci\u00f3n.<br \/>\n<img decoding=\"async\" alt=\"Fundamentos de monitoreo de PostgreSQL. Alexey Lesovsky\" src=\"\/wp-content\/uploads\/2020\/02\/e1c6ba71914b5c133f37a76484768d5b.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nPara empezar, aclaremos qu\u00e9 es el monitoreo. El monitoreo es algo muy importante que se debe tener. Todos lo entienden. Pero al mismo tiempo, el monitoreo no se considera un producto comercial y no influye directamente en las ganancias de la empresa, por lo que siempre se le presta atenci\u00f3n de manera residual. Si tenemos tiempo, trabajamos en el monitoreo; si no hay tiempo, bien, lo dejamos en el backlog y volveremos a estas tareas alg\u00fan d\u00eda. <\/p>\n<p><\/p>\n<p>Por lo tanto, de nuestra experiencia al llegar a los clientes, el monitoreo a menudo est\u00e1 subdesarrollado y carece de elementos interesantes que nos ayuden a mejorar nuestro trabajo con la base de datos. Por eso, el monitoreo siempre necesita ser perfeccionado. <\/p>\n<p><\/p>\n<p>Las bases de datos son cosas complejas que tambi\u00e9n necesitan ser monitoreadas, porque las bases de datos son almacenes de informaci\u00f3n. Y la informaci\u00f3n es muy importante para la empresa; no se puede perder de ninguna manera. Pero al mismo tiempo, las bases de datos son piezas de software muy complejas. Est\u00e1n compuestas por una gran cantidad de componentes. Y muchos de estos componentes necesitan ser monitoreados. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Fundamentos de monitoreo de PostgreSQL. Alexey Lesovsky\" src=\"\/wp-content\/uploads\/2020\/02\/d2293a3d5089c320aa94471039a6023f.jpg\" style=\"display:block;margin: 0 auto;\" \/>Si hablamos espec\u00edficamente de PostgreSQL, se puede representar como un esquema que consta de muchos componentes. Estos componentes interact\u00faan entre s\u00ed. Al mismo tiempo, en PostgreSQL existe lo que se llama el subsistema Stats Collector, que permite recopilar estad\u00edsticas sobre el funcionamiento de estos subsistemas y proporcionar una interfaz al administrador o usuario para que pueda ver estas estad\u00edsticas. <\/p>\n<p><\/p>\n<p>Estas estad\u00edsticas se presentan en forma de un conjunto de funciones y vistas (views). Tambi\u00e9n se pueden llamar tablas. Es decir, con un cliente psql com\u00fan, puede conectarse a la base de datos, hacer un select a estas funciones y vistas, y obtener cifras concretas sobre el funcionamiento de los subsistemas de PostgreSQL. <\/p>\n<p><\/p>\n<p>Puede agregar estas cifras a su sistema de monitoreo favorito, dibujar gr\u00e1ficos, agregar funciones y obtener an\u00e1lisis a largo plazo. <\/p>\n<p><\/p>\n<p>Sin embargo, en este informe no abordar\u00e9 todas estas funciones de manera exhaustiva, ya que eso podr\u00eda llevar todo un d\u00eda. Me centrar\u00e9 en literal dos o tres cosas y explicar\u00e9 c\u00f3mo ayudan a mejorar la monitorizaci\u00f3n.<br \/>\n<img decoding=\"async\" alt=\"Fundamentos de monitoreo de PostgreSQL. Alexey Lesovsky\" src=\"\/wp-content\/uploads\/2020\/02\/13e1b9dc97deeb164576818eb6be17fb.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nY si hablamos sobre la monitorizaci\u00f3n de la base de datos, \u00bfqu\u00e9 es lo que hay que monitorear? En primer lugar, hay que monitorear la disponibilidad, ya que una base de datos es un servicio que proporciona acceso a datos a los clientes, y necesitamos vigilar su disponibilidad, as\u00ed como algunas caracter\u00edsticas cualitativas y cuantitativas. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Fundamentos de monitoreo de PostgreSQL. Alexey Lesovsky\" src=\"\/wp-content\/uploads\/2020\/02\/eb54f240bfaf74a356cf87e66ed9f83b.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Tambi\u00e9n es necesario monitorear a los clientes que se conectan a nuestra base de datos, porque pueden ser tanto clientes normales como clientes da\u00f1inos que pueden perjudicar la base de datos. Tambi\u00e9n hay que vigilarlos y rastrear su actividad.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Fundamentos de monitoreo de PostgreSQL. Alexey Lesovsky\" src=\"\/wp-content\/uploads\/2020\/02\/4ef57fc16b0b0974f5d66568534fad96.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Cuando los clientes se conectan a la base de datos, es evidente que comienzan a trabajar con nuestros datos, por lo que necesitamos monitorear tambi\u00e9n c\u00f3mo interact\u00faan los clientes con los datos: con qu\u00e9 tablas, y en menor medida, con qu\u00e9 \u00edndices. Es decir, tenemos que evaluar la carga de trabajo (workload) que generan nuestros clientes.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Fundamentos de monitoreo de PostgreSQL. Alexey Lesovsky\" src=\"\/wp-content\/uploads\/2020\/02\/ef7ee6e5c3b66bb14adc3d8b0c34f4f7.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Pero la carga de trabajo tambi\u00e9n consiste, por supuesto, en consultas. Las aplicaciones se conectan a la base y acceden a los datos mediante consultas, por lo que es importante evaluar qu\u00e9 consultas tenemos en nuestra base de datos, monitorizar su adecuaci\u00f3n, asegurarnos de que no est\u00e9n mal escritas, y que algunas opciones necesiten ser reescritas para que funcionen m\u00e1s r\u00e1pido y con mejor rendimiento. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Fundamentos de monitoreo de PostgreSQL. Alexey Lesovsky\" src=\"\/wp-content\/uploads\/2020\/02\/cf74205ff688659cae41e4b0cbc4525d.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Y dado que estamos hablando de bases de datos, hay que considerar que siempre hay procesos en segundo plano. Los procesos en segundo plano permiten mantener el rendimiento de la base de datos en un buen nivel, y por lo tanto requieren una cierta cantidad de recursos para su funcionamiento. Al mismo tiempo, pueden cruzarse con los recursos de las consultas de los clientes, por lo que el trabajo intensivo de los procesos en segundo plano puede afectar directamente el rendimiento de las consultas de los clientes. Por eso tambi\u00e9n hay que monitorearlos y asegurarse de que no haya desequilibrios relacionados con los procesos en segundo plano. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Fundamentos de monitoreo de PostgreSQL. Alexey Lesovsky\" src=\"\/wp-content\/uploads\/2020\/02\/50f44ab160e889882210529fa9b7fc57.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Y todo esto en t\u00e9rminos de monitoreo de bases de datos permanece en la m\u00e9trica del sistema. Pero considerando que la mayor parte de nuestra infraestructura se est\u00e1 trasladando a la nube, las m\u00e9tricas del sistema de un host individual siempre quedan en segundo plano. Sin embargo, en bases de datos siguen siendo relevantes y, por supuesto, tambi\u00e9n es necesario monitorear estas m\u00e9tricas del sistema. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Fundamentos de monitoreo de PostgreSQL. Alexey Lesovsky\" src=\"\/wp-content\/uploads\/2020\/02\/71d119b3ef5d5b9eee5510a43ef0e16d.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Con las m\u00e9tricas del sistema m\u00e1s o menos todo est\u00e1 bien, todos los sistemas modernos de monitoreo ya admiten estas m\u00e9tricas, pero en general hay algunos componentes que a\u00fan faltan y se necesita a\u00f1adir ciertas cosas. Tambi\u00e9n voy a mencionarlos, habr\u00e1 unas diapositivas al respecto. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Fundamentos de monitoreo de PostgreSQL. Alexey Lesovsky\" src=\"\/wp-content\/uploads\/2020\/02\/e38d506da3a168913952a4015ba06e3e.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nEl primer punto del plan es la disponibilidad. \u00bfQu\u00e9 es la disponibilidad? La disponibilidad, en mi entendimiento, es la capacidad de la base de datos para manejar conexiones, es decir, la base de datos est\u00e1 activa, acepta conexiones de los clientes como un servicio. Y esta disponibilidad se puede evaluar con ciertas caracter\u00edsticas. Estas caracter\u00edsticas son muy convenientes para mostrar en los dashboards. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Fundamentos de monitoreo de PostgreSQL. Alexey Lesovsky\" src=\"\/wp-content\/uploads\/2020\/02\/befa103d55797b6ec9884541ca70c05a.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nTodos saben qu\u00e9 es un dashboard. Es cuando echas un vistazo a la pantalla donde se resume la informaci\u00f3n necesaria. Y ya puedes determinar de inmediato si hay un problema en la base de datos o no.<br \/>\nPor lo tanto, la disponibilidad de la base de datos y otras caracter\u00edsticas clave siempre deben mostrarse en los dashboards, para que esta informaci\u00f3n est\u00e9 a mano, siempre cerca de ti. Algunos detalles adicionales que ya ayudan en la investigaci\u00f3n de incidentes o situaciones de emergencia deben mostrarse en dashboards secundarios o esconderse en enlaces de drilldown que llevan a sistemas de monitoreo externos. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Fundamentos de monitoreo de PostgreSQL. Alexey Lesovsky\" src=\"\/wp-content\/uploads\/2020\/02\/6c595fdff1d0626b61bc76ad06299fb0.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ejemplo de un sistema de monitoreo conocido. Es un sistema de monitoreo muy impresionante. Recopila una gran cantidad de datos, pero desde mi punto de vista, tiene una concepci\u00f3n extra\u00f1a de los dashboards. Hay un enlace \u2018crear dashboard\u2019. Pero cuando creas un dashboard, est\u00e1s creando una lista compuesta por dos columnas, una lista de gr\u00e1ficos. Y cuando necesitas ver algo, comienzas a hacer clic con el rat\u00f3n, desplazarte, buscar el gr\u00e1fico que necesitas. Y esto lleva tiempo, es decir, no hay dashboards como tales. Solo hay listas de gr\u00e1ficos.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Fundamentos de monitoreo de PostgreSQL. Alexey Lesovsky\" src=\"\/wp-content\/uploads\/2020\/02\/0a82729df59b2e09741bd290e3fb4f29.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>\u00bfQu\u00e9 se debe agregar a estos paneles? Se puede comenzar con una caracter\u00edstica como el tiempo de respuesta. En PostgreSQL hay una vista pg_stat_statements. Por defecto, est\u00e1 desactivada, pero es una de las vistas del sistema m\u00e1s importantes que siempre se deben habilitar y utilizar. Esta almacena informaci\u00f3n sobre todas las consultas que se han ejecutado en la base de datos. <\/p>\n<p><\/p>\n<p>Por lo tanto, podemos partir de la idea de que se puede tomar el tiempo total de ejecuci\u00f3n de todas las consultas y dividirlo por el n\u00famero de consultas usando los campos mencionados anteriormente. Pero esto es solo una temperatura promedio. Tambi\u00e9n podemos considerar otros campos: el tiempo m\u00ednimo de ejecuci\u00f3n de las consultas, el m\u00e1ximo y el mediano. E incluso podemos construir percentiles, ya que PostgreSQL cuenta con funciones para ello. Y podemos obtener algunas cifras que caracterizan el tiempo de respuesta de nuestra base de datos en relaci\u00f3n con las consultas ya ejecutadas, es decir, no ejecutamos una consulta falsa 'select 1' y analizamos el tiempo de respuesta, sino que analizamos los tiempos de respuesta de consultas que ya se han realizado, ya sea representando un solo n\u00famero o construyendo un gr\u00e1fico a partir de ellos. <\/p>\n<p><\/p>\n<p>Tambi\u00e9n es importante monitorear la cantidad de errores que el sistema est\u00e1 generando en este momento. Para esto, se puede utilizar la vista pg_stat_database. Nos enfocamos en el campo xact_rollback. Este campo muestra no solo la cantidad de rollbacks que ocurren en la base, sino que tambi\u00e9n considera la cantidad de errores. En otras palabras, podemos mostrar este n\u00famero en nuestro panel y observar cu\u00e1ntos errores hay en este momento. Si hay muchos errores, es un buen motivo para revisar los registros y ver qu\u00e9 tipos de errores son y por qu\u00e9 est\u00e1n ocurriendo, y luego investigar y resolverlos.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Fundamentos de monitoreo de PostgreSQL. Alexey Lesovsky\" src=\"\/wp-content\/uploads\/2020\/02\/3ee7809fd203c03596633479f34dba12.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Se puede a\u00f1adir algo como un Tac\u00f3metro. Esto es la cantidad de transacciones por segundo y la cantidad de consultas por segundo. En otras palabras, puedes utilizar estos n\u00fameros como el rendimiento actual de tu base de datos y observar si hay picos en las consultas, picos en las transacciones o, por el contrario, si la base no est\u00e1 completamente cargada porque alg\u00fan backend se ha ca\u00eddo. Es importante siempre observar este n\u00famero y recordar que para nuestro proyecto, ese rendimiento es normal, mientras que los valores por encima o por debajo son problem\u00e1ticos y extra\u00f1os, lo que significa que hay que investigar por qu\u00e9 hay esos n\u00fameros.<\/p>\n<p><\/p>\n<p>Para evaluar la cantidad de transacciones, podemos volver a consultar la vista pg_stat_database. Podemos sumar el n\u00famero de commits y el n\u00famero de rollbacks para obtener la cantidad de transacciones por segundo. <\/p>\n<p><\/p>\n<p>\u00bfTodos entienden que en una transacci\u00f3n pueden incluirse varias consultas? Por eso, TPS y QPS son un poco diferentes. <\/p>\n<p><\/p>\n<p>La cantidad de consultas por segundo se puede obtener a trav\u00e9s de pg_stat_statements y simplemente calcular la suma de todas las consultas ejecutadas. Es claro que comparamos el valor actual con el anterior, restamos y obtenemos la delta, obteniendo as\u00ed la cantidad.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Fundamentos de monitoreo de PostgreSQL. Alexey Lesovsky\" src=\"\/wp-content\/uploads\/2020\/02\/d2e521bf6360aa5a34f3042281f9f902.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Se pueden agregar m\u00e9tricas adicionales si se desea, que tambi\u00e9n ayudan a evaluar la disponibilidad de nuestra base y a rastrear si ha habido alg\u00fan tiempo de inactividad. <\/p>\n<p><\/p>\n<p>Una de estas m\u00e9tricas es el uptime. Pero el uptime en PostgreSQL es un tema un poco complicado. A continuaci\u00f3n, explicar\u00e9 por qu\u00e9. Cuando PostgreSQL arranca, comienza a contabilizar el uptime. Sin embargo, si en alg\u00fan momento, por ejemplo, durante la noche, se ejecuta alguna tarea, y el OOM-killer finaliza forzosamente un proceso hijo de PostgreSQL, el sistema finaliza las conexiones de todos los clientes, restablece el \u00e1rea de memoria compartida y comienza la recuperaci\u00f3n desde el \u00faltimo punto de control. Durante este tiempo de recuperaci\u00f3n, la base no acepta conexiones, es decir, esta situaci\u00f3n se puede considerar como downtime. Sin embargo, el contador de uptime no se reiniciar\u00e1, porque cuenta el tiempo desde el inicio del postmaster desde el primer momento. Por lo tanto, se pueden pasar por alto tales situaciones.<\/p>\n<p><\/p>\n<p>Tambi\u00e9n se debe monitorear la cantidad de trabajadores de autovacuum. \u00bfTodos saben qu\u00e9 es el autovacuum en PostgreSQL? Es un subsistema interesante en PostgreSQL. Se han escrito muchos art\u00edculos sobre \u00e9l y se han realizado muchas presentaciones. Hay muchas discusiones sobre el vacuum y c\u00f3mo deber\u00eda funcionar. Muchos lo consideran un mal inevitable. Y as\u00ed es. Es una especie de recolector de basura que limpia las versiones obsoletas de filas que no son necesarias por ninguna de las transacciones y libera espacio en las tablas e \u00edndices para nuevas filas. <\/p>\n<p><\/p>\n<p>\u00bfPor qu\u00e9 es necesario monitorearlo? Porque el autovacuum a veces puede causar mucho da\u00f1o. Consume una gran cantidad de recursos, lo que afecta las consultas de los clientes. <\/p>\n<p><\/p>\n<p>Y se debe monitorear a trav\u00e9s de la vista pg_stat_activity, de la que hablar\u00e9 en la siguiente secci\u00f3n. Esta vista muestra la actividad actual en la base de datos. A trav\u00e9s de esta actividad, podemos rastrear la cantidad de procesos de limpieza (vacuum) que est\u00e1n funcionando en este momento. Podemos supervisar los procesos de limpieza y ver que si se supera el l\u00edmite, es una raz\u00f3n para revisar la configuraci\u00f3n de PostgreSQL y optimizar el funcionamiento del proceso de limpieza. <\/p>\n<p><\/p>\n<p><strong>Otra caracter\u00edstica de PostgreSQL es que PostgreSQL sufre mucho con transacciones que se prolongan. Especialmente, con transacciones que permanecen activas y no hacen nada. Estos son los llamados stat idle-in-transaction. Esta transacci\u00f3n mantiene bloqueos, impide el funcionamiento del proceso de limpieza. Y como resultado, las tablas se inflan y aumentan su tama\u00f1o. Y las consultas que trabajan con estas tablas comienzan a funcionar m\u00e1s lentamente, porque hay que mover todas las versiones antiguas de las filas de la memoria al disco y de regreso.<\/strong> Por lo tanto, el tiempo, la duraci\u00f3n de las transacciones m\u00e1s largas y las consultas m\u00e1s prolongadas del proceso de limpieza tambi\u00e9n deben ser monitoreados. <strong>Y si vemos algunos procesos que est\u00e1n funcionando durante mucho tiempo, 10-20-30 minutos para una carga OLTP, entonces ya debemos prestar atenci\u00f3n a ellos y finalizarlos forzosamente, o optimizar la aplicaci\u00f3n para que no se llamen y no se queden colgados tanto tiempo.<\/strong> Para una carga anal\u00edtica, 10-20-30 minutos es normal, a veces pueden ser a\u00fan m\u00e1s largas. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Fundamentos de monitoreo de PostgreSQL. Alexey Lesovsky\" src=\"\/wp-content\/uploads\/2020\/02\/736035b2ee6106b571ad6f84f2902d41.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nA continuaci\u00f3n, tenemos la opci\u00f3n con los clientes conectados. Cuando hemos formado el panel de control y hemos publicado las m\u00e9tricas clave de disponibilidad, tambi\u00e9n podemos agregar informaci\u00f3n adicional sobre los clientes conectados. <\/p>\n<p><\/p>\n<p>La informaci\u00f3n sobre los clientes conectados es importante porque, desde el punto de vista de PostgreSQL, los clientes pueden ser diferentes. Hay buenos clientes y hay malos clientes. <\/p>\n<p><\/p>\n<p>Un ejemplo sencillo. Por cliente entiendo una aplicaci\u00f3n. La aplicaci\u00f3n se conecta a la base de datos y comienza a enviar sus consultas; la base de datos las procesa y ejecuta, devolviendo los resultados al cliente. Estos son los clientes buenos y correctos. <\/p>\n<p><\/p>\n<p>Hay situaciones en las que un cliente se conecta, mantiene la conexi\u00f3n, pero no hace nada. Se encuentra en estado idle. <\/p>\n<p><\/p>\n<p>Pero hay clientes problem\u00e1ticos. Por ejemplo, un cliente se conecta, abre una transacci\u00f3n, hace algo en la base de datos y luego se va al c\u00f3digo, supongamos, para acceder a una fuente externa o para procesar los datos obtenidos. Pero no cierra la transacci\u00f3n. Y la transacci\u00f3n queda abierta en la base de datos, manteniendo un bloqueo en una fila. Este es un estado negativo. Y si, por alguna raz\u00f3n, la aplicaci\u00f3n falla por una excepci\u00f3n (Exception), la transacci\u00f3n puede quedarse abierta durante mucho tiempo. Esto afecta directamente el rendimiento de PostgreSQL. PostgreSQL funcionar\u00e1 m\u00e1s lento. Por eso es importante monitorear a estos clientes y finalizar su trabajo de manera forzada. Adem\u00e1s, es necesario optimizar la aplicaci\u00f3n para evitar tales situaciones. <\/p>\n<p><\/p>\n<p>Otros clientes problem\u00e1ticos son los clientes en espera. Pero se convierten en problem\u00e1ticos debido a las circunstancias. Por ejemplo, una transacci\u00f3n simple en espera: puede abrir una transacci\u00f3n, obtener bloqueos en ciertas filas, luego en alg\u00fan lugar del c\u00f3digo falla, y queda una transacci\u00f3n colgada. Llegar\u00e1 otro cliente, solicitar\u00e1 los mismos datos, pero se encontrar\u00e1 con un bloqueo porque la transacci\u00f3n colgada ya tiene bloqueos en algunas filas necesarias. Y la segunda transacci\u00f3n quedar\u00e1 en espera de que la primera transacci\u00f3n finalice o sea cerrada forzosamente por su administrador. De este modo, las transacciones en espera pueden acumularse y sobrepasar el l\u00edmite de conexiones a la base de datos. Y cuando se alcanza el l\u00edmite, la aplicaci\u00f3n ya no puede trabajar con la base. Esto es una situaci\u00f3n cr\u00edtica para el proyecto. Por lo tanto, es necesario monitorear a los clientes problem\u00e1ticos y reaccionar a tiempo. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Fundamentos de monitoreo de PostgreSQL. Alexey Lesovsky\" src=\"\/wp-content\/uploads\/2020\/02\/41eaa8fcb747bf5ca4e0d6d264d1e0ac.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Otro ejemplo de monitoreo. Y aqu\u00ed hay un buen panel de control. Hay informaci\u00f3n sobre las conexiones en la parte superior. Conexiones a la base de datos - 8. Y eso es todo. No tenemos informaci\u00f3n sobre qu\u00e9 clientes est\u00e1n activos, cu\u00e1les simplemente est\u00e1n inactivos, sin hacer nada. No hay informaci\u00f3n sobre transacciones colgadas ni sobre conexiones en espera, es decir, es una cifra que muestra el n\u00famero de conexiones y nada m\u00e1s. Y despu\u00e9s, adivinen ustedes.<br \/>\n<img decoding=\"async\" alt=\"Fundamentos de monitoreo de PostgreSQL. Alexey Lesovsky\" src=\"\/wp-content\/uploads\/2020\/02\/553a4b6432c308c0023e49c4a35aa0a1.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nPor lo tanto, para a\u00f1adir esta informaci\u00f3n a la monitorizaci\u00f3n, es necesario consultar la vista del sistema pg_stat_activity. Si pasas mucho tiempo en PostgreSQL, esta es una vista excelente que deber\u00eda convertirse en tu aliada, ya que muestra la actividad actual en PostgreSQL, es decir, lo que est\u00e1 sucediendo en \u00e9l. Cada proceso tiene una l\u00ednea separada que muestra informaci\u00f3n sobre ese proceso: desde qu\u00e9 host se realiz\u00f3 la conexi\u00f3n, bajo qu\u00e9 usuario, bajo qu\u00e9 nombre, cu\u00e1ndo se inici\u00f3 la transacci\u00f3n, qu\u00e9 consulta se est\u00e1 ejecutando actualmente y cu\u00e1l fue la \u00faltima consulta ejecutada. Y, por consiguiente, podemos evaluar el estado del cliente a trav\u00e9s del campo stat. En cierto modo, podemos hacer un agrupamiento por este campo y obtener las estad\u00edsticas actuales en la base de datos y el n\u00famero de conexiones que tienen ese stat en la base de datos. Los n\u00fameros obtenidos los podemos enviar a nuestra monitorizaci\u00f3n y graficar a partir de ellos.<br \/>\nTambi\u00e9n es importante evaluar la duraci\u00f3n de la transacci\u00f3n. Ya he mencionado que es fundamental evaluar la duraci\u00f3n de los vac\u00edos, pero las transacciones se eval\u00faan de la misma manera. Hay campos xact_start y query_start. Estos, en cierto modo, muestran el tiempo de inicio de la transacci\u00f3n y el tiempo de inicio de la consulta. Tomamos la funci\u00f3n now(), que muestra la marca de tiempo actual y restamos el timestamp de la transacci\u00f3n y de la consulta. Y obtenemos la duraci\u00f3n de la transacci\u00f3n, la duraci\u00f3n de la consulta. <\/p>\n<p><\/p>\n<p>Si vemos transacciones largas, debemos finalizarlas. <strong>Para una carga OLTP, las transacciones largas son superiores a 1-2-3 minutos.<\/strong>. <strong>Para una carga OLAP, las transacciones largas son normales, pero si se ejecutan durante m\u00e1s de dos horas, tambi\u00e9n es un indicio de que hay un desequilibrio en alg\u00fan lugar.<\/strong> <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Fundamentos de monitoreo de PostgreSQL. Alexey Lesovsky\" src=\"\/wp-content\/uploads\/2020\/02\/1f3caea3077c0c5c2bcf60ee2f1be884.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nCuando los clientes se conectan a la base de datos, comienzan a trabajar con nuestros datos. Acceden a las tablas, consultan los \u00edndices para obtener datos de la tabla. Y es importante evaluar c\u00f3mo los clientes interact\u00faan con estos datos.<\/p>\n<p><\/p>\n<p>Esto es necesario para evaluar nuestra carga de trabajo y comprender aproximadamente cu\u00e1les son nuestras tablas m\u00e1s \"calientes\". Por ejemplo, esto es \u00fatil en situaciones en las que queremos colocar tablas \"calientes\" en un almacenamiento SSD r\u00e1pido. Por otro lado, algunas tablas de archivo que ya no utilizamos desde hace tiempo se pueden mover a un archivo \"fr\u00edo\" en discos SATA y pueden permanecer all\u00ed, accediendo a ellas solo cuando sea necesario. <\/p>\n<p><\/p>\n<p>Tambi\u00e9n es \u00fatil para detectar anomal\u00edas despu\u00e9s de lanzamientos y despliegues. Supongamos que el proyecto ha lanzado alguna nueva caracter\u00edstica. Por ejemplo, se ha a\u00f1adido nueva funcionalidad para trabajar con la base de datos. Y si construimos gr\u00e1ficos del uso de las tablas, podremos detectar f\u00e1cilmente estas anomal\u00edas en esos gr\u00e1ficos. Por ejemplo, picos en las actualizaciones o picos en las eliminaciones. Eso ser\u00e1 muy evidente.<\/p>\n<p><\/p>\n<p>Tambi\u00e9n se pueden detectar anomal\u00edas en las estad\u00edsticas \"desviadas\". \u00bfQu\u00e9 significa esto? PostgreSQL tiene un planificador de consultas muy fuerte y eficiente. Los desarrolladores dedican mucho tiempo a su desarrollo. \u00bfC\u00f3mo funciona? Para construir buenos planes, PostgreSQL recopila estad\u00edsticas sobre la distribuci\u00f3n de datos en las tablas a intervalos y periodicidades espec\u00edficas. Estas son las estad\u00edsticas m\u00e1s frecuentes: la cantidad de valores \u00fanicos, informaci\u00f3n sobre NULL en la tabla, y mucha informaci\u00f3n m\u00e1s. <\/p>\n<p><\/p>\n<p>Bas\u00e1ndose en estas estad\u00edsticas, el planificador construye varias consultas, selecciona la m\u00e1s \u00f3ptima y utiliza este plan para ejecutar la consulta y devolver los datos. <\/p>\n<p><\/p>\n<p>A veces, las estad\u00edsticas \"fluyen\". La calidad y cantidad de los datos han cambiado en las tablas, pero la estad\u00edstica no se ha actualizado. Los planes formados pueden resultar no \u00f3ptimos. Y si nuestros planes resultan no \u00f3ptimos seg\u00fan la monitorizaci\u00f3n recopilada, podremos ver estas anomal\u00edas. Por ejemplo, donde los datos han cambiado cualitativamente y, en lugar del \u00edndice, se ha utilizado un escaneo secuencial de la tabla; es decir, si la consulta necesita devolver solo 100 filas (con un l\u00edmite de 100), se realizar\u00e1 un escaneo completo. Y esto siempre afecta negativamente al rendimiento. <\/p>\n<p><\/p>\n<p>Y podremos ver esto en la monitorizaci\u00f3n. Ya podremos observar esta consulta, realizar un explain para ella, recopilar estad\u00edsticas, construir un nuevo \u00edndice adicional. Y as\u00ed responder a este problema. Por lo tanto, esto es importante. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Fundamentos de monitoreo de PostgreSQL. Alexey Lesovsky\" src=\"\/wp-content\/uploads\/2020\/02\/a586b45241efc73b5c59b8e21b9c2629.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Otro ejemplo de monitorizaci\u00f3n. Creo que muchos lo reconocen, porque es muy popular. Quien lo utiliza en sus proyectos <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. Pero hay un inconveniente. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Fundamentos de monitoreo de PostgreSQL. Alexey Lesovsky\" src=\"\/wp-content\/uploads\/2020\/02\/5a9de42b009c7bb333ee72f01bb46fb9.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Hay varios gr\u00e1ficos. Y en forma de unidad se indican bytes, es decir, hay 5 gr\u00e1ficos. Estos son Insert data, Update data, Delete data, Fetch data y Return data. Como unidad de medida se indican bytes. Pero el hecho es que las estad\u00edsticas en PostgreSQL devuelven los datos en tuplas (filas). Y, en consecuencia, estos gr\u00e1ficos son una muy buena manera de subestimar su carga de trabajo varias veces, incluso decenas de veces, porque una tupla no es un byte, una tupla es una fila, que son muchos bytes y siempre de longitud variable. Es decir, calcular la carga de trabajo en bytes usando tuplas es una tarea irreal o muy complicada. Por lo tanto, cuando usas un panel de control o monitorizaci\u00f3n incorporada, siempre es importante entender que funcione correctamente y te devuelva datos evaluados de manera precisa. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Fundamentos de monitoreo de PostgreSQL. Alexey Lesovsky\" src=\"\/wp-content\/uploads\/2020\/02\/697ca274c58466beec45614e9d57bda7.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>\u00bfC\u00f3mo obtener estad\u00edsticas de estas tablas? Para esto, en PostgreSQL hay un cierto conjunto de vistas. Y la vista principal es <noindex><a rel=\"nofollow\" href=\"https:\/\/www.postgresql.org\/docs\/10\/monitoring-stats.html\">pg_stat_user_tables<\/a><\/noindex>. User_tables significa que son tablas creadas por el usuario. En contraste, hay vistas del sistema que son utilizadas por PostgreSQL mismo. Y hay una tabla consolidada Alltables, que incluye tanto las sistem\u00e1ticas como las de usuario. Puedes basarte en cualquiera de ellas, la que m\u00e1s te guste.<\/p>\n<p><\/p>\n<p>Por los campos mencionados arriba se puede estimar la cantidad de insert, update y delete. El ejemplo de panel de control que utilic\u00e9 utiliza precisamente estos campos para evaluar las caracter\u00edsticas de la carga de trabajo. Por lo tanto, tambi\u00e9n podemos basarnos en ellos. Pero hay que recordar que son tuplas, no bytes, as\u00ed que no podemos simplemente tomar y convertirlo en bytes.<\/p>\n<p><\/p>\n<p>Bas\u00e1ndonos en estos datos, podemos construir lo que se denomina tablas TopN. Por ejemplo, Top-5, Top-10. Y se pueden rastrear las tablas calientes que se utilizan m\u00e1s que las dem\u00e1s. Por ejemplo, las 5 tablas \"calientes\" por inserciones. Y con estos TopN, evaluamos nuestra carga de trabajo y podemos valorar los picos de carga de trabajo despu\u00e9s de diversas liberaciones, actualizaciones y despliegues. <\/p>\n<p><\/p>\n<p>Tambi\u00e9n es importante evaluar el tama\u00f1o de la tabla, porque a veces los desarrolladores lanzan una nueva funci\u00f3n y nuestras tablas empiezan a crecer en tama\u00f1o, ya que deciden a\u00f1adir un volumen adicional de datos, pero no pronostican c\u00f3mo esto afectar\u00e1 al tama\u00f1o de la base de datos. Estos casos tambi\u00e9n pueden ser sorpresas para nosotros. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Fundamentos de monitoreo de PostgreSQL. Alexey Lesovsky\" src=\"\/wp-content\/uploads\/2020\/02\/9b964b332210c5bef77f99dfa386a2b2.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Y ahora una peque\u00f1a pregunta para ustedes. \u00bfQu\u00e9 pregunta surge cuando notan una carga en el servidor con la base de datos? \u00bfCu\u00e1l es la siguiente pregunta que se les ocurre? <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Fundamentos de monitoreo de PostgreSQL. Alexey Lesovsky\" src=\"\/wp-content\/uploads\/2020\/02\/b72286a22e6e3ad0f1b6c8a478cf65b3.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Pero en realidad, surge la siguiente pregunta. \u00bfCu\u00e1les son las consultas que est\u00e1n causando la carga? Es decir, no es interesante observar los procesos que generan la carga. Est\u00e1 claro que si hay un host con base de datos, entonces se est\u00e1 ejecutando una base de datos ah\u00ed y es evidente que solo las bases de datos son las que la utilizan. Si abrimos Top, ver\u00edamos una lista de procesos en PostgreSQL que est\u00e1n haciendo algo. Desde Top no queda claro qu\u00e9 es lo que est\u00e1n haciendo. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Fundamentos de monitoreo de PostgreSQL. Alexey Lesovsky\" src=\"\/wp-content\/uploads\/2020\/02\/3d8c06dfe22d5fe93427055c39925a2a.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Por lo tanto, es necesario identificar aquellas consultas que generan la mayor carga, porque generalmente, la optimizaci\u00f3n de consultas proporciona m\u00e1s beneficios que la optimizaci\u00f3n de la configuraci\u00f3n de PostgreSQL o del sistema operativo, o incluso la optimizaci\u00f3n del hardware. Seg\u00fan mi estimaci\u00f3n, esto representa aproximadamente un 80-85-90 %. Y se realiza mucho m\u00e1s r\u00e1pido. Es m\u00e1s f\u00e1cil corregir una consulta que ajustar la configuraci\u00f3n, planificar un reinicio, especialmente si no se puede reiniciar la base de datos o a\u00f1adir hardware. Es m\u00e1s sencillo reescribir una consulta o a\u00f1adir un \u00edndice para obtener un mejor resultado de esta consulta. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Fundamentos de monitoreo de PostgreSQL. Alexey Lesovsky\" src=\"\/wp-content\/uploads\/2020\/02\/f41c9f7596f527a4403c5a5981f3a0d2.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nPor lo tanto, es necesario monitorear las consultas y su adecuaci\u00f3n. Tomemos otro ejemplo de monitoreo. Y aqu\u00ed tambi\u00e9n parece un excelente monitoreo. Hay informaci\u00f3n sobre replicaci\u00f3n, hay informaci\u00f3n sobre capacidad, bloqueos, y utilizaci\u00f3n de recursos. Todo es perfecto, pero no hay informaci\u00f3n sobre las consultas. No est\u00e1 claro qu\u00e9 consultas se est\u00e1n ejecutando en nuestra base de datos, cu\u00e1nto tiempo tardan en ejecutarse y cu\u00e1ntas de estas consultas hay. Siempre necesitamos tener esta informaci\u00f3n en el monitoreo. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Fundamentos de monitoreo de PostgreSQL. Alexey Lesovsky\" src=\"\/wp-content\/uploads\/2020\/02\/d92327c0486336105fb9a8005b6032ae.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Y para obtener esta informaci\u00f3n, podemos usar el m\u00f3dulo pg_stat_statements. A partir de \u00e9l, se pueden construir diversos gr\u00e1ficos. Por ejemplo, podemos obtener informaci\u00f3n sobre las consultas m\u00e1s frecuentes, es decir, aquellas que se ejecutan con mayor frecuencia. S\u00ed, tambi\u00e9n es muy \u00fatil revisar esto despu\u00e9s de los despliegues y entender si hay alg\u00fan pico en las consultas. <\/p>\n<p><\/p>\n<p>Podemos monitorear las consultas m\u00e1s largas, es decir, aquellas que tardan m\u00e1s en ejecutarse. Estas consumen CPU y tambi\u00e9n utilizan entrada\/salida. Tambi\u00e9n podemos evaluar esto a trav\u00e9s de los campos total_time, mean_time, blk_write_time y blk_read_time. <\/p>\n<p><\/p>\n<p>Podemos evaluar y monitorear las consultas m\u00e1s pesadas en t\u00e9rminos de uso de recursos, aquellas que leen desde el disco, que trabajan con memoria o, por el contrario, que generan alguna carga de escritura.<\/p>\n<p><\/p>\n<p>Podemos evaluar las consultas m\u00e1s generosas. Estas son las consultas que devuelven un gran n\u00famero de filas. Por ejemplo, podr\u00eda ser una consulta donde se olvid\u00f3 establecer un l\u00edmite y retorna todo el contenido de la tabla o consulta de las tablas solicitadas.<\/p>\n<p><\/p>\n<p>Y tambi\u00e9n se pueden monitorear las consultas que utilizan archivos temporales o tablas temporales. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Fundamentos de monitoreo de PostgreSQL. Alexey Lesovsky\" src=\"\/wp-content\/uploads\/2020\/02\/7b33a882f23dc99ae5b6d158eaffdad5.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nY nos quedan los procesos en segundo plano. Los procesos en segundo plano son, en primer lugar, los checkpoints, tambi\u00e9n llamados puntos de control, el autovacuum y la replicaci\u00f3n. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Fundamentos de monitoreo de PostgreSQL. Alexey Lesovsky\" src=\"\/wp-content\/uploads\/2020\/02\/8fb2f921b60bd25053896155c90d7e53.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Otro ejemplo de monitoreo. Hay una pesta\u00f1a a la izquierda llamada Mantenimiento, la abrimos con la esperanza de ver algo \u00fatil. Pero aqu\u00ed solo hay tiempo de ejecuci\u00f3n del vacuum y la recolecci\u00f3n de estad\u00edsticas, nada m\u00e1s. Esta es una informaci\u00f3n muy escasa, por lo que siempre es necesario tener informaci\u00f3n sobre c\u00f3mo est\u00e1n funcionando los procesos en segundo plano en nuestra base de datos y si hay problemas por su funcionamiento. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Fundamentos de monitoreo de PostgreSQL. Alexey Lesovsky\" src=\"\/wp-content\/uploads\/2020\/02\/137acdb66afc49d0a61d74581bf51b39.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Cuando consideramos los puntos de control, debemos recordar que los puntos de control descargan las p\u00e1ginas 'sucias' del \u00e1rea de memoria compartida al disco y luego crean un punto de control. Este punto de control puede ser utilizado posteriormente como un lugar durante la recuperaci\u00f3n, en caso de que PostgreSQL se cierre de manera an\u00f3mala. <\/p>\n<p><\/p>\n<p>Por lo tanto, para volcar todas las p\u00e1ginas \u00absucias\u00bb en el disco, es necesario ejecutar un cierto volumen de escritura. Y, por lo general, en sistemas con una gran cantidad de memoria, esto conlleva un volumen muy elevado. Si los puntos de control se realizan con mucha frecuencia en un corto intervalo de tiempo, el rendimiento del disco disminuir\u00e1 significativamente. Las consultas de los clientes sufrir\u00e1n por la falta de recursos. Luchar\u00e1n por los recursos y no tendr\u00e1n suficiente rendimiento. <\/p>\n<p><\/p>\n<p>Por lo tanto, a trav\u00e9s de pg_stat_bgwriter, podemos monitorear el n\u00famero de puntos de control que ocurren por los campos especificados. Si en un intervalo de tiempo determinado (10-15-20 minutos, media hora) se producen muchos puntos de control, por ejemplo, 3-4-5, esto ya puede ser un problema. Y es necesario revisar la base de datos, examinar la configuraci\u00f3n para ver qu\u00e9 est\u00e1 causando tal abundancia de puntos de control. Puede ser que se est\u00e9 realizando una gran escritura. Con la carga de trabajo, ya podemos evaluar, ya que tenemos los gr\u00e1ficos de carga de trabajo a\u00f1adidos. Podemos ajustar los par\u00e1metros de los puntos de control y hacer que no influyan demasiado en el rendimiento de las consultas.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Fundamentos de monitoreo de PostgreSQL. Alexey Lesovsky\" src=\"\/wp-content\/uploads\/2020\/02\/3d86b57d87ec592f307b28ea4efb26ae.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Vuelvo a mencionar el autovacuum, porque es algo que, como ya he mencionado, puede afectar f\u00e1cilmente tanto al rendimiento de los discos como al de las consultas, por lo que siempre es importante evaluar la cantidad de autovacuum. <\/p>\n<p><\/p>\n<p>El n\u00famero de trabajadores de autovacuum en la base de datos est\u00e1 limitado. Por defecto, hay tres, as\u00ed que si siempre hay tres trabajadores funcionando en la base, eso significa que nuestro autovacuum est\u00e1 mal configurado; es necesario aumentar los l\u00edmites y revisar las configuraciones de autovacuum y entrar en la configuraci\u00f3n.<br \/>\nEs importante evaluar qu\u00e9 trabajadores de vacuum est\u00e1n activos. Puede ser que haya un vacuum iniciado por un usuario, donde un DBA lo haya ejecutado manualmente, lo que ha creado una carga. Puede haberse presentado alg\u00fan problema. O puede ser por la cantidad de vacuums que est\u00e1n contabilizando las transacciones. Para algunas versiones de PostgreSQL, estos son vacuums muy pesados. Y pueden afectar considerablemente al rendimiento, ya que leen toda la tabla en su totalidad, escaneando todos los bloques de esa tabla. <\/p>\n<p><\/p>\n<p>Y, por supuesto, la duraci\u00f3n de los vac\u00edos. Si tenemos vac\u00edos largos que funcionan durante mucho tiempo, significa que debemos volver a prestar atenci\u00f3n a la configuraci\u00f3n del vac\u00edo y, posiblemente, revisar sus ajustes. Porque puede surgir una situaci\u00f3n en la que el vac\u00edo est\u00e9 trabajando en una tabla durante mucho tiempo (3-4 horas), pero durante ese tiempo se ha acumulado un gran volumen de filas muertas en la tabla. Y tan pronto como el vac\u00edo se complete, necesitar\u00e1 volver a vaciar esa tabla. Y llegamos a una situaci\u00f3n de vac\u00edo interminable. En ese caso, el vac\u00edo no cumple su funci\u00f3n, y las tablas comienzan a aumentar de tama\u00f1o, aunque el volumen de datos \u00fatiles permanezca constante. Por lo tanto, en el caso de vac\u00edos prolongados, siempre revisamos la configuraci\u00f3n y tratamos de optimizarla, pero sin afectar el rendimiento de las consultas de los clientes. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Fundamentos de monitoreo de PostgreSQL. Alexey Lesovsky\" src=\"\/wp-content\/uploads\/2020\/02\/bf109b53e0ad70bbb3fba727149e5086.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Hoy en d\u00eda, pr\u00e1cticamente no hay instalaciones de PostgreSQL que no tengan replicaci\u00f3n en streaming. La replicaci\u00f3n es el proceso de transferencia de datos del maestro a la r\u00e9plica.<\/p>\n<p><\/p>\n<p>La replicaci\u00f3n en PostgreSQL se basa en el registro de transacciones. El maestro genera el registro de transacciones. El registro de transacciones se env\u00eda a trav\u00e9s de una conexi\u00f3n de red a la r\u00e9plica, donde se reproduce. Todo es bastante simple. <\/p>\n<p><\/p>\n<p>Por lo tanto, para monitorear el retraso en la replicaci\u00f3n se utiliza la vista pg_stat_replication. Pero no es tan simple. En la versi\u00f3n 10, la vista sufri\u00f3 varios cambios. En primer lugar, algunos campos fueron renombrados. Y se a\u00f1adieron algunos campos. En la versi\u00f3n 10 aparecieron campos que permiten evaluar el retraso de la replicaci\u00f3n en segundos. Esto es muy conveniente. Antes de la versi\u00f3n 10, era posible evaluar el retraso de la replicaci\u00f3n en bytes. Esa opci\u00f3n se mantuvo tambi\u00e9n en la versi\u00f3n 10, es decir, puedes elegir lo que te convenga m\u00e1s: evaluar el retraso en bytes o en segundos. Muchos hacen ambas cosas.<\/p>\n<p><\/p>\n<p>Sin embargo, para evaluar el retraso en la replicaci\u00f3n, es necesario conocer la posici\u00f3n del registro en la transacci\u00f3n. Y esas posiciones del registro de transacciones est\u00e1n en la vista pg_stat_replication. En t\u00e9rminos simples, con la funci\u00f3n pg_xlog_location_diff() podemos tomar dos puntos en el registro de transacciones, calcular la diferencia entre ellos y obtener el retraso de la replicaci\u00f3n en bytes. Esto es muy conveniente y simple. <\/p>\n<p><\/p>\n<p>En la versi\u00f3n 10, esta funci\u00f3n fue renombrada a pg_wal_lsn_diff(). En general, en todas las funciones, vistas y utilidades donde aparec\u00eda la palabra \u00abxlog\u00bb, se ha reemplazado por \u00abwal\u00bb. Esto aplica tanto a las vistas como a las funciones. Esta es una novedad. <\/p>\n<p><\/p>\n<p>Adem\u00e1s, en la versi\u00f3n 10 se a\u00f1adieron l\u00edneas que muestran espec\u00edficamente el retraso. Esto incluye write lag, flush lag y replay lag. Es decir, estas m\u00e9tricas son importantes para monitorear. Si vemos que hay un retraso en la replicaci\u00f3n, es necesario investigar por qu\u00e9 ocurri\u00f3, de d\u00f3nde proviene y solucionar el problema. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Fundamentos de monitoreo de PostgreSQL. Alexey Lesovsky\" src=\"\/wp-content\/uploads\/2020\/02\/5b29d7519f28da63446b741024a68bb8.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Con las m\u00e9tricas del sistema, pr\u00e1cticamente todo est\u00e1 en orden. Cuando se implementa cualquier tipo de monitoreo, comienza con las m\u00e9tricas del sistema. Esto incluye la utilizaci\u00f3n de CPU, memoria, swap, red y disco. Sin embargo, muchos par\u00e1metros por defecto no est\u00e1n disponibles. <\/p>\n<p><\/p>\n<p>Si la utilizaci\u00f3n del proceso est\u00e1 en orden, hay problemas con la utilizaci\u00f3n del disco. Por regla general, los desarrolladores de monitoreo a\u00f1aden informaci\u00f3n sobre el ancho de banda. Esto puede expresarse en IOPS o bytes. Pero se olvidan de la latencia y la utilizaci\u00f3n de los dispositivos de disco. Estos son par\u00e1metros m\u00e1s importantes que permiten evaluar cu\u00e1n ocupados est\u00e1n los discos y cu\u00e1n lentos son. <strong>Si tenemos una alta latencia, significa que hay problemas con los discos. Si la utilizaci\u00f3n es alta, significa que los discos no est\u00e1n rindiendo adecuadamente.<\/strong> Estas son caracter\u00edsticas de mayor calidad que el ancho de banda.<\/p>\n<p><\/p>\n<p>A pesar de que esta estad\u00edstica tambi\u00e9n se puede obtener del sistema de archivos \/proc, como se hace para la utilizaci\u00f3n de CPU. No s\u00e9 por qu\u00e9 esta informaci\u00f3n no se a\u00f1ade a los monitoreos. <strong>Sin embargo, es importante tenerla en tu monitoreo.<\/strong> <\/p>\n<p><\/p>\n<p>Lo mismo ocurre con las interfaces de red. <strong>Hay informaci\u00f3n sobre el ancho de banda de la red en paquetes, en bytes, pero no hay informaci\u00f3n sobre la latencia ni sobre la utilizaci\u00f3n, aunque esto tambi\u00e9n es informaci\u00f3n \u00fatil.<\/strong> <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Fundamentos de monitoreo de PostgreSQL. Alexey Lesovsky\" src=\"\/wp-content\/uploads\/2020\/02\/3b9b2c300bcc8a30e1b6fae1a55e6f21.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Todos los monitoreos tienen desventajas. Cualquier monitoreo que elijas siempre no cumplir\u00e1 con algunos criterios. Sin embargo, est\u00e1n evolucionando, se a\u00f1aden caracter\u00edsticas nuevas, as\u00ed que elige algo y aj\u00fastalo. <\/p>\n<p><\/p>\n<p>Y para ajustar, siempre es necesario tener claro qu\u00e9 significa la estad\u00edstica entregada y c\u00f3mo puede ayudar a resolver problemas. <\/p>\n<p><\/p>\n<p>Y varios puntos clave:<\/p>\n<p><\/p>\n<ul>\n<li>Siempre es necesario monitorear la disponibilidad, tener paneles de control para que puedas evaluar r\u00e1pidamente que la base de datos est\u00e1 en orden. <\/li>\n<li>Siempre es fundamental tener una idea de qu\u00e9 clientes est\u00e1n trabajando con tu base de datos para filtrar a aquellos que no son buenos clientes y excluirlos. <\/li>\n<li>Es importante evaluar c\u00f3mo estos clientes interact\u00faan con los datos. Necesitas tener una noci\u00f3n de tu carga de trabajo.<\/li>\n<li>Es crucial evaluar c\u00f3mo se forma esta carga de trabajo, qu\u00e9 tipos de consultas se utilizan. Puedes medir las consultas, optimizarlas, refactorizarlas y construir \u00edndices para ellas. Esto es muy importante.<\/li>\n<li>Los procesos en segundo plano pueden afectar negativamente las consultas de los clientes, por lo que es importante monitorear que no usen demasiados recursos.<\/li>\n<li>Las m\u00e9tricas del sistema te permiten planificar la escalabilidad y el aumento de la capacidad de tus servidores, por lo que tambi\u00e9n es esencial monitorearlas y evaluarlas.<\/li>\n<\/ul>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Fundamentos de monitoreo de PostgreSQL. Alexey Lesovsky\" src=\"\/wp-content\/uploads\/2020\/02\/7ece1ec5ffc67d68697c0932a2fbf7db.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Si te interesa este tema, puedes seguir estos enlaces.<br \/>\n<noindex><a rel=\"nofollow\" href=\"http:\/\/bit.do\/stats_collector\">http:\/\/bit.do\/stats_collector<\/a><\/noindex> \u2014 es la documentaci\u00f3n oficial de los recolectores de estad\u00edsticas. All\u00ed se describe todas las vistas estad\u00edsticas y todos los campos. Puedes leerlos, entenderlos y analizarlos. Y ya en base a ellos construir tus propios gr\u00e1ficos, a\u00f1adirlos a tus monitoreos. <\/p>\n<p><\/p>\n<p>Ejemplos de consultas:<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>Este es nuestro repositorio corporativo y el m\u00edo personal. Contiene ejemplos de consultas. No hay consultas del tipo select * from algo. Ya est\u00e1n preparadas las consultas con joins y el uso de funciones interesantes que permiten convertir n\u00fameros crudos en valores legibles y \u00fatiles, es decir, bytes, tiempo. Puedes explorarlos, revisarlos, analizarlos, incluirlos en tus monitoreos y construir tus propios an\u00e1lisis basados en ellos. <\/p>\n<p><\/p>\n<h4 id=\"voprosy\">Preguntas<\/h4>\n<p><\/p>\n<p>Pregunta: Dijiste que no ibas a promocionar marcas, pero tengo curiosidad, \u00bfqu\u00e9 paneles de control utilizas en tus proyectos?<br \/>\nRespuesta: De varias maneras. A veces llegamos al cliente y ya tiene su propio monitoreo. Y nosotros asesoramos al cliente sobre qu\u00e9 deber\u00eda agregar a su monitoreo. Lo que m\u00e1s complica es Zabbi\u0445, porque no tiene la capacidad de construir gr\u00e1ficos TopN. Nosotros utilizamos <noindex><a rel=\"nofollow\" href=\"https:\/\/okmeter.io\/\">Okmeter<\/a><\/noindex>, porque asesoramos a estos chicos sobre monitoreo. Ellos establecieron un monitoreo de PostgreSQL basado en nuestros requisitos. Estoy trabajando en mi proyecto personal, que recopila datos a trav\u00e9s de Prometheus y los visualiza en <noindex><a rel=\"nofollow\" href=\"https:\/\/grafana.com\/\">Grafana<\/a><\/noindex>. Tengo la tarea de crear mi propio exportador en Prometheus y luego representar todo en Grafana.<\/p>\n<p><\/p>\n<p>Pregunta: \u00bfHay algunos an\u00e1logos de los informes AWR o... agregaciones? \u00bfSabe usted algo sobre esto?<br \/>\nRespuesta: S\u00ed, s\u00e9 qu\u00e9 es AWR, es algo genial. Actualmente hay diversas implementaciones que realizan aproximadamente el mismo modelo. A intervalos de tiempo, se escriben algunos baselines en PostgreSQL o en un almacenamiento separado. Se pueden encontrar en internet, existen. Uno de los desarrolladores de tal cosa est\u00e1 en el foro sql.ru en la secci\u00f3n de PostgreSQL. Se le puede contactar all\u00ed. S\u00ed, existen tales m\u00e9todos, se pueden usar. Adem\u00e1s, yo tambi\u00e9n estoy creando algo que permite hacer lo mismo. <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/lesovsky\/pgcenter\">pgCenter<\/a><\/noindex> tambi\u00e9n estoy escribiendo una cosa que permite hacer lo mismo.<\/p>\n<p><\/p>\n<p>P.D.1 Si est\u00e1 utilizando postgres_exporter, \u00bfqu\u00e9 panel de control est\u00e1 usando? Hay varios. Est\u00e1n algo desactualizados. \u00bfTal vez la comunidad pueda crear una plantilla actualizada?<\/p>\n<p><\/p>\n<p>P.D.2 He eliminado pganalyze, ya que es una oferta SaaS propietaria que se centra en el monitoreo del rendimiento y sugerencias de ajuste autom\u00e1tico.<\/p>\n<p class=\"for_users_only_msg\">Solo los usuarios registrados pueden participar en la encuesta. <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/auth\/login\/\">Inicie sesi\u00f3n<\/a><\/noindex>, por favor.<\/p>\n<h2 class=\"default-block__polling-title\">\u00bfCu\u00e1l es el monitoreo postgresql autohospedado (con panel de control) que considera el mejor?<\/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 + complementos de Alexey Lesovsky o zabbix 4.4 o 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 es una plataforma SaaS propietaria \u2014 no puedo eliminarlo1<\/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 usuarios votaron. 26 usuarios se abstuvieron.<br \/>\n<br \/>Fuente: <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.2 - 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\/es\/blog\/administrirovanie\/osnovy-monitoringa-postgresql-aleksej-lesovskij\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.2\" \/>\n\t\t<meta property=\"og:locale\" content=\"es_ES\" \/>\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\/es\/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\udd47Fundamentos del monitoreo de PostgreSQL. Alexey Lesovsky | ProHoster","description":"Le propongo revisar la transcripci\u00f3n de la presentaci\u00f3n de Alexey Lesovsky de Data Egret \"Fundamentos del monitoreo de PostgreSQL\". En esta presentaci\u00f3n, Alexey Lesovsky hablar\u00e1 sobre los aspectos clave de PostgreSQL.","canonical_url":"https:\/\/prohoster.info\/es\/blog\/administrirovanie\/osnovy-monitoringa-postgresql-aleksej-lesovskij","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"es_ES","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\/es\/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\/es\/wp-json\/wp\/v2\/posts\/56075","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/comments?post=56075"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/posts\/56075\/revisions"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/media?parent=56075"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/categories?post=56075"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/tags?post=56075"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}