{"id":36704,"date":"2019-10-31T22:13:15","date_gmt":"2019-10-31T19:13:15","guid":{"rendered":"https:\/\/prohoster.info\/blog\/optimizatsiya-zaprosov-bazy-dannyh-na-primere-b2b-servisa-dlya-stroitelej\/"},"modified":"2019-10-31T22:13:15","modified_gmt":"2019-10-31T19:13:15","slug":"optimizatsiya-zaprosov-bazy-dannyh-na-primere-b2b-servisa-dlya-stroitelej","status":"publish","type":"post","link":"https:\/\/prohoster.info\/es\/blog\/administrirovanie\/optimizatsiya-zaprosov-bazy-dannyh-na-primere-b2b-servisa-dlya-stroitelej","title":{"rendered":"Optimizaci\u00f3n de consultas de bases de datos en un servicio B2B para constructores","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>\u00bfC\u00f3mo multiplicar por diez la cantidad de consultas a la base de datos sin trasladarse a un servidor m\u00e1s potente y manteniendo la operatividad del sistema? Te contar\u00e9 c\u00f3mo luchamos contra la ca\u00edda del rendimiento de nuestra base de datos, c\u00f3mo optimizamos las consultas SQL para atender al mayor n\u00famero posible de usuarios y sin aumentar los costos de recursos computacionales.<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><br \/>\nEstoy desarrollando un servicio para la gesti\u00f3n de procesos empresariales en empresas de construcci\u00f3n. Con nosotros colaboran alrededor de 3 mil compa\u00f1\u00edas. M\u00e1s de 10 mil personas trabajan cada d\u00eda con nuestro sistema de 4 a 10 horas. Resuelve diversas tareas de planificaci\u00f3n, notificaci\u00f3n, alertas, validaci\u00f3n\u2026 Utilizamos PostgreSQL 9.6. En la base de datos tenemos alrededor de 300 tablas y cada d\u00eda recibe hasta 200 millones de consultas (10 mil diferentes). En promedio, tenemos entre 3 y 4 mil consultas por segundo, y en los momentos m\u00e1s \u00e1lgidos, m\u00e1s de 10 mil consultas por segundo. La mayor parte de las consultas son OLAP. Las adiciones, modificaciones y eliminaciones son considerablemente menos, es decir, la carga de OLTP es relativamente peque\u00f1a. Todas estas cifras las he presentado para que puedas evaluar la magnitud de nuestro proyecto y entender cu\u00e1n \u00fatil puede ser nuestra experiencia para ti.<\/p>\n<h3>Cuadro primero. L\u00edrico<\/h3>\n<p>\nCuando comenzamos el desarrollo, no pensamos mucho en cu\u00e1nta carga recaer\u00eda sobre la base de datos y qu\u00e9 har\u00edamos si el servidor no pudiera soportarlo. Al dise\u00f1ar la base de datos, seguimos recomendaciones generales y tratamos de no dispararnos en el pie, pero m\u00e1s all\u00e1 de consejos generales como \u201cno uses el patr\u00f3n <noindex><a rel=\"nofollow\" href=\"https:\/\/en.wikipedia.org\/wiki\/Entity%E2%80%93attribute%E2%80%93value_model\">Entity Attribute Values<\/a><\/noindex> no profundizamos. Dise\u00f1amos bas\u00e1ndonos en principios de normalizaci\u00f3n, evitando la redundancia de datos y no nos preocupamos por acelerar ciertas consultas. Una vez que llegaron los primeros usuarios, nos enfrentamos al problema del rendimiento. Como suele suceder, est\u00e1bamos completamente despreparados para esto. Los primeros problemas resultaron ser simples. Generalmente, se resolv\u00edan a\u00f1adiendo un nuevo \u00edndice. Pero lleg\u00f3 un momento en que las soluciones simples dejaron de funcionar. Al darnos cuenta de que nos faltaba experiencia y que nos costaba cada vez m\u00e1s comprender la causa de los problemas, contratamos a especialistas que nos ayudaron a configurar correctamente el servidor, conectar el monitoreo y nos mostraron d\u00f3nde mirar para obtener. <noindex><a rel=\"nofollow\" href=\"https:\/\/www.postgresql.org\/docs\/9.6\/pgstatstatements.html\">estad\u00edsticas<\/a><\/noindex>.<\/p>\n<h3>Cuadro segundo. Estad\u00edstico<\/h3>\n<p>\nTenemos alrededor de 10,000 consultas diferentes que se ejecutan en nuestra base de datos diariamente. De estas 10,000, hay monstruos que se ejecutan 2-3 millones de veces con un tiempo promedio de ejecuci\u00f3n de 0.1-0.3 ms, y hay consultas con un tiempo promedio de ejecuci\u00f3n de 30 segundos, que se llaman 100 veces al d\u00eda.<\/p>\n<p>Optimizar las 10,000 consultas no era posible, as\u00ed que decidimos averiguar hacia d\u00f3nde dirigir nuestros esfuerzos para mejorar el rendimiento de la base de datos de manera efectiva. Despu\u00e9s de varias iteraciones, comenzamos a clasificar las consultas por tipo.<\/p>\n<h4>Consultas TOP<\/h4>\n<p>\nEstas son las consultas m\u00e1s pesadas, que consumen m\u00e1s tiempo (tiempo total). Son consultas que o se llaman con mucha frecuencia o que tardan mucho en ejecutarse (las consultas lentas y frecuentes ya fueron optimizadas en las primeras iteraciones para mejorar la velocidad). En total, el servidor dedica m\u00e1s tiempo a ejecutarlas. Adem\u00e1s, es importante diferenciar las consultas top por el tiempo total de ejecuci\u00f3n y por el tiempo de I\/O. Los m\u00e9todos de optimizaci\u00f3n para estas consultas son un poco diferentes.<\/p>\n<p>La pr\u00e1ctica com\u00fan de todas las empresas es trabajar con las consultas TOP. Son pocas, y la optimizaci\u00f3n de una sola consulta puede liberar entre el 5% y el 10% de los recursos. Sin embargo, a medida que el proyecto 'madura', la optimizaci\u00f3n de las consultas TOP se convierte en una tarea cada vez m\u00e1s no trivial. Todos los m\u00e9todos simples ya se han probado, y el \u2018m\u00e1s pesado\u2019 de los pedidos consume \u2018solo\u2019 entre el 3% y el 5% de los recursos. Si las consultas TOP en conjunto ocupan menos del 30%-40% del tiempo, lo m\u00e1s probable es que ya haya hecho esfuerzos para que trabajen r\u00e1pido y ha llegado el momento de pasar a la optimizaci\u00f3n de las consultas del siguiente grupo.<br \/>\nQueda por responder cu\u00e1ntas consultas superiores incluir en este grupo. Generalmente tomo no menos de 10, pero no m\u00e1s de 20. Intento que el tiempo de la primera y la \u00faltima consulta en el grupo TOP no difiera m\u00e1s de 10 veces. Es decir, si el tiempo de ejecuci\u00f3n de las consultas cae dr\u00e1sticamente del primer lugar al d\u00e9cimo, elijo TOP-10; si la ca\u00edda es m\u00e1s gradual, aumento el tama\u00f1o del grupo a 15 o 20.<br \/>\n<img decoding=\"async\" alt=\"Optimizaci\u00f3n de consultas de bases de datos en un servicio B2B para constructores\" src=\"\/wp-content\/uploads\/2019\/08\/2a9d9e6053d1aebb71aa213757bd2393.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h4>Medianos (medium)<\/h4>\n<p>\nEstas son todas las consultas que vienen justo despu\u00e9s de las CONSULTAS TOP, excepto las \u00faltimas 5-10%. Generalmente, la oportunidad de aumentar significativamente el rendimiento del servidor radica en la optimizaci\u00f3n de estas consultas. Pueden representar hasta el 80%. Pero incluso si su cuota supera el 50%, es hora de mirarlas m\u00e1s de cerca.<\/p>\n<h4>Cola (tail)<\/h4>\n<p>\nComo se mencion\u00f3, estas consultas se llevan a cabo al final y ocupan del 5 al 10% del tiempo. Se pueden olvidar, a menos que utilices herramientas autom\u00e1ticas de an\u00e1lisis de consultas, ya que su optimizaci\u00f3n tambi\u00e9n puede ser econ\u00f3mica.<\/p>\n<p>\u00bfC\u00f3mo evaluar cada grupo?<\/p>\n<p>Utilizo una consulta SQL que ayuda a hacer esta evaluaci\u00f3n para PostgreSQL (estoy seguro de que se puede escribir una consulta similar para muchos otros SGBD).<\/p>\n<p><b class=\"spoiler_title\">Consulta SQL para evaluar el tama\u00f1o de los grupos TOP-MEDIUM-TAIL<\/b><\/p>\n<pre><code class=\"sql\">SELECT sum(time_top) AS sum_top, sum(time_medium) AS sum_medium, sum(time_tail) AS sum_tail\nFROM\n(\n  SELECT CASE WHEN rn  20 AND rn  800 THEN tt_percent ELSE 0 END AS time_tail\n  FROM (\n    SELECT total_time \/ (SELECT sum(total_time) FROM pg_stat_statements) * 100 AS tt_percent, query,\n    ROW_NUMBER () OVER (ORDER BY total_time DESC) AS rn\n    FROM pg_stat_statements\n    ORDER BY total_time DESC\n  ) AS t\n)\nAS ts\n<\/code><\/pre>\n<p>El resultado de la consulta son tres columnas, cada una de las cuales contiene el porcentaje de tiempo dedicado al procesamiento de las consultas de ese grupo. Dentro de la consulta hay dos n\u00fameros (en mi caso 20 y 800) que separan las consultas de un grupo de las de otro.<\/p>\n<p>As\u00ed es como se relacionan aproximadamente las proporciones de consultas en el momento del inicio de la optimizaci\u00f3n y ahora.<\/p>\n<p><img decoding=\"async\" alt=\"Optimizaci\u00f3n de consultas de bases de datos en un servicio B2B para constructores\" src=\"\/wp-content\/uploads\/2019\/08\/9c70ad9aba8b835c94729c9dda656eab.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nEn el diagrama se puede ver que la proporci\u00f3n de consultas TOP ha disminuido dr\u00e1sticamente, mientras que han aumentado las de \u2018media\u2019.<br \/>\nAl principio, en las consultas TOP hab\u00eda errores evidentes. Con el tiempo, los problemas iniciales desaparecieron, la proporci\u00f3n de consultas TOP se redujo, y se requer\u00edan cada vez m\u00e1s esfuerzos para acelerar las consultas pesadas. <\/p>\n<p><b class=\"spoiler_title\">Para obtener el texto de las consultas, utilizamos la siguiente consulta<\/b><\/p>\n<pre><code class=\"sql\">SELECT * FROM (\n  SELECT ROW_NUMBER () OVER (ORDER BY total_time DESC) AS rn, total_time \/ (SELECT sum(total_time) FROM pg_stat_statements) * 100 AS tt_percent, query\n  FROM pg_stat_statements\n  ORDER BY total_time DESC\n) AS T\nWHERE\nrn  20 AND rn  800  -- TAIL\n<\/code><\/pre>\n<p>Aqu\u00ed est\u00e1 la lista de las t\u00e9cnicas m\u00e1s utilizadas que nos ayudaron a acelerar las consultas TOP:<\/p>\n<ul>\n<li>Redise\u00f1o del sistema, por ejemplo, reestructuraci\u00f3n de la l\u00f3gica de notificaciones en un message broker en lugar de consultas peri\u00f3dicas a la base de datos.<\/li>\n<li>Adici\u00f3n o modificaci\u00f3n de \u00edndices.<\/li>\n<li>Reescritura de consultas ORM a SQL puro.<\/li>\n<li>Reescritura de la l\u00f3gica de carga diferida de datos.<\/li>\n<li>Cach\u00e9 a trav\u00e9s de la denormalizaci\u00f3n de datos. Por ejemplo, tenemos una relaci\u00f3n de tablas Entrega -&gt; Factura -&gt; Consulta -&gt; Solicitud. Es decir, cada entrega est\u00e1 relacionada con una solicitud a trav\u00e9s de otras tablas. Para evitar vincular todas las tablas en cada consulta, duplicamos la referencia a la solicitud en la tabla Entrega.<\/li>\n<li>Cache de tablas est\u00e1ticas con diccionarios y tablas que cambian raramente en la memoria del programa.<\/li>\n<\/ul>\n<p>\nA veces, los cambios requer\u00edan un redise\u00f1o considerable, pero proporcionaban una descarga del sistema del 5-10% y eran justificados. Con el tiempo, la mejora se hac\u00eda cada vez menor y el redise\u00f1o requer\u00eda ser m\u00e1s serio.<\/p>\n<p>Entonces, prestamos atenci\u00f3n al segundo grupo de consultas: el grupo de los intermedios. Hab\u00eda muchas m\u00e1s consultas en este grupo y parec\u00eda que el an\u00e1lisis de todo el grupo llevar\u00eda mucho tiempo. Sin embargo, la mayor\u00eda de las consultas resultaron ser muy simples de optimizar y muchos problemas se repet\u00edan decenas de veces en diferentes variaciones. Aqu\u00ed hay ejemplos de algunas optimizaciones t\u00edpicas que aplicamos a decenas de consultas similares y cada grupo de consultas optimizadas liber\u00f3 la base de datos en un 3-5%.<\/p>\n<ul>\n<li> En lugar de verificar la existencia de registros mediante COUNT y escanear completamente la tabla, comenzamos a usar EXISTS.\n <\/li>\n<li>Eliminamos DISTINCT (no hay una receta general, pero a veces se puede eliminar f\u00e1cilmente, acelerando la consulta entre 10 y 100 veces).\n<p>Por ejemplo, en lugar de una consulta para extraer todos los conductores de una gran tabla de entregas (DELIVERY). <\/p>\n<pre><code class=\"sql\">SELECT DISTINCT P.ID, P.FIRST_NAME, P.LAST_NAME\nFROM DELIVERY D JOIN PERSON P ON D.DRIVER_ID = P.ID\n<\/code><\/pre>\n<p>\nrealizamos la consulta sobre una tabla relativamente peque\u00f1a de PERSON.<\/p>\n<pre><code class=\"sql\">SELECT P.ID, P.FIRST_NAME, P.LAST_NAME\nFROM PERSON\nWHERE EXISTS(SELECT D.ID FROM DELIVERY WHERE D.DRIVER_ID = P.ID)\n<\/code><\/pre>\n<p>\nParecer\u00eda que est\u00e1bamos utilizando una subconsulta correlacionada, pero esta proporciona una aceleraci\u00f3n de m\u00e1s de 10 veces.\n <\/li>\n<li>En muchos casos, incluso renunciamos a COUNT y <br \/>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/www.citusdata.com\/blog\/2016\/10\/12\/count-performance\/#dup_counts_estimated_filtered\">lo reemplazamos con un c\u00e1lculo aproximado del valor.<\/a><\/noindex>\n <\/li>\n<li>en lugar de\n<pre><code class=\"sql\">UPPER(s) LIKE JOHN% \n<\/code><\/pre>\n<p>\nVPS KVM <\/p>\n<pre><code class=\"sql\">s ILIKE \u201cJohn%\u201d\n<\/code><\/pre>\n<p>\n <\/li>\n<\/ul>\n<p>\nCada consulta concreta logr\u00f3 acelerarse entre 3 y 1000 veces. A pesar de las cifras impresionantes, al principio nos parec\u00eda que no ten\u00eda sentido optimizar una consulta que se ejecutaba en 10 ms, que estaba en el puesto 300 de las consultas m\u00e1s pesadas y que en general ocupaba una fracci\u00f3n de un porcentaje del tiempo de carga de la base de datos. Pero aplicando la misma receta a un grupo de consultas similares, recuperamos varios puntos porcentuales. Para no perder tiempo revisando manualmente todas las cientos de consultas, escribimos algunos scripts simples que, mediante expresiones regulares, encontraban consultas similares. Como resultado, la b\u00fasqueda autom\u00e1tica de grupos de consultas nos permiti\u00f3 mejorar a\u00fan m\u00e1s nuestra productividad, invirtiendo esfuerzos modestos.<\/p>\n<p>Despu\u00e9s de todo, ya llevamos tres a\u00f1os trabajando con el mismo hardware. La carga media diaria es de alrededor del 30%, y en picos asciende al 70%. La cantidad de solicitudes, al igual que el n\u00famero de usuarios, ha crecido aproximadamente 10 veces. Todo esto gracias al monitoreo constante de los grupos de solicitudes TOP y MEDIUM. Cada vez que aparece una nueva solicitud en el grupo TOP, la analizamos y tratamos de optimizarla. Revisamos el grupo MEDIUM una vez a la semana utilizando scripts de an\u00e1lisis de solicitudes. Si encontramos nuevas solicitudes que ya sabemos c\u00f3mo optimizar, las modificamos r\u00e1pidamente. A veces encontramos nuevas formas de optimizaci\u00f3n que se pueden aplicar de inmediato a varias solicitudes. <\/p>\n<p>Seg\u00fan nuestras proyecciones, el servidor actual soportar\u00e1 un aumento en la cantidad de usuarios de 3 a 5 veces m\u00e1s. Sin embargo, tenemos otro as bajo la manga: todav\u00eda no hemos trasladado las consultas SELECT al espejo, como se recomienda hacer. Pero no lo hacemos conscientemente, ya que queremos agotar primero las posibilidades de la optimizaci\u00f3n 'inteligente', antes de recurrir a la 'artiller\u00eda pesada'.<br \/>\nUna perspectiva cr\u00edtica sobre el trabajo realizado puede sugerir la utilizaci\u00f3n de escalado vertical. Comprar un servidor m\u00e1s potente, en lugar de perder tiempo de especialistas. El servidor puede no ser tan caro, especialmente considerando que nuestros l\u00edmites de escalado vertical a\u00fan no se han agotado. Sin embargo, el n\u00famero de solicitudes solo ha aumentado 10 veces. A lo largo de los a\u00f1os, las funcionalidades del sistema han crecido y ahora hay m\u00e1s variedades de solicitudes. La funcionalidad que exist\u00eda, gracias a la cach\u00e9, se ejecuta con menos solicitudes, adem\u00e1s de que son m\u00e1s eficaces. Esto significa que se puede multiplicar por 5 para obtener un factor real de aceleraci\u00f3n. Por lo tanto, se puede decir, con los c\u00e1lculos m\u00e1s modestos, que la aceleraci\u00f3n ha sido de 50 veces o m\u00e1s. Escalar el servidor verticalmente 50 veces habr\u00eda costado m\u00e1s. Especialmente teniendo en cuenta que una optimizaci\u00f3n realizada una vez funciona todo el tiempo, mientras que la factura del servidor alquilado llega cada mes.<br \/>\n<br \/>Fuente: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/461071\/\">habr.com<\/a><\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u041a\u0430\u043a \u0432\u044b\u0440\u0430\u0441\u0442\u0438 \u0432 10 \u0440\u0430\u0437 \u043f\u043e\u0434 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0443 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u043a \u0411\u0414 \u043d\u0435 \u043f\u0435\u0440\u0435\u0435\u0437\u0436\u0430\u044f \u043d\u0430 \u0431\u043e\u043b\u0435\u0435 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u0441\u0435\u0440\u0432\u0435\u0440 \u0438 \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0440\u0430\u0431\u043e\u0442\u043e\u0441\u043f\u043e\u0441\u043e\u0431\u043d\u043e\u0441\u0442\u044c \u0441\u0438\u0441\u0442\u0435\u043c\u044b? \u042f \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0443, \u043a\u0430\u043a \u043c\u044b \u0431\u043e\u0440\u043e\u043b\u0438\u0441\u044c \u0441 \u043f\u0430\u0434\u0435\u043d\u0438\u0435\u043c \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u043d\u0430\u0448\u0435\u0439 \u0431\u0430\u0437\u044b \u0434\u0430\u043d\u043d\u044b\u0445, \u043a\u0430\u043a \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043b\u0438 SQL \u0437\u0430\u043f\u0440\u043e\u0441\u044b, \u0447\u0442\u043e\u0431\u044b \u043e\u0431\u0441\u043b\u0443\u0436\u0438\u0432\u0430\u0442\u044c \u043a\u0430\u043a \u043c\u043e\u0436\u043d\u043e \u0431\u043e\u043b\u044c\u0448\u0435 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439 \u0438 \u043d\u0435 \u043f\u043e\u0432\u044b\u0448\u0430\u0442\u044c \u0440\u0430\u0441\u0445\u043e\u0434\u044b \u043d\u0430 \u0432\u044b\u0447\u0438\u0441\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0440\u0435\u0441\u0443\u0440\u0441\u044b. \u042f \u0434\u0435\u043b\u0430\u044e \u0441\u0435\u0440\u0432\u0438\u0441 \u0434\u043b\u044f \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0431\u0438\u0437\u043d\u0435\u0441 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430\u043c\u0438 [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":27493,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-36704","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=\"\u041a\u0430\u043a \u0432\u044b\u0440\u0430\u0441\u0442\u0438 \u0432 10 \u0440\u0430\u0437 \u043f\u043e\u0434 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0443 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u043a \u0411\u0414 \u043d\u0435 \u043f\u0435\u0440\u0435\u0435\u0437\u0436\u0430\u044f \u043d\u0430 \u0431\u043e\u043b\u0435\u0435 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u0441\u0435\u0440\u0432\u0435\u0440 \u0438 \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0440\u0430\u0431\u043e\u0442\u043e\u0441\u043f\u043e\u0441\u043e\u0431\u043d\u043e\u0441\u0442\u044c \u0441\u0438\u0441\u0442\u0435\u043c\u044b?\" \/>\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\/optimizatsiya-zaprosov-bazy-dannyh-na-primere-b2b-servisa-dlya-stroitelej\" \/>\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\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u044f \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u0431\u0430\u0437\u044b \u0434\u0430\u043d\u043d\u044b\u0445 \u043d\u0430 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 B2B \u0441\u0435\u0440\u0432\u0438\u0441\u0430 \u0434\u043b\u044f \u0441\u0442\u0440\u043e\u0438\u0442\u0435\u043b\u0435\u0439 | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u041a\u0430\u043a \u0432\u044b\u0440\u0430\u0441\u0442\u0438 \u0432 10 \u0440\u0430\u0437 \u043f\u043e\u0434 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0443 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u043a \u0411\u0414 \u043d\u0435 \u043f\u0435\u0440\u0435\u0435\u0437\u0436\u0430\u044f \u043d\u0430 \u0431\u043e\u043b\u0435\u0435 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u0441\u0435\u0440\u0432\u0435\u0440 \u0438 \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0440\u0430\u0431\u043e\u0442\u043e\u0441\u043f\u043e\u0441\u043e\u0431\u043d\u043e\u0441\u0442\u044c \u0441\u0438\u0441\u0442\u0435\u043c\u044b?\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/es\/blog\/administrirovanie\/optimizatsiya-zaprosov-bazy-dannyh-na-primere-b2b-servisa-dlya-stroitelej\" \/>\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=\"2019-10-31T19:13:15+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2019-10-31T19:13:15+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\udd47Optimizaci\u00f3n de solicitudes de bases de datos a trav\u00e9s del ejemplo de un servicio B2B para constructores | ProHoster","description":"\u00bfC\u00f3mo aumentar 10 veces la cantidad de solicitudes a la base de datos sin mudarse a un servidor m\u00e1s potente y mantener la operatividad del sistema?","canonical_url":"https:\/\/prohoster.info\/es\/blog\/administrirovanie\/optimizatsiya-zaprosov-bazy-dannyh-na-primere-b2b-servisa-dlya-stroitelej","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\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u044f \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u0431\u0430\u0437\u044b \u0434\u0430\u043d\u043d\u044b\u0445 \u043d\u0430 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 B2B \u0441\u0435\u0440\u0432\u0438\u0441\u0430 \u0434\u043b\u044f \u0441\u0442\u0440\u043e\u0438\u0442\u0435\u043b\u0435\u0439 | ProHoster","og:description":"\u041a\u0430\u043a \u0432\u044b\u0440\u0430\u0441\u0442\u0438 \u0432 10 \u0440\u0430\u0437 \u043f\u043e\u0434 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0443 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u043a \u0411\u0414 \u043d\u0435 \u043f\u0435\u0440\u0435\u0435\u0437\u0436\u0430\u044f \u043d\u0430 \u0431\u043e\u043b\u0435\u0435 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u0441\u0435\u0440\u0432\u0435\u0440 \u0438 \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0440\u0430\u0431\u043e\u0442\u043e\u0441\u043f\u043e\u0441\u043e\u0431\u043d\u043e\u0441\u0442\u044c \u0441\u0438\u0441\u0442\u0435\u043c\u044b?","og:url":"https:\/\/prohoster.info\/es\/blog\/administrirovanie\/optimizatsiya-zaprosov-bazy-dannyh-na-primere-b2b-servisa-dlya-stroitelej","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":"2019-10-31T19:13:15+00:00","article:modified_time":"2019-10-31T19:13:15+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"36704","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":"2026-01-22 04:30:19","breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-03-01 01:40:22","updated":"2026-01-22 04:30:19","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\/36704","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=36704"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/posts\/36704\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/media\/27493"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/media?parent=36704"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/categories?post=36704"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/tags?post=36704"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}