{"id":84082,"date":"2020-06-05T07:42:28","date_gmt":"2020-06-05T05:42:28","guid":{"rendered":"https:\/\/prohoster.info\/blog\/administrirovanie\/linux-tuning-to-improve-postgresql-performance-ilya-kosmodemyanskij"},"modified":"2020-06-05T07:42:28","modified_gmt":"2020-06-05T05:42:28","slug":"linux-tuning-to-improve-postgresql-performance-ilya-kosmodemyanskij","status":"publish","type":"post","link":"https:\/\/prohoster.info\/es\/blog\/administrirovanie\/linux-tuning-to-improve-postgresql-performance-ilya-kosmodemyanskij","title":{"rendered":"Ajustes de Linux para mejorar el rendimiento de PostgreSQL. Ilya Kosmodemyansky","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Transcripci\u00f3n del informe de 2015 de Ilya Kosmodemyansky &quot;Ajuste de Linux para mejorar el rendimiento de PostgreSQL&quot;<\/p>\n<p><\/p>\n<p>Descargo de responsabilidad: Cabe mencionar que esta presentaci\u00f3n est\u00e1 fechada en noviembre de 2015 \u2014 ha pasado m\u00e1s de 4 a\u00f1os y ha transcurrido mucho tiempo. La versi\u00f3n de PostgreSQL mencionada en la presentaci\u00f3n 9.4 ya no es compatible. En los \u00faltimos 4 a\u00f1os, se han lanzado 5 nuevas versiones de PostgreSQL y 15 versiones del n\u00facleo de Linux. Si se reescribieran esos puntos, resultar\u00eda en una presentaci\u00f3n diferente. Sin embargo, aqu\u00ed se trata del ajuste fundamental de Linux para PostgreSQL, que sigue siendo relevante hoy en d\u00eda.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Ajustes de Linux para mejorar el rendimiento de PostgreSQL. Ilya Kosmodemyansky\" src=\"\/wp-content\/uploads\/2020\/06\/8292f74a7d004a9c13ff5f1393816340.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><br \/>\n<center><div class=\"youtube-placeholder\" data-id=\"V0M6YwWmMYM\" onclick=\"loadVideo(this)\">\r\n        <img decoding=\"async\" src=\"https:\/\/img.youtube.com\/vi\/V0M6YwWmMYM\/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><\/p>\n<p>Me llamo Ilya Kosmodemyansky. Trabajo en la empresa PostgreSQL-Consulting. Y ahora hablar\u00e9 un poco sobre qu\u00e9 hacer con Linux en relaci\u00f3n a las bases de datos en general y a PostgreSQL en particular, porque los principios son bastante similares.<\/p>\n<p><\/p>\n<p>\u00bfDe qu\u00e9 se trata esta charla? Si te comunicas con PostgreSQL, hasta cierto punto necesitas ser un administrador de UNIX. \u00bfQu\u00e9 significa esto? Si comparamos Oracle y PostgreSQL, en Oracle necesitas ser un 80 % DBA del administrador de bases de datos y un 20 % administrador de Linux.<\/p>\n<p><\/p>\n<p>Con PostgreSQL es un poco m\u00e1s complicado. Con PostgreSQL necesitas tener una comprensi\u00f3n mucho mejor de c\u00f3mo funciona Linux. Y al mismo tiempo, necesitas seguir el ritmo, porque \u00faltimamente todo se actualiza bastante. Y aparecen nuevos n\u00facleos, nuevas funcionalidades, se mejora el rendimiento, etc. <\/p>\n<p><\/p>\n<p>\u00bfPor qu\u00e9 hablamos de Linux? No es porque estemos en la conferencia de Linux en San Petersburgo, sino porque en las condiciones modernas, uno de los sistemas operativos m\u00e1s justificados para operar con bases de datos en general y con PostgreSQL en particular es Linux. Porque FreeBSD, lamentablemente, se desarrolla en una direcci\u00f3n muy extra\u00f1a. Y habr\u00e1 problemas tanto con el rendimiento como con muchas otras cosas. <strong>El rendimiento de PostgreSQL en Windows es un tema aparte, que se basa en el hecho de que Windows no tiene memoria compartida como UNIX, y PostgreSQL depende completamente de esto, ya que es un sistema multiprocesador.<\/strong> <\/p>\n<p><\/p>\n<p>Y excentricidades como Solaris, creo que interesan a menos personas, as\u00ed que continuemos. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Ajustes de Linux para mejorar el rendimiento de PostgreSQL. Ilya Kosmodemyansky\" src=\"\/wp-content\/uploads\/2020\/06\/990133933bd1816895fc8f73edaf900e.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Una distribuci\u00f3n de Linux moderna tiene m\u00e1s de 1,000 par\u00e1metros syctl, dependiendo de c\u00f3mo se compile el n\u00facleo. Adem\u00e1s, si miramos diferentes configuraciones, hay muchas maneras de ajustar algo. Hay par\u00e1metros de sistemas de archivos, sobre c\u00f3mo montarlos. Si hay preguntas sobre c\u00f3mo iniciar, qu\u00e9 habilitar en el BIOS, c\u00f3mo configurar el hardware, etc.<\/p>\n<p><\/p>\n<p>Este es un volumen muy grande del que se puede hablar durante varios d\u00edas, y no en una breve presentaci\u00f3n, pero ahora me detendr\u00e9 en cosas importantes, como evitar aquellos escollos que sin duda no les permitir\u00e1n aprovechar bien la base de datos en Linux si no los corrigen. Y hay un punto importante, que muchos par\u00e1metros por defecto no est\u00e1n configurados de manera adecuada para la base de datos. Es decir, por defecto funcionar\u00e1 mal o no funcionar\u00e1 en absoluto. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Ajustes de Linux para mejorar el rendimiento de PostgreSQL. Ilya Kosmodemyansky\" src=\"\/wp-content\/uploads\/2020\/06\/189f6497c795a5e5fd5b458edfadb22f.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>\u00bfCu\u00e1les son los objetivos tradicionales de ajuste en Linux? Creo que ya que todos ustedes est\u00e1n familiarizados con la administraci\u00f3n de Linux, no es necesario explicar qu\u00e9 son los objetivos. <\/p>\n<p><\/p>\n<p>Se puede ajustar:<\/p>\n<p><\/p>\n<ul>\n<li>CPU.<\/li>\n<li>Memoria.<\/li>\n<li>Almacenamiento.<\/li>\n<li>Otros. De esto hablaremos al final como un aperitivo. Incluso, por ejemplo, par\u00e1metros como la pol\u00edtica de ahorro de energ\u00eda pueden influir de manera muy impredecible y no tan agradable en el rendimiento. <\/li>\n<\/ul>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Ajustes de Linux para mejorar el rendimiento de PostgreSQL. Ilya Kosmodemyansky\" src=\"\/wp-content\/uploads\/2020\/06\/92916aadaf123a3f836bed3a2c1bd95a.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>\u00bfCu\u00e1l es la especificidad de PostgreSQL y de la base de datos en general? El problema es que no se puede ajustar alg\u00fan tornillo por separado y esperar que el rendimiento mejore significativamente. <\/p>\n<p><\/p>\n<p>S\u00ed, hay tornillos, pero la base de datos es algo complejo. Interact\u00faa con todos los recursos disponibles del servidor y prefiere interactuar plenamente. Si observas las recomendaciones modernas de Oracle sobre c\u00f3mo utilizar el sistema operativo host, ser\u00e1 como el chiste del cosmonauta mongol: alimentar al perro y no tocar nada. D\u00e9mosle a la base todos los recursos, la base de datos se encargar\u00e1 de todo. <\/p>\n<p><\/p>\n<p>En principio, con PostgreSQL hay una situaci\u00f3n similar. La diferencia radica en que la base de datos a\u00fan no puede reclamar todos los recursos por s\u00ed misma, es decir, en alg\u00fan lugar es necesario manejar esto a nivel de Linux de manera independiente. <\/p>\n<p><\/p>\n<p>La idea principal es no elegir un \u00fanico objetivo y comenzar a ajustarlo, ya sea memoria, CPU o algo por el estilo, sino analizar la carga de trabajo e intentar mejorar al m\u00e1ximo el rendimiento, para que la carga que los buenos programadores nos han creado, incluidos nuestros usuarios, pase a trav\u00e9s de nuestra base de datos de la manera m\u00e1s eficiente. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Ajustes de Linux para mejorar el rendimiento de PostgreSQL. Ilya Kosmodemyansky\" src=\"\/wp-content\/uploads\/2020\/06\/2db6c11a6f612b8aecccfe126be4fd7f.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Esta es una imagen para explicar qu\u00e9 es esto. Hay un buffer en el sistema operativo Linux, hay memoria compartida y hay buffers compartidos de PostgreSQL. A diferencia de Oracle, PostgreSQL trabaja directamente solo a trav\u00e9s del buffer del n\u00facleo, es decir, para que una p\u00e1gina del disco llegue a su memoria compartida, debe pasar por el buffer del n\u00facleo y volver, exactamente la misma situaci\u00f3n. <\/p>\n<p><\/p>\n<p>Bajo este sistema viven los discos. Lo he dibujado como discos. En realidad, puede haber un controlador RAID, etc. <\/p>\n<p><\/p>\n<p>Y esta entrada y salida de datos, de una manera u otra, ocurre a trav\u00e9s de esto.<\/p>\n<p><\/p>\n<p>PostgreSQL es una base de datos cl\u00e1sica. Dentro hay p\u00e1ginas. Y toda la entrada y salida se realiza mediante estas p\u00e1ginas. Levantamos bloques en memoria usando p\u00e1ginas. Y si no ha pasado nada, simplemente las hemos le\u00eddo, entonces, poco a poco, desaparecen de esa cach\u00e9, de los buffers compartidos, y van de vuelta al disco. <\/p>\n<p><\/p>\n<p>Si hemos reemplazado algo en alg\u00fan lugar, entonces toda la p\u00e1gina se marca como sucia. Las marqu\u00e9 aqu\u00ed en color azul. Y eso significa que esta p\u00e1gina debe sincronizarse con el almacenamiento de bloques. Es decir, cuando la hacemos sucia, hacemos una escritura en el WAL. Y en un momento dado, ocurre un fen\u00f3meno llamado checkpoint. Y se registr\u00f3 informaci\u00f3n en este log de que ha llegado. Y eso significa que todas las p\u00e1ginas sucias que estaban en ese momento en estos buffers compartidos se sincronizaron con el disco de almacenamiento mediante fsync a trav\u00e9s del buffer del n\u00facleo.<\/p>\n<p><\/p>\n<p>\u00bfPara qu\u00e9 se hace esto? Si perdemos la alimentaci\u00f3n, no queremos que se pierdan todos los datos. La memoria persistente, de la que nos han hablado, a\u00fan est\u00e1 en la teor\u00eda de bases de datos: es un futuro brillante al que, por supuesto, aspiramos y nos gusta, pero hasta ahora viven 20 a\u00f1os en el pasado. Y, por supuesto, es necesario monitorear todo esto.<\/p>\n<p><\/p>\n<p>La tarea de maximizar el rendimiento es optimizar en todas estas etapas para que todo funcione r\u00e1pidamente de un lado a otro. La memoria compartida es principalmente la cach\u00e9 de p\u00e1ginas. En PostgreSQL, enviamos una consulta select y obtuvo estos datos del disco. Fueron a los buffers compartidos. Por lo tanto, para que esto funcione mejor, debe haber mucha memoria.<\/p>\n<p><\/p>\n<p>Para que todo esto funcione bien y r\u00e1pido, es necesario configurar correctamente el sistema operativo en todas las etapas. Adem\u00e1s, es importante seleccionar un hardware equilibrado, porque si hay alg\u00fan desequilibrio en alg\u00fan lugar, puedes tener mucha memoria, pero su rendimiento ser\u00e1 insuficiente. <\/p>\n<p><\/p>\n<p>Y revisemos cada uno de estos puntos.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Ajustes de Linux para mejorar el rendimiento de PostgreSQL. Ilya Kosmodemyansky\" src=\"\/wp-content\/uploads\/2020\/06\/fe031218be39cd727f3a76b22563e101.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Para que estas p\u00e1ginas viajen de un lado a otro m\u00e1s r\u00e1pido, se deben lograr lo siguiente:<\/p>\n<p><\/p>\n<ul>\n<li>Primero, hay que trabajar de manera m\u00e1s eficiente con la memoria.<\/li>\n<li>Segundo, debe ser m\u00e1s eficiente esta transici\u00f3n, cuando las p\u00e1ginas de la memoria llegan al disco.<\/li>\n<li>Y, en tercer lugar, deben haber buenos discos. <\/li>\n<\/ul>\n<p><\/p>\n<p>Si tienes 512 GB de memoria RAM en <a class=\"wpil_keyword_link\" href=\"https:\/\/prohoster.info\/es\/server\/dts-dronten\/\"   title=\"servidor\" data-wpil-keyword-link=\"linked\"  data-wpil-monitor-id=\"2587\">servidor<\/a> y todo esto finalmente llega a un disco duro SATA sin ning\u00fan tipo de cach\u00e9, entonces todo el servidor de bases de datos se convierte no solo en una calabaza, sino en una calabaza con interfaz SATA. Te encontrar\u00e1s directamente con este problema. Y nada te salvar\u00e1.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Ajustes de Linux para mejorar el rendimiento de PostgreSQL. Ilya Kosmodemyansky\" src=\"\/wp-content\/uploads\/2020\/06\/6630e445c96e94621ae670bc4aee8492.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>En cuanto al primer punto sobre la memoria, hay tres cosas que pueden complicar mucho la vida. <\/p>\n<p><\/p>\n<p>La primera de ellas es NUMA. NUMA es un concepto dise\u00f1ado para mejorar el rendimiento. Dependiendo de la carga de trabajo, se pueden optimizar diferentes aspectos. Y en su forma actual, no es muy bueno para aplicaciones como bases de datos que utilizan intensamente la cach\u00e9 compartida de p\u00e1ginas. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Ajustes de Linux para mejorar el rendimiento de PostgreSQL. Ilya Kosmodemyansky\" src=\"\/wp-content\/uploads\/2020\/06\/8fcf2af82a96bd1ac52fb0a36bf0b0b5.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>En pocas palabras. \u00bfC\u00f3mo saber que algo est\u00e1 mal con NUMA? Tienes alg\u00fan tipo de ruido desagradable, de repente alguna CPU se encuentra sobrecargada. Mientras tanto, analizas las consultas en PostgreSQL y ves que no hay nada de este tipo. Estas consultas no deber\u00edan consumir CPU de manera tan intensa. Puede llevar tiempo detectarlo. Es m\u00e1s f\u00e1cil seguir desde el principio la recomendaci\u00f3n correcta sobre c\u00f3mo configurar NUMA para PostgreSQL.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Ajustes de Linux para mejorar el rendimiento de PostgreSQL. Ilya Kosmodemyansky\" src=\"\/wp-content\/uploads\/2020\/06\/424b8677e5ae1382b9b49b288e045a3f.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>\u00bfQu\u00e9 es lo que realmente est\u00e1 sucediendo? NUMA significa Non-Uniform Memory Access. \u00bfEn qu\u00e9 consiste? Tienes un CPU, y junto a \u00e9l hay su memoria local. Y esta memoria puede acceder a la memoria de otros CPUs a trav\u00e9s de interconexiones.<\/p>\n<p><\/p>\n<p>Si ejecutas <code>numactl --hardware<\/code>, obtendr\u00e1s una gran hoja de datos. Entre otras cosas, habr\u00e1 un campo de distancias. Habr\u00e1 n\u00fameros \u2013 10-20, algo por el estilo. Estos n\u00fameros son la cantidad de saltos necesarios para acceder a esa memoria remota y usarla localmente. En principio, es una buena idea. Esto mejora significativamente el rendimiento bajo ciertas cargas.<\/p>\n<p><\/p>\n<p>Ahora imagina que tienes un CPU que primero intenta usar su memoria local, luego intenta acceder a otra memoria a trav\u00e9s del interconect para algo. Y en este CPU se aloja todo tu cach\u00e9 de p\u00e1ginas de PostgreSQL: todos esos gigabytes. Siempre obtienes el peor de los casos, porque en el CPU directamente en ese m\u00f3dulo de memoria suele haber poco. Y toda la memoria que se gestiona pasa a trav\u00e9s de estos interconectores. Se vuelve lenta y problem\u00e1tica. Y tienes un procesador que atiende esta unidad, constantemente abrumado. Y el tiempo de acceso a esa memoria es malo, lento. Esta es la situaci\u00f3n que no deseas si utilizas esto para una base de datos. <\/p>\n<p><\/p>\n<p>Por eso, la opci\u00f3n m\u00e1s correcta para la base de datos es que el sistema operativo Linux no sepa en absoluto lo que est\u00e1 ocurriendo. Para que acceda a la memoria como siempre lo hace. <\/p>\n<p><\/p>\n<p>\u00bfPor qu\u00e9 es as\u00ed? Aparentemente, deber\u00eda ser al rev\u00e9s. Esto ocurre por una raz\u00f3n muy simple: necesitamos mucha memoria para el cach\u00e9 de p\u00e1ginas, decenas, cientos de gigabytes. <\/p>\n<p><\/p>\n<p>Y si hemos asignado todo esto y hemos cacheado nuestros datos all\u00ed, entonces la ganancia de usar el cach\u00e9 ser\u00e1 sustancialmente mayor que cualquier beneficio de un acceso a la memoria m\u00e1s ingenioso. As\u00ed, ganar\u00edamos de manera incomparables en comparaci\u00f3n con lo que lograr\u00edamos teniendo un acceso m\u00e1s eficiente a la memoria usando NUMA.<\/p>\n<p><\/p>\n<p>Por lo tanto, hay dos enfoques en este momento, mientras no llegue un futuro brillante y la base de datos no pueda decidir por s\u00ed misma en qu\u00e9 CPU est\u00e1 trabajando y de d\u00f3nde necesita obtener algo. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Ajustes de Linux para mejorar el rendimiento de PostgreSQL. Ilya Kosmodemyansky\" src=\"\/wp-content\/uploads\/2020\/06\/218513d407ea77320057d57b447c54d3.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p><strong>As\u00ed que el enfoque correcto es desactivar NUMA por completo.<\/strong>, por ejemplo, al reiniciar. En la mayor\u00eda de los casos, las ganancias son tan significativas que no surge la pregunta de cu\u00e1l es la mejor opci\u00f3n. <\/p>\n<p><\/p>\n<p>Hay otra opci\u00f3n. La utilizamos m\u00e1s a menudo que la primera, porque cuando un cliente llega a nosotros en soporte, reiniciar el servidor es un gran asunto para \u00e9l. Su negocio est\u00e1 en funcionamiento. Y experimentan problemas debido a NUMA. Por eso intentamos desactivarlo de maneras menos invasivas que reiniciar, pero aqu\u00ed hay que tener cuidado, verificar que realmente se haya desactivado. Porque, como muestra la experiencia, desactivar NUMA para el proceso padre de PostgreSQL es bueno, pero no es necesariamente que eso funcione. Hay que verificar y asegurarse de que realmente se haya desactivado. <\/p>\n<p><\/p>\n<p>Hay un buen post de Robert Haas. Es uno de los committers de PostgreSQL. Uno de los desarrolladores clave de todas las entra\u00f1as de bajo nivel. Y si sigues los enlaces de este post, encontrar\u00e1s varias historias coloridas sobre c\u00f3mo el NUMA complic\u00f3 la vida de las personas. Mira, estudia la lista de verificaci\u00f3n del administrador del sistema sobre lo que se debe configurar en el servidor para que nuestra base de datos funcione bien. Estas configuraciones deben ser registradas y verificadas, porque de lo contrario no ir\u00e1 muy bien. <\/p>\n<p><\/p>\n<p>Quiero se\u00f1alar que esto se aplica a todas las configuraciones de las que voy a hablar. Pero com\u00fanmente, las bases de datos se configuran en modo master-slave para la redundancia. No olvides realizar estos ajustes en el slave, porque en un momento dado tendr\u00e1s una falla, y cambiar\u00e1s al slave, que se convertir\u00e1 en el master. <\/p>\n<p><\/p>\n<p>En una situaci\u00f3n de emergencia, cuando todo est\u00e1 muy mal, tu tel\u00e9fono sonar\u00e1 constantemente y tu jefe aparecer\u00e1 con un garrote grande; no tendr\u00e1s tiempo para pensar en verificar. Y los resultados pueden ser bastante desastrosos.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Ajustes de Linux para mejorar el rendimiento de PostgreSQL. Ilya Kosmodemyansky\" src=\"\/wp-content\/uploads\/2020\/06\/d2fdda7ad4570554b0e134758295f83e.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>El siguiente punto es las huge pages. Es complicado probar las huge pages por separado, y tampoco tiene sentido hacerlo, aunque hay benchmarks que pueden hacerlo. Se encuentran f\u00e1cilmente en Google. <\/p>\n<p><\/p>\n<p>\u00bfCu\u00e1l es el sentido? Tienes un servidor no muy caro, con mucha memoria RAM, por ejemplo, m\u00e1s de 30 GB. No utilizas huge pages. Esto significa que definitivamente hay sobrecarga en el uso de la memoria. Y esa sobrecarga no es nada agradable. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Ajustes de Linux para mejorar el rendimiento de PostgreSQL. Ilya Kosmodemyansky\" src=\"\/wp-content\/uploads\/2020\/06\/28c3c94390a6afef815f712ac9189c2d.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>\u00bfPor qu\u00e9 es as\u00ed? \u00bfY qu\u00e9 est\u00e1 sucediendo? El sistema operativo asigna memoria en peque\u00f1os trozos. Es conveniente, as\u00ed se ha hecho hist\u00f3ricamente. Y si nos adentramos en los detalles, el sistema operativo debe traducir direcciones virtuales a f\u00edsicas. Y este proceso no es el m\u00e1s sencillo, por lo que el sistema operativo almacena el resultado de esta operaci\u00f3n en el Translation Lookaside Buffer (TLB).<\/p>\n<p><\/p>\n<p>Y dado que el TLB es una cach\u00e9, en esta situaci\u00f3n surgen todos los problemas inherentes a las cach\u00e9s. En primer lugar, si tienes mucha memoria RAM y toda ella est\u00e1 asignada en peque\u00f1os trozos, entonces este b\u00fafer se vuelve muy grande. Y si la cach\u00e9 es grande, buscar a trav\u00e9s de ella es m\u00e1s lento. La sobrecarga es significativa y consume espacio, es decir, la memoria RAM est\u00e1 ocupada por algo que no es correcto. Eso es uno. <\/p>\n<p><\/p>\n<p>Cuanto m\u00e1s crece la cach\u00e9 en esta situaci\u00f3n, mayor es la probabilidad de que tenga fallos de cach\u00e9. La eficiencia de esta cach\u00e9 cae r\u00e1pidamente a medida que aumenta su tama\u00f1o. Por ello, en los sistemas operativos se ide\u00f3 un enfoque simple. En Linux se ha utilizado desde hace tiempo. En FreeBSD, esto apareci\u00f3 no hace mucho. Pero estamos hablando de Linux. Se trata de huge pages.<\/p>\n<p><\/p>\n<p>Es importante se\u00f1alar que la idea de huge pages fue impulsada inicialmente por comunidades que inclu\u00edan a Oracle e IBM, es decir, los fabricantes de bases de datos pensaron firmemente que esto ser\u00eda \u00fatil, incluso para bases de datos. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Ajustes de Linux para mejorar el rendimiento de PostgreSQL. Ilya Kosmodemyansky\" src=\"\/wp-content\/uploads\/2020\/06\/39a24536929fbcf551d8ba1c8e7faf32.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>\u00bfY c\u00f3mo se integra esto con PostgreSQL? Primero, el n\u00facleo de Linux debe tener habilitadas las huge pages.<\/p>\n<p><\/p>\n<p>En segundo lugar, deben indicarse expl\u00edcitamente mediante el par\u00e1metro sysctl \u2013 cu\u00e1ntas hay. Las cifras aqu\u00ed provienen de alg\u00fan viejo servidor. Puede calcular cu\u00e1ntos buffers compartidos tiene, para que las huge pages quepan dentro. <\/p>\n<p><\/p>\n<p>Y si tiene todo el servidor dedicado a PostgreSQL, un buen punto de partida es asignar el 25 % de la memoria RAM a los buffers compartidos, o el 75 %, si est\u00e1 seguro de que su base de datos puede caber en esos 75 %. Este es el primer punto de partida. Y calcule, si tiene 256 GB de memoria RAM, entonces, por lo tanto, tendr\u00e1 64 GB de buffers compartidos. Calcule con un margen de seguridad \u2013 en qu\u00e9 debe estar establecido este n\u00famero.<\/p>\n<p><\/p>\n<p>Hasta la versi\u00f3n 9.2 (si no me equivoco, desde la versi\u00f3n 8.2) era posible integrar PostgreSQL con huge pages mediante una biblioteca externa. Y esto siempre debe hacerse. Primero, necesita que el n\u00facleo pueda asignar huge pages correctamente. Y en segundo lugar, que la aplicaci\u00f3n que trabaja con ellas pueda utilizarlas. No se aprovechar\u00e1 por s\u00ed sola. Dado que PostgreSQL asign\u00f3 memoria al estilo de system 5, esto se pod\u00eda hacer con libhugetlbfs \u2014 este es el nombre completo de la biblioteca.<\/p>\n<p><\/p>\n<p>En 9.3 se mejor\u00f3 el rendimiento de PostgreSQL en el manejo de la memoria y se abandon\u00f3 el m\u00e9todo de asignaci\u00f3n de memoria system 5. Todos estaban muy contentos, porque de lo contrario, al intentar iniciar dos instancias de PostgreSQL en una misma m\u00e1quina, te dice que no hay suficiente memoria compartida. Y menciona que hay que ajustar el sysctl. Y ese sysctl es tal que hay que reiniciar y dem\u00e1s. En general, todos se alegraron. Pero la asignaci\u00f3n de memoria mmap rompi\u00f3 el uso de huge pages. La mayor\u00eda de nuestros clientes utilizan grandes buffers compartidos. Y recomendamos encarecidamente no actualizar a 9.3, porque el overhead empezaba a contarse en buenos porcentajes.<\/p>\n<p><\/p>\n<p>Sin embargo, la comunidad prest\u00f3 atenci\u00f3n a este problema y en 9.4 se trabaj\u00f3 muy bien en este aspecto. Y en 9.4 apareci\u00f3 un par\u00e1metro en postgresql.conf, donde puedes habilitar try, on u off.<\/p>\n<p><\/p>\n<p>Try es el par\u00e1metro m\u00e1s seguro. Al iniciar PostgreSQL, cuando asigna memoria compartida, intenta tomar de huge pages esa memoria. Y si no tiene \u00e9xito, vuelve a la asignaci\u00f3n normal. Y si est\u00e1s en FreeBSD o Solaris, puedes usar try, siempre es seguro. <\/p>\n<p><\/p>\n<p>Si est\u00e1 on, simplemente no se iniciar\u00e1 si no pudo asignar de huge pages. Aqu\u00ed ya depende de cada uno. Pero si tienes try, verifica que realmente se haya asignado lo necesario, porque hay mucho margen para el error. Actualmente, esta funcionalidad solo funciona en Linux.<\/p>\n<p><\/p>\n<p>Una peque\u00f1a nota antes de avanzar. Transparent huge pages no se aplica a PostgreSQL por ahora. No puede utilizarlas de manera adecuada. Y en el caso de Transparent huge pages, para una carga de trabajo que necesita un gran bloque de memoria compartida, las ventajas solo se presentan en vol\u00famenes muy grandes. Si tienes terabytes de memoria, entonces esto puede tener importancia. Si hablamos de aplicaciones m\u00e1s comunes, donde tienes 32, 64, 128, 256 GB de memoria en la m\u00e1quina, entonces simplemente huge pages est\u00e1 bien, y desactivamos Transparent. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Ajustes de Linux para mejorar el rendimiento de PostgreSQL. Ilya Kosmodemyansky\" src=\"\/wp-content\/uploads\/2020\/06\/18cf3ace8876e55b42e66f617a24f1bc.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Y la \u00faltima cosa relacionada con la memoria, que no est\u00e1 directamente vinculada al flujo de datos, puede arruinar mucho. Todo el ancho de banda se ve afectado seriamente si el servidor est\u00e1 constantemente haciendo swap. <\/p>\n<p><\/p>\n<p>Y esto ser\u00e1 muy desagradable en varios momentos. Y el principal inconveniente radica en que en los n\u00facleos modernos el comportamiento es un poco diferente al de los n\u00facleos Linux m\u00e1s antiguos. Y esto es algo con lo que es bastante inc\u00f3modo lidiar, porque cuando hablamos de alguna operaci\u00f3n con swap, esto termina no siendo la llegada oportuna del OOM-killer. Y el OOM-killer que lleg\u00f3 tarde y elimin\u00f3 PostgreSQL es molesto. Todos, es decir, hasta el \u00faltimo usuario, se dar\u00e1n cuenta de esto. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Ajustes de Linux para mejorar el rendimiento de PostgreSQL. Ilya Kosmodemyansky\" src=\"\/wp-content\/uploads\/2020\/06\/c7c46ff0f4cd8cfcfb21978dd1da4c08.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>\u00bfQu\u00e9 est\u00e1 pasando? Tienes una gran cantidad de memoria RAM, todo funciona bien. Pero por alguna raz\u00f3n, el servidor se queda atascado en swap y eso lo ralentiza. Podr\u00eda parecer que hay mucha memoria, pero esto ocurre. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Ajustes de Linux para mejorar el rendimiento de PostgreSQL. Ilya Kosmodemyansky\" src=\"\/wp-content\/uploads\/2020\/06\/24d19929f1506cd9768a836095a24dfb.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Antes recomend\u00e1bamos establecer vm.swappiness en cero, es decir, desactivar swap. Antes parec\u00eda que 32 GB de memoria RAM y los buffers compartidos correspondientes eran una cantidad enorme. La funci\u00f3n principal del swap es proporcionar un espacio donde enviar un n\u00facleo si fallamos. Y eso ya no se estaba cumpliendo. \u00bfY qu\u00e9 har\u00e1s luego con este n\u00facleo? Esa es ya una tarea en la que no est\u00e1 muy claro para qu\u00e9 sirve el swap, a\u00fan m\u00e1s de tal tama\u00f1o. <\/p>\n<p><\/p>\n<p>Pero en los n\u00facleos modernos, es decir, en las versiones tres, el comportamiento ha cambiado. Y si ajustas swap a cero, es decir, lo apagas, tarde o temprano, incluso con una cierta cantidad de memoria RAM restante, el OOM-killer vendr\u00e1 a matar a los consumidores m\u00e1s intensivos. Porque \u00e9l considerar\u00e1 que con tal carga de trabajo nos queda un poco y vamos a fallar, es decir, no apu\u00f1alar el proceso del sistema, sino eliminar algo menos importante. Lo menos importante resultar\u00e1 ser el consumidor intensivo de memoria compartida, a saber, postmaster. Y despu\u00e9s de esto, ser\u00e1 un alivio si no tienes que restaurar la base de datos. <\/p>\n<p><\/p>\n<p>Por lo tanto, ahora por defecto, si no me equivoco, la mayor\u00eda de las distribuciones utilizan alrededor de 6, es decir, en qu\u00e9 momento comenzamos a utilizar swap dependiendo de cu\u00e1nta memoria queda. <strong>Ahora recomendamos establecer vm.swappiness = 1, porque esto pr\u00e1cticamente lo apaga, pero evita los efectos de una llegada inesperada del OOM-killer que lo elimina todo.<\/strong> <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Ajustes de Linux para mejorar el rendimiento de PostgreSQL. Ilya Kosmodemyansky\" src=\"\/wp-content\/uploads\/2020\/06\/20f01dca0aff819abcbb687cea69ac74.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>\u00bfQu\u00e9 sigue? Cuando hablamos del rendimiento de las bases de datos y poco a poco nos acercamos a los discos, todos empiezan a agarrarse la cabeza. Porque la verdad de que el disco es lento y la memoria es r\u00e1pida es algo que todos conocen desde peque\u00f1os. Y todos saben que en las bases de datos habr\u00e1 problemas con el rendimiento del disco.<\/p>\n<p><\/p>\n<p>El principal problema con el rendimiento de PostgreSQL, relacionado con los picos de checkpoints, no surge porque el disco sea lento. M\u00e1s bien se debe a que el ancho de banda de la memoria y el disco no est\u00e1n equilibrados. Adem\u00e1s, pueden estar desbalanceados en diferentes lugares. PostgreSQL no est\u00e1 configurado, el SO no est\u00e1 configurado, el hardware no est\u00e1 configurado y el hardware es incorrecto. Y este problema no ocurre solo si todo se hace como debe ser, es decir, o no hay carga, o las configuraciones y el hardware est\u00e1n bien seleccionados. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Ajustes de Linux para mejorar el rendimiento de PostgreSQL. Ilya Kosmodemyansky\" src=\"\/wp-content\/uploads\/2020\/06\/c4d841f9ed48bb5bb1b29bd9f189753f.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>\u00bfQu\u00e9 es esto y c\u00f3mo se ve? Normalmente, las personas que trabajan con PostgreSQL han pasado por esto varias veces. Lo explicar\u00e9. Como dije, PostgreSQL hace checkpoints peri\u00f3dicamente para volcar las p\u00e1ginas sucias de la memoria compartida al disco. Si tenemos un gran volumen de memoria compartida, el checkpoint comienza a afectar intensamente al disco porque vuelca estas p\u00e1ginas usando fsync. Llega al kernel buffer y se escribe en los discos mediante fsync. Y si el volumen de esto es grande, podemos observar un efecto desagradable, a saber, una utilizaci\u00f3n del disco muy alta.<\/p>\n<p><\/p>\n<p>Aqu\u00ed tengo dos im\u00e1genes. Ahora explicar\u00e9 qu\u00e9 son. Son dos gr\u00e1ficos correlacionados en el tiempo. El primer gr\u00e1fico es la utilizaci\u00f3n del disco. Aqu\u00ed alcanza casi el 90% en ese momento. Si su base de datos cae con discos f\u00edsicos, con un controlador RAID y la utilizaci\u00f3n est\u00e1 al 90%, entonces son malas noticias. Esto significa que un poco m\u00e1s y llegar\u00e1 al 100% y la entrada\/salida se detendr\u00e1. <\/p>\n<p><\/p>\n<p>Si tiene un arreglo de discos, la historia es un poco diferente. Ah\u00ed depende de c\u00f3mo est\u00e9 configurado, qu\u00e9 tipo de arreglo, etc. <\/p>\n<p><\/p>\n<p>Y paralelamente aqu\u00ed se ha configurado un gr\u00e1fico de una vista interna de Postgres que indica c\u00f3mo se realiza el checkpoint. Y en color verde se muestra cu\u00e1ntos buffers, estas p\u00e1ginas sucias, llegaron en ese momento a este checkpoint para sincronizaci\u00f3n. Y esto es lo principal que se debe saber aqu\u00ed. Vemos que hay muchas p\u00e1ginas que llegaron y en alg\u00fan momento nos topamos con la placa, es decir, estuvimos escribiendo constantemente, aqu\u00ed claramente el sistema de discos est\u00e1 muy ocupado. Y nuestro checkpoint est\u00e1 afectando mucho al disco. En un escenario ideal, la situaci\u00f3n deber\u00eda verse, m\u00e1s bien, as\u00ed, es decir, aqu\u00ed hubo menos escritura. Y con la configuraci\u00f3n podemos arreglar esto para que siga as\u00ed. Es decir, la utilizaci\u00f3n es baja, pero en alg\u00fan lugar estamos escribiendo. <\/p>\n<p><\/p>\n<p>\u00bfQu\u00e9 se debe hacer para resolver este problema? Si su IO se ha detenido en la base de datos, significa que todos los usuarios que vinieron a ejecutar sus consultas estar\u00e1n esperando. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Ajustes de Linux para mejorar el rendimiento de PostgreSQL. Ilya Kosmodemyansky\" src=\"\/wp-content\/uploads\/2020\/06\/3efac5fe79443c32f56ec8da2f418116.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Si se observa desde el punto de vista de Linux, si ha tomado un buen hardware, lo ha configurado correctamente y ha ajustado adecuadamente PostgreSQL para que realice estos checkpoints con menos frecuencia, esparci\u00e9ndolos en el tiempo uno entre otro, entonces est\u00e1 utilizando los par\u00e1metros predeterminados de Debian. Para la mayor\u00eda de las distribuciones de Linux, esta es la situaci\u00f3n: vm.dirty_ratio=20, vm.dirty_background_ratio=10.<\/p>\n<p><\/p>\n<p>\u00bfQu\u00e9 significa esto? A partir del n\u00facleo 2.6, apareci\u00f3 un demonio de flushing. Pgflush, dependiendo de cu\u00e1l se utilice, se encarga de la descarga en segundo plano de las p\u00e1ginas sucias del buffer del n\u00facleo y descarga, cuando sea necesario, las p\u00e1ginas sucias, cuando el flushing en segundo plano ya no es suficiente. <\/p>\n<p><\/p>\n<p>\u00bfCu\u00e1ndo se activa el fondo? Cuando el 10 % de toda la memoria RAM en el servidor est\u00e1 ocupada por p\u00e1ginas sucias en el buffer del n\u00facleo, se llama a una funci\u00f3n especial de escritura en segundo plano. \u00bfPor qu\u00e9 es de fondo? Toma como par\u00e1metro cu\u00e1ntas p\u00e1ginas escribir. Y, por ejemplo, escribe N p\u00e1ginas. Y por un tiempo, esta cosa se duerme. Luego vuelve y escribe otra cantidad de p\u00e1ginas. <\/p>\n<p><\/p>\n<p>Esta es una historia extremadamente simple. Aqu\u00ed la tarea es como con una piscina, cuando se vierte en un tubo y se llena en otro. Nuestro checkpoint ha llegado y si ha enviado pocas p\u00e1ginas sucias para descarga, gradualmente se dispersar\u00e1 todo esto cuidadosamente desde el buffer del n\u00facleo pgflush. <\/p>\n<p><\/p>\n<p>Si siguen acumul\u00e1ndose esas p\u00e1ginas sucias, se acumulan hasta el 20%, despu\u00e9s de esto, la prioridad del sistema operativo es escribir todo esto en el disco, porque la alimentaci\u00f3n se cortar\u00e1, y estaremos en problemas. Perderemos esos datos, por ejemplo. <\/p>\n<p><\/p>\n<p>\u00bfCu\u00e1l es el truco? <strong>El truco consiste en que estos par\u00e1metros en el mundo moderno, el 20% y el 10% de toda la memoria RAM disponible en la m\u00e1quina, son completamente monstruosos desde el punto de vista del rendimiento de cualquier sistema de disco que tengas.<\/strong> <\/p>\n<p><\/p>\n<p>Imagina que tienes 128 GB de memoria RAM. 12,8 GB llegan a tu sistema de disco. Y por mucho que tengas cach\u00e9 all\u00ed, o por mucho que tengas un arreglo, no soportar\u00e1n tanto. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Ajustes de Linux para mejorar el rendimiento de PostgreSQL. Ilya Kosmodemyansky\" src=\"\/wp-content\/uploads\/2020\/06\/1e4bab2fad7d3a05dc76cdd9d153f46c.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p><strong>Por lo tanto, recomendamos configurar esos n\u00fameros desde la capacidad de tu controlador RAID.<\/strong> Aqu\u00ed hay una recomendaci\u00f3n para un controlador que tiene 512 MB de cach\u00e9. <\/p>\n<p><\/p>\n<p>Todo se considera de manera muy simple. Se puede establecer vm.dirty_background en bytes. Y esas configuraciones anulan las dos anteriores. O el ratio por defecto, o las activadas con bytes, funcionar\u00e1n las que tienen bytes. Pero dado que soy consultor DBA y trabajo con diferentes clientes, trato de ponerme a cubierto, as\u00ed que si en bytes, entonces en bytes. Nadie ha dado ninguna garant\u00eda de que un buen administrador no le agregue memoria al servidor, no lo reinicie, y el n\u00famero permanezca igual. Simplemente calculen esos n\u00fameros, para garantizar que todo quepa ah\u00ed. <\/p>\n<p><\/p>\n<p>\u00bfQu\u00e9 sucede si no cabe? Se dice que se detiene efectivamente cualquier flushing, pero en realidad es una figura ret\u00f3rica. El sistema operativo tiene un gran problema: tiene muchas p\u00e1ginas sucias, por lo tanto se detiene efectivamente la IO que generan tus clientes, es decir, cuando una aplicaci\u00f3n env\u00eda una consulta SQL a la base, est\u00e1 en espera. Cualquier entrada\/salida en ella est\u00e1 en la prioridad m\u00e1s baja, porque la base est\u00e1 ocupada con el checkpoint. Y cu\u00e1ndo lo terminar\u00e1 es completamente incierto. Y cuando has alcanzado el flushing no de fondo, no background, significa que toda tu IO est\u00e1 ocupada con eso. Y mientras no termine, no podr\u00e1s hacer nada. <\/p>\n<p><\/p>\n<p>Aqu\u00ed hay otros dos puntos importantes que est\u00e1n m\u00e1s all\u00e1 de este informe. Estas configuraciones deben coincidir con las configuraciones en postgresql.conf, es decir, las configuraciones de checkpoints. Y tu sistema de disco debe estar adecuadamente configurado. <strong>Si tienes cach\u00e9 en RAID, debe haber una bater\u00eda en \u00e9l.<\/strong> Las personas compran RAID con buen cach\u00e9 sin bater\u00eda. <strong>Si tienes SSD en RAID, deben ser de servidor, deben tener condensadores.<\/strong> Aqu\u00ed hay una lista de verificaci\u00f3n detallada. En este enlace est\u00e1 mi informe sobre c\u00f3mo configurar el rendimiento del disco en PostgreSQL. Ah\u00ed est\u00e1n todas estas listas de verificaci\u00f3n. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Ajustes de Linux para mejorar el rendimiento de PostgreSQL. Ilya Kosmodemyansky\" src=\"\/wp-content\/uploads\/2020\/06\/0ca13d550cb9eec4163f886467b2b3ea.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>\u00bfQu\u00e9 m\u00e1s puede complicar la vida? Son dos par\u00e1metros. Son relativamente nuevos. Pueden estar habilitados por defecto en diferentes aplicaciones. Y pueden complicar la vida tanto como si est\u00e1n habilitados incorrectamente. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Ajustes de Linux para mejorar el rendimiento de PostgreSQL. Ilya Kosmodemyansky\" src=\"\/wp-content\/uploads\/2020\/06\/35aa98d67ff1f089a751a5fd808bd1b6.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Hay dos cosas relativamente nuevas. Ya aparecen en los n\u00facleos tres. Son sched_migration_cost en nanosegundos y sched_autogroup_enabled, que por defecto es uno. <\/p>\n<p><\/p>\n<p>\u00bfY c\u00f3mo arruinan la vida? \u00bfQu\u00e9 es sched_migration_cost? El planificador de Linux puede migrar un proceso de una CPU a otra. Y para PostgreSQL, que ejecuta consultas, la migraci\u00f3n a otra CPU no tiene sentido. Desde la perspectiva del sistema operativo, cuando cambias entre ventanas de openoffice y terminal, puede que sea bueno, pero <strong>para la base de datos, esto es muy malo.<\/strong> <strong>Por lo tanto, una pol\u00edtica sensata es establecer el migration_cost en un valor grande, al menos en varios miles de nanosegundos.<\/strong> <\/p>\n<p><\/p>\n<p>\u00bfQu\u00e9 significar\u00e1 esto para el planificador? Considerar\u00e1 que durante ese tiempo este proceso todav\u00eda est\u00e1 caliente. Es decir, si tienes alguna transacci\u00f3n larga que est\u00e1 haciendo algo, el planificador lo entender\u00e1. Considerar\u00e1 que mientras no pase este tiempo de espera, no es necesario migrar este proceso a ning\u00fan lado. Si este proceso est\u00e1 haciendo algo, no se migrar\u00e1 a ning\u00fan otro lugar, terminar\u00e1 tranquilamente en la CPU que se le asign\u00f3. Y el resultado es excelente. <\/p>\n<p><\/p>\n<p>El segundo punto es autogroup. Hay una buena idea para cargas de trabajo espec\u00edficas, que no tienen relaci\u00f3n con bases de datos modernas, que es agrupar procesos seg\u00fan el terminal virtual desde el cual fueron iniciados. Esto es conveniente para algunas tareas. <strong>En la pr\u00e1ctica, PostgreSQL es un sistema multiproceso con prefork que se inicia desde un solo terminal. Tendr\u00e1 un bloqueador de escritura, un checkpoint, y todas sus solicitudes de clientes se agrupar\u00e1n en un solo programador, en una sola CPU. Y estar\u00e1n all\u00ed esperando pac\u00edficamente a que se libere, interrumpi\u00e9ndose entre s\u00ed y ocup\u00e1ndolo por m\u00e1s tiempo. Esta es una situaci\u00f3n que no se necesita en caso de tal carga y, por lo tanto, debe desactivarse.<\/strong><\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Ajustes de Linux para mejorar el rendimiento de PostgreSQL. Ilya Kosmodemyansky\" src=\"\/wp-content\/uploads\/2020\/06\/55e829d1c1b69b7f6eaf5fc89dad30d3.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Mi colega Alex\u00e9i Lesovski realiz\u00f3 pruebas con un pgbench simple, donde aument\u00f3 en un orden el migration_cost y desactiv\u00f3 el autogroup. <strong>La diferencia en un hardware deficiente fue de casi un 10%.<\/strong>. Hay una discusi\u00f3n en la lista de correo de PostgreSQL donde la gente presenta resultados sobre c\u00f3mo tales cambios afectaron la velocidad de las consultas. <strong>influyeron en un 50%.<\/strong>. Hay muchas historias como estas.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Ajustes de Linux para mejorar el rendimiento de PostgreSQL. Ilya Kosmodemyansky\" src=\"\/wp-content\/uploads\/2020\/06\/b3d1983ec2a37f8b85129c93f2373644.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Y por \u00faltimo, sobre la pol\u00edtica de ahorro de energ\u00eda. Es bueno que ahora se pueda usar Linux en una laptop. Y supuestamente consumir\u00e1 bien la bater\u00eda. Pero resulta que esto tambi\u00e9n puede ocurrir en un servidor. <\/p>\n<p><\/p>\n<p>Adem\u00e1s, si alquila servidores a alg\u00fan proveedor de hosting, entonces los \"amables\" <a class=\"wpil_keyword_link\" href=\"https:\/\/prohoster.info\/es\/\"   title=\"hosting\" data-wpil-keyword-link=\"linked\"  data-wpil-monitor-id=\"1200\">hosting<\/a> no se preocupan por que tenga un mejor rendimiento. Su tarea es asegurarse de que su hardware se utilice de manera m\u00e1s eficiente. Por lo tanto, pueden habilitar de forma predeterminada el modo de ahorro de energ\u00eda de laptop en el sistema operativo.<\/p>\n<p><\/p>\n<p><strong>Si utiliza en un servidor con una base de datos bajo carga intensa esta opci\u00f3n, su elecci\u00f3n es acpi_cpufreq + performance. Incluso con ondemand ya habr\u00e1 problemas.<\/strong> <\/p>\n<p><\/p>\n<p>Intel_pstate es un controlador un poco diferente. Y ahora se prefiere este, ya que es m\u00e1s reciente y funciona mejor.<\/p>\n<p><\/p>\n<p>Y, por lo tanto, el gobernador solo debe ser performance. Ondemand, powersave y todo lo dem\u00e1s no son para usted. <\/p>\n<p><\/p>\n<p>Los resultados del explain analyze en PostgreSQL pueden diferir en varios \u00f3rdenes de magnitud si habilita powersave, porque pr\u00e1cticamente el CPU bajo su base de datos se programar\u00e1 de manera completamente impredecible.<\/p>\n<p><\/p>\n<p>Estas configuraciones pueden estar habilitadas por defecto. \u00c9chale un vistazo detenidamente - verifica si est\u00e1n habilitadas por defecto. Esto puede ser realmente un gran problema. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Ajustes de Linux para mejorar el rendimiento de PostgreSQL. Ilya Kosmodemyansky\" src=\"\/wp-content\/uploads\/2020\/06\/ef32dafd9c8ea3403dc31c34ee2b5da8.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Y al final quer\u00eda agradecer a los chicos de nuestro equipo de DBA PosgreSQL-Consulting, en particular a Max Boguk y Alexey Lesovsky, quienes se enfrentan a desaf\u00edos diariamente en este tema. Y para nuestros clientes, nos esforzamos por hacer que todo funcione lo mejor posible. Aqu\u00ed es como con las instrucciones de seguridad a\u00e9rea. Todo est\u00e1 escrito con sangre. Cada uno de estos problemas fue descubierto durante alg\u00fan inconveniente. Con gusto los comparto con ustedes.<\/p>\n<p><\/p>\n<p>Preguntas:<\/p>\n<p><\/p>\n<p><em>\u00a1Gracias! Si, por ejemplo, una empresa quiere ahorrar y alojar la base de datos y la l\u00f3gica de la aplicaci\u00f3n en un mismo servidor, o si la empresa sigue la tendencia moderna de arquitecturas de microservicios, donde PostgreSQL se ejecuta en un contenedor. \u00bfCu\u00e1l es el truco? Sysctl afecta globalmente a todo el n\u00facleo. No he o\u00eddo que sysctl se virtualice de alguna manera para funcionar por separado en un contenedor. Solo hay cgroup y all\u00ed solo hay control parcial. \u00bfC\u00f3mo se puede vivir con esto? O si desea rendimiento, entonces ejecute PostgreSQL en un servidor f\u00edsico separado y aj\u00fastelo.<\/em><\/p>\n<p><\/p>\n<p>Respondimos a su pregunta de aproximadamente tres maneras. Si no se trata de un servidor f\u00edsico que se pueda ajustar, rel\u00e1jese, todo funcionar\u00e1 bien sin esa configuraci\u00f3n. Si tiene una carga tal que necesita hacer estas configuraciones, llegar\u00e1 a un servidor f\u00edsico antes que a estas configuraciones.<\/p>\n<p><\/p>\n<p>\u00bfCu\u00e1l es el problema? Si es una m\u00e1quina virtual, es probable que tenga muchos problemas, por ejemplo, con el hecho de que la latencia del disco es bastante inconsistente en la mayor\u00eda de las m\u00e1quinas virtuales. Incluso si el ancho de banda de los discos es bueno, una transacci\u00f3n fallida en operaciones de entrada\/salida, que no afecta mucho al rendimiento promedio, que ocurre durante un checkpoint o al escribir en WAL, har\u00e1 que la base de datos sufra gravemente. Y notar\u00e1 esto antes de encontrarse con esos problemas. <\/p>\n<p><\/p>\n<p>Si tiene NGINX en el mismo servidor, tambi\u00e9n tendr\u00e1 el mismo problema. Competir\u00e1 por la memoria compartida. Y no llegar\u00e1 a los problemas que se describen aqu\u00ed.<\/p>\n<p><\/p>\n<p>Pero, por otro lado, algunos de estos par\u00e1metros seguir\u00e1n siendo relevantes para usted. Por ejemplo, con sysctl establecer dirty_ratio para que no sea tan extremo; de todos modos, esto ayudar\u00e1. De una forma u otra, tendr\u00e1 interacci\u00f3n con el disco. Y lo har\u00e1 de una manera incorrecta. Esos son en general los par\u00e1metros predeterminados que mostr\u00e9. Y en cualquier caso, es mejor cambiarlos. <\/p>\n<p><\/p>\n<p>Y puede haber problemas con NUMA. VmWare, por ejemplo, funciona bien con NUMA con configuraciones totalmente opuestas. Y aqu\u00ed hay que elegir: \u00bfservidor f\u00edsico o no f\u00edsico? <\/p>\n<p><\/p>\n<p><em>Tengo una pregunta relacionada con Amazon AWS. Ellos tienen im\u00e1genes preconfiguradas. Una de ellas se llama Amazon RDS. \u00bfHay alguna configuraci\u00f3n personalizada para su sistema operativo?<\/em><\/p>\n<p><\/p>\n<p>Hay configuraciones, pero son diferentes. Aqu\u00ed configuramos el sistema operativo desde el punto de vista de c\u00f3mo la base de datos utilizar\u00e1 esto. Y all\u00ed hay par\u00e1metros que determinan a d\u00f3nde vamos, como un tipo de shaping. Es decir, necesitamos tantos recursos, y ahora los consumiremos. Despu\u00e9s de esto, Amazon RDS incorpora esos recursos, y ah\u00ed la performance disminuye. Hay historias separadas de c\u00f3mo la gente comienza a jugar con esto. A veces con bastante \u00e9xito. Pero esto no tiene que ver con la configuraci\u00f3n del sistema operativo. Es como un hackeo en la nube. Esa es otra historia.<\/p>\n<p><\/p>\n<p><em>\u00bfPor qu\u00e9 las Transparent huge pages no tienen efecto en comparaci\u00f3n con Huge TLB?<\/em><\/p>\n<p><\/p>\n<p>No lo tienen. Se puede explicar de muchas maneras. Pero en realidad simplemente no lo dan. \u00bfCu\u00e1l es la historia con PostgreSQL? Al iniciar, asigna un gran bloque de memoria compartida. Si son Transparent o no, no importa en absoluto. El hecho de que se asignen al inicio lo explica todo. Y si hay mucha memoria y es necesario reconstruir el segmento de shared_memory, entonces las Transparent huge pages ser\u00e1n relevantes. En PostgreSQL, simplemente se asigna un gran bloque al inicio y ya, no sucede nada especial despu\u00e9s de eso. Se puede usar, claro, pero hay una posibilidad de corrupci\u00f3n en shared_memory, cuando se reasigne algo. PostgreSQL no sabe nada de esto.<\/p>\n<p>Fuente: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/505108\/\">habr.com<\/a> <\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u0420\u0430\u0441\u0448\u0438\u0444\u0440\u043e\u0432\u043a\u0430 \u0434\u043e\u043a\u043b\u0430\u0434\u0430 2015 \u0433\u043e\u0434\u0430 \u0418\u043b\u044c\u0438 \u041a\u043e\u0441\u043c\u043e\u0434\u0435\u043c\u044c\u044f\u043d\u0441\u043a\u043e\u0433\u043e &quot;Linux tuning to improve PostgreSQL performance&quot; Disclaimer: \u0417\u0430\u043c\u0435\u0447\u0443 \u0447\u0442\u043e \u0434\u043e\u043a\u043b\u0430\u0434 \u044d\u0442\u043e\u0442 \u0434\u0430\u0442\u0438\u0440\u043e\u0432\u0430\u043d \u043d\u043e\u044f\u0431\u0440\u0435\u043c 2015 \u0433\u043e\u0434\u0430 \u2014 \u043f\u0440\u043e\u0448\u043b\u043e \u0431\u043e\u043b\u044c\u0448\u0435 4 \u043b\u0435\u0442 \u0438 \u043f\u0440\u043e\u0448\u043b\u043e \u043c\u043d\u043e\u0433\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438. \u0420\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0435\u043c\u0430\u044f \u0432 \u0434\u043e\u043a\u043b\u0430\u0434\u0435 \u0432\u0435\u0440\u0441\u0438\u044f 9.4 \u0443\u0436\u0435 \u043d\u0435 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442\u0441\u044f. \u0417\u0430 \u043f\u0440\u043e\u0448\u0435\u0434\u0448\u0438\u0435 4 \u0433\u043e\u0434\u0430 \u0432\u044b\u0448\u043b\u043e 5 \u043d\u043e\u0432\u044b\u0445 \u0440\u0435\u043b\u0438\u0437\u043e\u0432 PostgreSQL \u0432\u044b\u0448\u043b\u043e \u0438 15 \u0432\u0435\u0440\u0441\u0438\u0439 \u044f\u0434\u0440\u0430 Linux. \u0415\u0441\u043b\u0438 \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":84083,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-84082","post","type-post","status-publish","format-standard","has-post-thumbnail","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=\"\u0420\u0430\u0441\u0448\u0438\u0444\u0440\u043e\u0432\u043a\u0430 \u0434\u043e\u043a\u043b\u0430\u0434\u0430 2015 \u0433\u043e\u0434\u0430 \u0418\u043b\u044c\u0438 \u041a\u043e\u0441\u043c\u043e\u0434\u0435\u043c\u044c\u044f\u043d\u0441\u043a\u043e\u0433\u043e &quot;Linux tuning to improve PostgreSQL performance&quot; Disclaimer: \u0417\u0430\u043c\u0435\u0447\u0443 \u0447\u0442\u043e \u0434\u043e\u043a\u043b\u0430\u0434 \u044d\u0442\u043e\u0442 \u0434\u0430\u0442\u0438\u0440\u043e\u0432\u0430\u043d \u043d\u043e\u044f\u0431\u0440\u0435\u043c 2015 \u0433\u043e\u0434\u0430 \u2014 \u043f\u0440\u043e\u0448\u043b\u043e \u0431\u043e\u043b\u044c\u0448\u0435 4 \u043b\u0435\u0442 \u0438 \u043f\u0440\u043e\u0448\u043b\u043e \u043c\u043d\u043e\u0433\u043e.\" \/>\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\/linux-tuning-to-improve-postgresql-performance-ilya-kosmodemyanskij\" \/>\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\udd47Linux tuning to improve PostgreSQL performance. \u0418\u043b\u044c\u044f \u041a\u043e\u0441\u043c\u043e\u0434\u0435\u043c\u044c\u044f\u043d\u0441\u043a\u0438\u0439 | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u0420\u0430\u0441\u0448\u0438\u0444\u0440\u043e\u0432\u043a\u0430 \u0434\u043e\u043a\u043b\u0430\u0434\u0430 2015 \u0433\u043e\u0434\u0430 \u0418\u043b\u044c\u0438 \u041a\u043e\u0441\u043c\u043e\u0434\u0435\u043c\u044c\u044f\u043d\u0441\u043a\u043e\u0433\u043e &quot;Linux tuning to improve PostgreSQL performance&quot; Disclaimer: \u0417\u0430\u043c\u0435\u0447\u0443 \u0447\u0442\u043e \u0434\u043e\u043a\u043b\u0430\u0434 \u044d\u0442\u043e\u0442 \u0434\u0430\u0442\u0438\u0440\u043e\u0432\u0430\u043d \u043d\u043e\u044f\u0431\u0440\u0435\u043c 2015 \u0433\u043e\u0434\u0430 \u2014 \u043f\u0440\u043e\u0448\u043b\u043e \u0431\u043e\u043b\u044c\u0448\u0435 4 \u043b\u0435\u0442 \u0438 \u043f\u0440\u043e\u0448\u043b\u043e \u043c\u043d\u043e\u0433\u043e.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/es\/blog\/administrirovanie\/linux-tuning-to-improve-postgresql-performance-ilya-kosmodemyanskij\" \/>\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-06-05T05:42:28+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-06-05T05:42:28+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\udd47Ajuste de Linux para mejorar el rendimiento de PostgreSQL. Ilya Kosmodemyansky | ProHoster","description":"Transcripci\u00f3n de la presentaci\u00f3n de 2015 de Ilya Kosmodemyansky \"Ajuste de Linux para mejorar el rendimiento de PostgreSQL\" Disclaimer: Se\u00f1alo que esta presentaci\u00f3n est\u00e1 fechada en noviembre de 2015 \u2014 han pasado m\u00e1s de 4 a\u00f1os y ha pasado mucho.","canonical_url":"https:\/\/prohoster.info\/es\/blog\/administrirovanie\/linux-tuning-to-improve-postgresql-performance-ilya-kosmodemyanskij","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\udd47Linux tuning to improve PostgreSQL performance. \u0418\u043b\u044c\u044f \u041a\u043e\u0441\u043c\u043e\u0434\u0435\u043c\u044c\u044f\u043d\u0441\u043a\u0438\u0439 | ProHoster","og:description":"\u0420\u0430\u0441\u0448\u0438\u0444\u0440\u043e\u0432\u043a\u0430 \u0434\u043e\u043a\u043b\u0430\u0434\u0430 2015 \u0433\u043e\u0434\u0430 \u0418\u043b\u044c\u0438 \u041a\u043e\u0441\u043c\u043e\u0434\u0435\u043c\u044c\u044f\u043d\u0441\u043a\u043e\u0433\u043e &quot;Linux tuning to improve PostgreSQL performance&quot; Disclaimer: \u0417\u0430\u043c\u0435\u0447\u0443 \u0447\u0442\u043e \u0434\u043e\u043a\u043b\u0430\u0434 \u044d\u0442\u043e\u0442 \u0434\u0430\u0442\u0438\u0440\u043e\u0432\u0430\u043d \u043d\u043e\u044f\u0431\u0440\u0435\u043c 2015 \u0433\u043e\u0434\u0430 \u2014 \u043f\u0440\u043e\u0448\u043b\u043e \u0431\u043e\u043b\u044c\u0448\u0435 4 \u043b\u0435\u0442 \u0438 \u043f\u0440\u043e\u0448\u043b\u043e \u043c\u043d\u043e\u0433\u043e.","og:url":"https:\/\/prohoster.info\/es\/blog\/administrirovanie\/linux-tuning-to-improve-postgresql-performance-ilya-kosmodemyanskij","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-06-05T05:42:28+00:00","article:modified_time":"2020-06-05T05:42:28+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"84082","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 15:05:32","updated":"2026-02-09 21:38:01","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\/84082","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=84082"}],"version-history":[{"count":2,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/posts\/84082\/revisions"}],"predecessor-version":[{"id":159869,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/posts\/84082\/revisions\/159869"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/media\/84083"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/media?parent=84082"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/categories?post=84082"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/tags?post=84082"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}