logz05 Posted September 30, 2013 Share Posted September 30, 2013 Hi, There is a process in classes/Category.php that is killing my server. PS 1.5.4.1VPS with 2GB 2361 products 100'2 of attributes but obviously not all used at the same time. I am getting major mySQL hangups (up to 450 seconds of process time) with the query in this file: $sql = 'SELECT p.*, product_shop.*, stock.out_of_stock, IFNULL(stock.quantity, 0) as quantity, MAX(product_attribute_shop.id_product_attribute) 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`, MAX(image_shop.`id_image`) id_image, il.`legend`, m.`name` AS manufacturer_name, cl.`name` AS category_default, DATEDIFF(product_shop.`date_add`, DATE_SUB(NOW(), INTERVAL '.(Validate::isUnsignedInt(Configuration::get('PS_NB_DAYS_NEW_PRODUCT')) ? Configuration::get('PS_NB_DAYS_NEW_PRODUCT') : 20).' DAY)) > 0 AS new, product_shop.price AS orderprice FROM `'._DB_PREFIX_.'category_product` cp LEFT JOIN `'._DB_PREFIX_.'product` p ON p.`id_product` = cp.`id_product` '.Shop::addSqlAssociation('product', 'p').' LEFT JOIN `'._DB_PREFIX_.'product_attribute` pa ON (p.`id_product` = pa.`id_product`) '.Shop::addSqlAssociation('product_attribute', 'pa', false, 'product_attribute_shop.`default_on` = 1').' '.Product::sqlStock('p', 'product_attribute_shop', false, $context->shop).' LEFT JOIN `'._DB_PREFIX_.'category_lang` cl ON (product_shop.`id_category_default` = cl.`id_category` AND cl.`id_lang` = '.(int)$id_lang.Shop::addSqlRestrictionOnLang('cl').') LEFT JOIN `'._DB_PREFIX_.'product_lang` pl ON (p.`id_product` = pl.`id_product` AND pl.`id_lang` = '.(int)$id_lang.Shop::addSqlRestrictionOnLang('pl').') LEFT JOIN `'._DB_PREFIX_.'image` i ON (i.`id_product` = p.`id_product`)'. Shop::addSqlAssociation('image', 'i', false, 'image_shop.cover=1').' LEFT JOIN `'._DB_PREFIX_.'image_lang` il ON (image_shop.`id_image` = il.`id_image` AND il.`id_lang` = '.(int)$id_lang.') LEFT JOIN `'._DB_PREFIX_.'manufacturer` m ON m.`id_manufacturer` = p.`id_manufacturer` WHERE product_shop.`id_shop` = '.(int)$context->shop->id.' AND cp.`id_category` = '.(int)$this->id .($active ? ' AND product_shop.`active` = 1' : '') .($front ? ' AND product_shop.`visibility` IN ("both", "catalog")' : '') .($id_supplier ? ' AND p.id_supplier = '.(int)$id_supplier : '') .' GROUP BY product_shop.id_product'; if ($random === true) { $sql .= ' ORDER BY RAND()'; $sql .= ' LIMIT 0, '.(int)$random_number_products; } else $sql .= ' ORDER BY '.(isset($order_by_prefix) ? $order_by_prefix.'.' : '').'`'.pSQL($order_by).'` '.pSQL($order_way).' LIMIT '.(((int)$p - 1) * (int)$n).','.(int)$n; $result = Db::getInstance(_PS_USE_SQL_SLAVE_)->executeS($sql); if ($order_by == 'orderprice') Tools::orderbyPrice($result, $order_way); if (!$result) return array(); /* Modify SQL result */ return Product::getProductsProperties($id_lang, $result); It is a major query and is quite clearly killing the web..... There are others that are suffering from the same thing: http://www.prestashop.com/forums/topic/268962-possible-bug-prestasho-with-many-20000-products-kills-database/ http://www.prestashop.com/forums/topic/253715-fight-with-speed-now-sql-problem/ http://forge.prestashop.com/browse/PSCFV-10147page=com.atlassian.jira.plugin.system.issuetabpanels%3Achangehistory-tabpanel and a little googling finds a a lot off sites that are showing PrestashopDatabase Exceptions as well Has anyone come across this and is so have you found a solution? Link to comment Share on other sites More sharing options...
logz05 Posted October 2, 2013 Author Share Posted October 2, 2013 31 views and no-one with any similar situation? Link to comment Share on other sites More sharing options...
NemoPS Posted October 2, 2013 Share Posted October 2, 2013 Never came across this, how many products are you displaying for each page? Link to comment Share on other sites More sharing options...
logz05 Posted October 2, 2013 Author Share Posted October 2, 2013 10....per page Link to comment Share on other sites More sharing options...
NemoPS Posted October 2, 2013 Share Posted October 2, 2013 Wow! Say, what happens if you remove some joins? For example, the attributes ones? Link to comment Share on other sites More sharing options...
logz05 Posted October 2, 2013 Author Share Posted October 2, 2013 (edited) Virtually all the products have attributes - that is not a tenable solution. What I don't understand is that this is standard Prestashop code - untouched by human hand - I guess it should work!! I have even tried the file on Github....and still no joy. Is there a limitation to the number of products and attributes that PS can handle, is that what we are seeing. Tonight I am upgrading the server to 4Gb RAM to see if that can cope. Edited October 2, 2013 by logz05 (see edit history) Link to comment Share on other sites More sharing options...
Recommended Posts