У кого установлен kmsuppliers и много Join запросов - можете ускорить выполнение в 3-6 раз

Решение тестировалось только на конфиге MariaDB 10.5.

Попробуйте в файле настроек mariadb добавить следующие строки:

optimizer_search_depth = 2
join_cache_level = 8

Если optimizer_search_depth уже равен 0 - то измените на 2.(в принципе можно любое число больше нуля - но чтобы другие запросы не пострадали, лучше не более 7-10 выставлять.)

Не буду расписывать про Hash Joins: BNL,BLK,BNLH. Кому надо - сам найдет инфу )

По-умолчанию join_cache_level на MаriaDB серверах равен 2. Значит может применяться толко алгоритм BNL. Для включения других - нужно выставить число 4 или 8.

У кого обновление прайсов через плагин kmsuppliers и импортируете от 5-10 тысяч артикулов и более - попробуйте.

Применил данные настройки и скорость обработки/обновления увеличилась в 3-6 раз в зав-ти от размера прайса(количества артикулов).

Если кому-то помогло - отпишите, пож-та ;)

1 ответ

  • 3
    NAiL 19 мая 2023 15:46 #

    Почему optimizer_search_depth не ноль? 

    Чтобы новые алгоритмы не применялись для простых запросов.

    Хотя такое может случится(при установке настроек из темы выше) - поэтому включите лог медленных запросов от 1 секунды, например.

    Появились очень редкие медленные запросы около 1 секунды (может они и раньше были и к этой теме не относятся).

    Но на всякий случай здесь укажу:

    # Time: 230518  7:20:42
    # Query_time: 1.093851  Lock_time: 0.000000  Rows_sent: 0  Rows_examined: 64346
    # Rows_affected: 8155  Bytes_sent: 55
    SET timestamp=1684383642;
    INSERT IGNORE INTO shop_sales (hash, `date`, name, order_count, sales, shipping, tax, new_customer_count)
                    SELECT
                        'customer_sources' AS `hash`,
                        o.paid_date as `date`,
                        st.name AS `name`,
                        COUNT(*) AS `order_count`,
                        SUM(o.total*o.rate) AS `sales`,
                        SUM(o.shipping*o.rate) AS `shipping`,
                        SUM(o.tax*o.rate) AS `tax`,
                        SUM(o.is_first) AS `new_customer_count`
                    FROM shop_sales_tmp AS st
                        JOIN shop_order AS o
                            ON o.id=st.order_id
                    GROUP BY st.name, o.paid_date;

    И это мы исправили через добавление доп индекса для поля paid_date в таблице shop_order.

Добавить ответ

Чтобы добавить комментарий, зарегистрируйтесь или войдите