У меня следующий SQL запрос, выполненный ниже в функции Lambda с кодом Phython. Лямбда-функция подключена к AWS RDS, работающему MySQL 5.7.22.
Когда этот запрос выполняется для типа экземпляра db.t2.small или db.t2.micro, запрос работает нормально, и результаты возвращаются через несколько секунд. Эти типы экземпляров имеют 1 vCPU
Однако, когда мы поднимаем тип экземпляра до db.t3.small или db.t3.medium, который имеет 2 vCPU, запрос зависает до времени ожидания лямбда (около 10 минут) , Даже после истечения времени ожидания лямбда-функции процессор БД остается на 50% потребляемой в течение самого длительного времени, пока я не решил перезагрузить RDS.
Это противоречит интуиции, так как я думаю, что наличие большего количества vCPU должно улучшить производительность. Я предполагаю, что это может быть связано с многопоточностью, но не может найти какую-либо информацию. Надеюсь получить помощь / подсказки здесь.
Вот запрос SQL
INSERT INTO
CP58 (
SELECT
s.BRN, IFNULL(IFNULL((
SELECT
rtmp.DLR_CODE
FROM
STABLE stmp, CP58_REPORT rtmp
WHERE
stmp.DLR_CODE = rtmp.DLR_CODE
AND s.BRN = rtmp.BRN
AND stmp.HQ_FLAG = 'HQ'
AND stmp.STATUS = 'Active'
GROUP BY
stmp.COMP_REGNO, rtmp.DLR_CODE
ORDER BY
stmp.COMP_REGNO, SUM(rtmp.TOTAL) DESC LIMIT 1),
(
SELECT
rtmp.DLR_CODE
FROM
STABLE stmp,
CP58_REPORT rtmp
WHERE
stmp.DLR_CODE = rtmp.DLR_CODE
AND s.BRN = rtmp.BRN
AND stmp.HQ_FLAG = 'HQ'
GROUP BY
stmp.COMP_REGNO,
rtmp.DLR_CODE
ORDER BY
stmp.COMP_REGNO,
SUM(rtmp.TOTAL) DESC LIMIT 1
)
), 'NOHQDEALERCODE') as 'HQDEALERCODE', s.DEALERNAME, s.ADDRESS, IFNULL(MAX(x.CPTABLE_YEAR), MAX(y.EDTABLE_YEAR)) as 'YEAR', IFNULL(SUM(x.CPTABLE), 0) as 'CPTABLE_TOTAL', IFNULL(SUM(y.EDTABLE), 0) as 'EDTABLE_TOTAL',
(
IFNULL(SUM(x.CPTABLE), 0) + IFNULL(SUM(y.EDTABLE), 0)
)
as 'TOTAL', '0' as 'PDF'
FROM
(
SELECT
stmp.COMP_REGNO as 'BRN',
stmp.DLR_CODE as 'DLR_CODE',
stmp.DLR_NAME as 'DEALERNAME',
CONCAT(stmp.ADDRESS, ' ', stmp.TOWN, ' ', stmp.POSTCODE, ' ', stmp.STATE) as 'ADDRESS'
from
STABLE stmp
GROUP BY
DLR_CODE
)
s
LEFT OUTER JOIN
(
SELECT
subqc.DESTDEALERCODE as 'DEALERCODE',
SUM(subqc.RM) as 'CPTABLE',
YEAR(subqc.DATETIME) as 'CPTABLE_YEAR'
FROM
CPTABLE subqc
GROUP BY
subqc.DESTDEALERCODE
)
x
on x.DEALERCODE = s.DLR_CODE
LEFT OUTER JOIN
(
SELECT
subsubqe.DEALERCODE as 'DEALERCODE',
SUM(subsubqe.AMOUNT) as 'EDTABLE',
YEAR(subsubqe.BANKACK_DATE) as 'EDTABLE_YEAR'
FROM
EDTABLE subsubqe
GROUP BY
subsubqe.DEALERCODE
)
y
on s.DLR_CODE = y.DEALERCODE
GROUP BY
BRN
HAVING
TOTAL > 0
AND HQDEALERCODE <> 'NOHQDEALERCODE')