Mysql

如何處理來自 Lambda 的 MySQL 數據庫連接/池 -> RDS with Node

  • October 2, 2018

我在測試我的 Lambda 函式時遇到了一些問題。我是我的測試,我並行N執行我的 Lambda 函式。在我的 lambda 函式中,我通過 Knex 檢索數據庫連接。我在搞亂 db init 中的設置pool: { min: 0, max: [1 or 5] },這似乎可以修復/破壞事情,這取決於我的程式碼中的其他事情。

執行我的 lambda 函式 20 次輸出正確的結果,但是,當我達到 500 時(我期望在生產中看到的很容易超過這個),事情就開始崩潰了。我遇到了諸如Error: ER_CON_COUNT_ERROR: Too many connections,之類的錯誤(如果我在 lambda 函式的末尾Error: pool is draining and cannot accept work使用 Knex 的介面)。knex.destroy()在 AWS Lambda 和 RDS 中處理連接和池以擴大規模的正確方法是什麼?如果我要在 AWS 上執行相同的壓力測試,我在本地機器上看到的問題會重現嗎?

剝離數千個程序來完成一項任務的微小部分很簡單。但效率低下。“流程”是重量級的。執行緒有些沉重。數以千計的 MySQL 連接是可能的,但不能同時連接。

在任何多程序或多執行緒環境中,“太多”都會減慢速度。這是因為作業系統(或某些實體)正在做大量工作來共享不足的資源。例如,MySQL 可以處理數百個空閒連接,但會因為幾十個活動連接而陷入困境。當超過這個值時,最好沿著鏈向上到達客戶端,並限制它產生新連接的頻率。

我不熟悉你提到的其他產品,但我建議將同時活動減少到幾十個,而不是幾百個。

或者想辦法。在您的應用程序中,“迭代”而不是“遞歸”。同時,請記住,MySQL 更樂於處理數據的“向量”(表)而不是處理單個行。也許您可以將應用程序中的一些“並行”作為“向量”推送到 MySQL 中?雙贏:連接更少;MySQL 中的效率更高。

該錯誤是由於與數據庫的連接數,每個 Lambda 函式將至少打開一個,並且在您的情況下,該數量超過了您的 RDS 實例中可用的連接數。

通過 AWS 控制台你可以提升它,只需要尋找 max_connections,這裡是一步一步的教程:

https://github.com/jollygoodcode/jollygoodcode.github.io/issues/16

根據此連結(許多其他連結顯示類似的值),這裡是每個實例大小支持的連接數的表:

MODEL       max_connections
t1.micro    34
m1-small    125
m1-large    623
m1-xlarge   1263
m2-xlarge   1441
m2-2xlarge  2900
m2-4xlarge  5816

希望能幫助到你

引用自:https://dba.stackexchange.com/questions/161524