programing

새 DB가 훨씬 느림

megabox 2023. 9. 1. 20:43
반응형

새 DB가 훨씬 느림

제 작업이 새 DB로 전환되었습니다.MySQL 5.5.31에서 MariaDB 10.5.4로.이제 대부분의 쿼리가 더 빠르지만 하나의 쿼리는 0.3초에서 1.6초로 증가했습니다.두 쿼리 모두에서 설명하려고 하면 다른 결과가 나옵니다.

이전 데이터베이스 설명

새 데이터베이스 설명

변경해야 할 설정이 있습니까?

쿼리:

SELECT
    aanbieding.id,
    aanbieding.uid,
    aanbieding.vanprijs,
    aanbieding.voorprijs,
    aanbieding.opmerking,
    aanbieding.aantal,
    aanbieding.begindatum,
    aanbieding.einddatum,
    aanbieding.link,
    aanbieding.alleen_online,
    aanbieding.alleen_winkel,
    aanbieding.ppc_feed_uid,
    `aanbieding`.`einddatum` AS `einddatumFormat`,
    DATE_FORMAT(
        (`aanbieding`.`einddatum`),
        '%W %e %M'
    ) AS `einddatumFormat2`,
    DATE_FORMAT(
        (`aanbieding`.`begindatum`),
        '%W %e %M'
    ) AS `begindatumFormat2`,
    ROUND(
        (aanbieding.vanprijs) -(aanbieding.voorprijs),
        2
    ) AS `totalekorting`,
    ROUND(
        100 *(
            (aanbieding.vanprijs) -(aanbieding.voorprijs)
        ) / aanbieding.vanprijs
    ) AS `kortingspercentage`,
    ROUND(
        (aanbieding.voorprijs) /(
            inhoud.aantal_liter * aanbieding.aantal
        ),
        2
    ) AS `prijsperliter`,
    merken.name AS merken_name,
    merken.name_streep AS merken_name_streep,
    inhoud.korte_name AS inhoud_name,
    inhoud.name_streep AS inhoud_name_streep,
    inhoud.korte_name_meervoud AS inhoud_name_meervoud,
    inhoud.aantal_liter,
    soort.uid AS soort_uid,
    soort.name_streep AS soort_name_streep,
    winkel.uid AS winkel_uid,
    winkel.name AS winkel_name,
    winkel.name_streep AS winkel_name_streep,
    winkel.weergeven_aanbieding,
    img_verpak.id AS img_verpak_id,
    img_verpak.name AS img_verpak_name,
    img_verpak.title AS img_verpak_title,
    img_verpak.alt AS img_verpak_alt,
    img_winkel.id AS img_winkel_id,
    img_winkel.name AS img_winkel_name,
    img_winkel.title AS img_winkel_title,
    img_winkel.alt AS img_winkel_alt,
    inhoud_soort.name AS inhoud_soort_name,
    inhoud_soort.name_streep AS inhoud_soort_name_streep,
    inhoud_soort.uid AS inhoud_soort_uid
FROM
    aanbieding
JOIN soort ON aanbieding.`soort__soort_id` = soort.uid AND soort.weergeven = 1 AND soort.deleted = 0
JOIN winkel ON winkel.uid = aanbieding.`winkel__winkel_id` AND winkel.deleted = '0' AND winkel.weergeven = '1'
JOIN merken ON merken.uid = soort.`merken__merken_id` AND merken.deleted = '0' AND merken.weergeven = '1'
JOIN inhoud ON inhoud.uid = soort.`inhoud__inhoud_id` AND inhoud.deleted = '0' AND inhoud.weergeven = '1'
JOIN `fr_images` AS `img_verpak`
ON
    `img_verpak`.`table_id_id` = `soort`.`uid` AND img_verpak.image_settings_id = 53 AND img_verpak.deleted = 0 AND img_verpak.position = 1
JOIN `fr_images` AS `img_winkel`
ON
    `img_winkel`.`table_id_id` = `winkel`.`uid` AND img_winkel.image_settings_id = 108 AND img_winkel.deleted = 0 AND img_winkel.position = 1
JOIN inhoud_soort ON inhoud_soort.uid = inhoud.`soort__inhoud_soort_id` AND inhoud_soort.deleted = 0 AND inhoud_soort.weergeven = 1
WHERE
    aanbieding.deleted = '0' AND aanbieding.weergeven = '1' AND aanbieding.begindatum <= CURDATE() AND(
        aanbieding.einddatum >= CURDATE() OR aanbieding.einddatum IS NULL)

새 설정의 설명 스크린샷은 잘린 것처럼 보이기 때문에 테일엔드가 100%가 아니라 일반적인 설명으로 표시됩니다.

  1. 의 가치를 살펴봅니다.optimizer_switch이전 Nd 새 서버의 변수입니다.무엇이 다른지 확인합니다.새 서버를 이전 서버와 동일한 optimizer_switch 설정으로 설정합니다.동일한 실행 계획을 생성하는 경우 이전 실행 계획을 생성하는 기본값의 편차를 최소화하는 방법을 이등분합니다.

  2. 1)이 부족하면 이전 실행 계획을 사용할 때까지 각 테이블에 대한 인덱스 힌트(INDEX 사용)를 추가합니다.그런 다음 이전 계획을 작성하는 데 필요한 최소 인덱스 힌트 집합으로 가는 길을 이등분합니다.

  3. 2)가 여전히 충분하지 않으면 사용합니다.SELECT STRAIGHT_JOIN의 대신에SELECT쿼리를 변경하여 테이블이 원래의 빠른 설명과 동일한 순서로 나열되도록 합니다.

만약 3개 모두가 여전히 원래 계획대로 실행하기를 거부한다면, 당신은 운이 없는 것입니다.

10.5.x는 아직 운영 준비가 되지 않았지만 성능이 약간 저하되어 있습니다.참조:

https://www.percona.com/blog/2020/07/31/how-mysql-8-0-21-and-mariadb-10-5-4-perform-in-io-bound-scenarios-on-sata-ssd-and-nvme-storage/

그리고.

https://www.percona.com/blog/2020/08/14/evaluating-performance-improvements-in-mariadb-10-5-5/

언급URL : https://stackoverflow.com/questions/63614632/new-db-a-lot-slower

반응형