Перейти до вмісту
Пошук в
  • Детальніше...
Шукати результати, які ...
Шукати результати в ...

Медленные запросы в MySql


Recommended Posts

Доброго дня. Версия опенкарт 1.5.6.1. Шаблон купленный готовый. Изменения на сайте www.smart-tuning.com.ua не проводились никакие только вносился товар.Хостинг у хостера www.ukraine.com.ua

Появилась ошибка 2018-04-08 20:33:33 - PHP Warning:  mysql_query(): MySQL server has gone away in /home/smarttun/smart-tuning.com.ua/www/system/database/mysql.php on line 22
2018-04-08 20:33:33 - PHP Warning:  mysql_query(): Error reading result set's header in /home/smarttun/smart-tuning.com.ua/www/system/database/mysql.php on line 22
2018-04-08 20:33:33 - PHP Notice:  Error: MySQL server has gone away<br />Error No: 2006<br />
            SELECT
                `a`.`attribute_id`,
                REPLACE(REPLACE(TRIM(pa.text), '
', ''), '
', '') AS `txt`,
                `ad`.`name`,
                `agd`.`name` AS `gname`,
                `agd`.`attribute_group_id`
            FROM
                `oc_product` AS `p`
            INNER JOIN
                `oc_product_to_store` AS `pts`
            ON
                `p`.`product_id` = `pts`.`product_id` AND `pts`.`store_id` = 0
            INNER JOIN
                `oc_product_attribute` AS `pa`
            ON
                `p`.`product_id` = `pa`.`product_id` AND `pa`.`language_id` = 4
            INNER JOIN
                `oc_attribute` AS `a`
            ON
                `a`.`attribute_id` = `pa`.`attribute_id`
            INNER JOIN
                `oc_attribute_description` AS `ad`
            ON
                `ad`.`attribute_id` = `a`.`attribute_id` AND `ad`.`language_id` = 4
            INNER JOIN
                `oc_attribute_group` AS `ag`
            ON
                `ag`.`attribute_group_id` = `a`.`attribute_group_id`
            INNER JOIN
                `oc_attribute_group_description` AS `agd`
            ON
                `agd`.`attribute_group_id` = `ag`.`attribute_group_id` AND `agd`.`language_id` = 4
            
            WHERE
                `p`.`date_available` <= NOW() AND `p`.`status` = '1'
            GROUP BY
                `txt`, `pa`.`attribute_id`
            HAVING 
                `txt` != ''
            ORDER BY
                `txt`

Нужен специалист который за оплату исправит ошибку. В дальнейшем необходима разного рода платная помощь по сайту..С предложениями пишите в приват
   

 

Змінено користувачем ivanickii
Надіслати
Поділитися на інших сайтах


14 часов назад, ivanickii сказал:

Доброго дня. Версия опенкарт 1.5.6.1. Шаблон купленный готовый. Изменения на сайте www.smart-tuning.com.ua не проводились никакие только вносился товар.Хостинг у хостера www.ukraine.com.ua

Появилась ошибка 2018-04-08 20:33:33 - PHP Warning:  mysql_query(): MySQL server has gone away in /home/smarttun/smart-tuning.com.ua/www/system/database/mysql.php on line 22
2018-04-08 20:33:33 - PHP Warning:  mysql_query(): Error reading result set's header in /home/smarttun/smart-tuning.com.ua/www/system/database/mysql.php on line 22
2018-04-08 20:33:33 - PHP Notice:  Error: MySQL server has gone away<br />Error No: 2006<br />
            SELECT
                `a`.`attribute_id`,
                REPLACE(REPLACE(TRIM(pa.text), '
', ''), '
', '') AS `txt`,
                `ad`.`name`,
                `agd`.`name` AS `gname`,
                `agd`.`attribute_group_id`
            FROM
                `oc_product` AS `p`
            INNER JOIN
                `oc_product_to_store` AS `pts`
            ON
                `p`.`product_id` = `pts`.`product_id` AND `pts`.`store_id` = 0
            INNER JOIN
                `oc_product_attribute` AS `pa`
            ON
                `p`.`product_id` = `pa`.`product_id` AND `pa`.`language_id` = 4
            INNER JOIN
                `oc_attribute` AS `a`
            ON
                `a`.`attribute_id` = `pa`.`attribute_id`
            INNER JOIN
                `oc_attribute_description` AS `ad`
            ON
                `ad`.`attribute_id` = `a`.`attribute_id` AND `ad`.`language_id` = 4
            INNER JOIN
                `oc_attribute_group` AS `ag`
            ON
                `ag`.`attribute_group_id` = `a`.`attribute_group_id`
            INNER JOIN
                `oc_attribute_group_description` AS `agd`
            ON
                `agd`.`attribute_group_id` = `ag`.`attribute_group_id` AND `agd`.`language_id` = 4
            
            WHERE
                `p`.`date_available` <= NOW() AND `p`.`status` = '1'
            GROUP BY
                `txt`, `pa`.`attribute_id`
            HAVING 
                `txt` != ''
            ORDER BY
                `txt`

Нужен специалист который за оплату исправит ошибку. В дальнейшем необходима разного рода платная помощь по сайту..С предложениями пишите в приват
   

 


Судя по всему у вас очень много атрибутов и слабый хостинг а также очень много товаров в одной категории.

Так или иначе данная проблема решается.

 

 

Надіслати
Поділитися на інших сайтах

11 минут назад, snastik сказал:

Судя по всему у вас очень много атрибутов

Может быть, а также может быть много и товаров

Кроме того - этот запрос не оптимальный, хотя бы потому что есть having

И. напоследок
Запрос по имени группы и имени атрибута вінесть в отдельную ветку.
Сократив запрос до 3 JOIN


 

Надіслати
Поділитися на інших сайтах

11 минут назад, chukcha сказал:

Может быть, а также может быть много и товаров

Кроме того - этот запрос не оптимальный, хотя бы потому что есть having

И. напоследок
Запрос по имени группы и имени атрибута вінесть в отдельную ветку.
Сократив запрос до 3 JOIN


 

 

Это megaFilterPro - там достаточно странный кусок кода, который отвечает за выборку атрибутов.
В конечном счете все равно там упирается в поле text. И даже если обойти проблемы с индексацией. Все равно в какой то момент приходится упираться в общее количество проходов по таблице pa. Грубо говоря независимо от конфигурации сервера, если общий набор значений параметров у товаров в категории овер 100к  - это будет медленно. Но исходя из того что server gone away  - это либо шаред с зарезанными таймаутами. Либо очень слабый VPS опять же с зарезанными параметрами.

 

Надіслати
Поділитися на інших сайтах

3 минуты назад, snastik сказал:

там достаточно странный кусок кода, который отвечает за выборку атрибутов.

Действительно странный, т.е. ощущение такое, что сделан на самом первом этапе создания фильтра, и оставлен на "авось" когда-нибудь оптимизирую

Надіслати
Поділитися на інших сайтах

5 минут назад, chukcha сказал:

Действительно странный, т.е. ощущение такое, что сделан на самом первом этапе создания фильтра, и оставлен на "авось" когда-нибудь оптимизирую

 

В таком формате он там сравнительно недавно.
По хорошему.
Так как в Mega фильтре коллекция значения атрибутов кешируется и кешируется грамотно с возможностью выставить произвольное время хранения а не час по дефолту, для среднестатистического проекта, в котором до 500 товаров на категорию, особой оптимизации этого запроса не нужно. Да и опять же, как его оптимизировать то? Если у нас там тип поля text. Также эта конструкция совершенно по иному воспринимается, если вспомнить, что в фильтре есть возможность сегментации значений при помощи разделителя, например: цвет: красный, зеленый - могут быть уникальными значениями красный (3), зеленый (5). В таком формате в принципе про любые индексы можно забыть. Как альтернатива авторы Mega фильтра предлагают версию PLUS, которая создает уникальный индекс в дополнительные поля в таблицу product. Но у меня ни разу не получилось увидеть выгоды от использования PLUS, так как просто кастомная оптимизация вышеприведенного запроса дает лучшие результаты. 
Формировать отдельный индексируемый справочник с crc32('text') значениями, авторы фильтра я так понимаю считают излишней роскошью.
Поэтому на больших проектах способы борьбы достаточно простые - вырезать все лишнее, немного перестроить порядок полей в запросе, немного составных индексов ну и правильно сконфигурированный mysql сервер - до 10к товаров, практически панацея. А вот на примере 75-100 к товаров на категорию с десятком значений атрибутов, это уже не вариант, но здесь на помощь приходит sphinx и json поля.
 

 

Надіслати
Поділитися на інших сайтах


Створіть аккаунт або увійдіть для коментування

Ви повинні бути користувачем, щоб залишити коментар

Створити обліковий запис

Зареєструйтеся для отримання облікового запису. Це просто!

Зареєструвати аккаунт

Вхід

Уже зареєстровані? Увійдіть тут.

Вхід зараз
  • Зараз на сторінці   0 користувачів

    • Ні користувачів, які переглядиють цю сторінку

×
×
  • Створити...

Important Information

На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність.