MYSQL查询在具有1个vCPU的AWS RDS实例中工作正常,但在具有2个或更多vCPU的实例中运行时会挂起
下面我用Phython代码在Lambda函数中执行以下SQL查询。Lambda函数连接到运行MySQL 5.7.22的AWS RDS 当对实例类型db.t2.small或db.t2.micro执行此查询时,查询工作正常,结果会在几秒钟内返回。这些实例类型有1个vCPU 但是,当我们将实例类型提升为db.t3.small或db.t3.medium时,查询将挂起,直到lambda超时约10分钟。即使在lambda函数超时之后,DB CPU在最长时间内仍保持50%的消耗,直到我决定重新启动RDS 这是违反直觉的,因为我认为拥有更多vCPU应该会提高性能。我猜它可能以某种方式链接到多线程,但找不到任何信息。希望在这里得到一些帮助/提示 下面是有问题的SQL查询MYSQL查询在具有1个vCPU的AWS RDS实例中工作正常,但在具有2个或更多vCPU的实例中运行时会挂起,mysql,amazon-web-services,performance,aws-lambda,amazon-rds,Mysql,Amazon Web Services,Performance,Aws Lambda,Amazon Rds,下面我用Phython代码在Lambda函数中执行以下SQL查询。Lambda函数连接到运行MySQL 5.7.22的AWS RDS 当对实例类型db.t2.small或db.t2.micro执行此查询时,查询工作正常,结果会在几秒钟内返回。这些实例类型有1个vCPU 但是,当我们将实例类型提升为db.t3.small或db.t3.medium时,查询将挂起,直到lambda超时约10分钟。即使在lambda函数超时之后,DB CPU在最长时间内仍保持50%的消耗,直到我决定重新启动RDS 这是
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')
请提供解释选择…请提供解释选择。。。