jofefo Posted July 22, 2020 Share Posted July 22, 2020 Buenas tardes, Analizando el rendimiento de mi web he activado el modo "_PS_DEBUG_PROFILING_" para ver que consultas tardaban más en ejecutarse y me he encontrado una que no se si es normal. En el index la siguiente consulta tarda 4.4 ms y devuelve 5138 resultados, no se si es normal que devuelva tantos resultados y tarde tanto. SELECT SQL_NO_CACHE c.`name`, cl.`id_lang`, IF(cl.`id_lang` IS NULL, c.`value`, cl.`value`) AS value, c.id_shop_group, c.id_shop FROM `ps_configuration` c LEFT JOIN `ps_configuration_lang` cl ON (c.`id_configuration` = cl.`id_configuration`) Y en las categorías la siguiente consulta tarda 11,6 ms y solo devuelve 56 resultados. SELECT SQL_NO_CACHE p.*, product_shop.*, stock.out_of_stock, IFNULL(stock.quantity, 0) AS quantity, IFNULL(product_attribute_shop.id_product_attribute, 0) AS id_product_attribute, product_attribute_shop.minimal_quantity AS product_attribute_minimal_quantity, pl.`description`, pl.`description_short`, pl.`available_now`, pl.`available_later`, pl.`link_rewrite`, pl.`meta_description`, pl.`meta_keywords`, pl.`meta_title`, pl.`name`, image_shop.`id_image` id_image, il.`legend` as legend, m.`name` AS manufacturer_name, cl.`name` AS category_default, DATEDIFF(product_shop.`date_add`, DATE_SUB("2020-07-22 00:00:00", INTERVAL 40 DAY)) > 0 AS new, product_shop.price AS orderprice FROM `ps_category_product` cp LEFT JOIN `ps_product` p ON p.`id_product` = cp.`id_product` INNER JOIN ps_product_shop product_shop ON (product_shop.id_product = p.id_product AND product_shop.id_shop = 1) LEFT JOIN `ps_product_attribute_shop` product_attribute_shop ON (p.`id_product` = product_attribute_shop.`id_product` AND product_attribute_shop.`default_on` = 1 AND product_attribute_shop.id_shop=1) LEFT JOIN ps_stock_available stock ON (stock.id_product = `p`.id_product AND stock.id_product_attribute = 0 AND stock.id_shop_group = 1 AND stock.id_shop = 0 ) LEFT JOIN `ps_category_lang` cl ON (product_shop.`id_category_default` = cl.`id_category` AND cl.`id_lang` = 1 AND cl.id_shop = 1 ) LEFT JOIN `ps_product_lang` pl ON (p.`id_product` = pl.`id_product` AND pl.`id_lang` = 1 AND pl.id_shop = 1 ) LEFT JOIN `ps_image_shop` image_shop ON (image_shop.`id_product` = p.`id_product` AND image_shop.cover=1 AND image_shop.id_shop=1) LEFT JOIN `ps_image_lang` il ON (image_shop.`id_image` = il.`id_image` AND il.`id_lang` = 1) LEFT JOIN `ps_manufacturer` m ON m.`id_manufacturer` = p.`id_manufacturer` WHERE product_shop.`id_shop` = 1 AND cp.`id_category` = 14 AND product_shop.`active` = 1 AND product_shop.`visibility` IN ("both", "catalog") ORDER BY p.`date_upd` DESC LIMIT 0,15 ¿Se puede hacer algo para mejorar estas consultas? Prestashop 1.7.6.7 Multitienda Tema: ZOneTheme Versión 2.4.8 Link to comment Share on other sites More sharing options...
Nedned Posted July 23, 2020 Share Posted July 23, 2020 Buenas, A mi me tardan como mucho 1 seg, pero devuelven menos resultados, La primera tiene pinta de estar asociado a idiomas, si tienes idiomas que no utilizas quizá sea buena opción quitarlos. Tiene pinta de que el multi-tienda está haciendo que no vaya lo fluido que tiene que ir. Link to comment Share on other sites More sharing options...
jofefo Posted July 23, 2020 Author Share Posted July 23, 2020 Hola Nedned, Gracias por responder, tengo los idiomas Español y Francés activos pero utilizo los dos. Link to comment Share on other sites More sharing options...
Prestafan33 Posted July 23, 2020 Share Posted July 23, 2020 On 7/22/2020 at 6:47 PM, jofefo said: En el index la siguiente consulta tarda 4.4 ms y devuelve 5138 resultados, no se si es normal que devuelva tantos resultados y tarde tanto. SELECT SQL_NO_CACHE c.`name`, cl.`id_lang`, IF(cl.`id_lang` IS NULL, c.`value`, cl.`value`) AS value, c.id_shop_group, c.id_shop FROM `ps_configuration` c LEFT JOIN `ps_configuration_lang` cl ON (c.`id_configuration` = cl.`id_configuration`) Esta consulta lo que hace es cargar los parámetros de configuración de TODAS las tiendas (a no ser que esté cortada la consulta, porque no lleva ningún WHERE). De modo que si tienes activada la multitienda y creadas varias tiendas es normal que cargue un montón de resultados. He probado la consulta en una tienda "simple" (sin multitienda), y se obtienen unos 800 resultados y tarda 0.0009 s, aunque esto también depende de los recursos del servidor. De todos modos, 4.4 ms (0.0044s) tampoco me parece un tiempo excesivo para una consulta SQL. Link to comment Share on other sites More sharing options...
Ohya Posted November 23, 2021 Share Posted November 23, 2021 Hola Se que este es un tema un poco viejo, pero el problema aún persiste. Creo que los comentarios anteriores hay un error de interpretación, realmente no se envían casi 5000 filas al hacer la consulta, el problema esta en que se escanean las 5000, en mi caso lo que sucede es que se omite el PRIMARY KEY es como si el index no existiera, Ej Query_time: 0.003282 Lock_time: 0.000044 Rows_sent: 1 Rows_examined: 4095 El problema no esta en que la consulta sea rápida o lenta, evidentemente tarda muy poco, el problema real esta en revisar 4095 filas y aveces más de 5000 filas para enviar solo una. Sí, la consulta solo tarda 0.0032, pero al no usar el INDEX y escanear + 4000 filas, se genera un problema de uso muy elevado de CPU. Sobre todo cuando se tienen unas cientas de visitas navegando, el uso de CPU de la base de datos se dispara. Creo que ese es el punto inicial de este hilo, no es enviar 4000 resultados, si no escanear tal cantidad de filas para enviar 1, ahora bien, la variación de revisar más o menos filas ya depende de cuantos datos tiene esa columna, si tiene 10 000 escaneará 10k y más CPU usará. Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now