2016-07-21 17 views
2

我有一個在AWS中運行的基於SQL-Alchemy的Web應用程序。負載測試SQL Alchemy:「TimeoutError:QueuePool限制大小3溢出0到達,連接超時,超時30」

該Web應用程序在ELB後面有幾個c3.2xlarge EC2實例(每個8個CPU),它們接受Web請求,然後查詢/寫入共享數據庫。

我正在使用的數據庫是和RDS實例類型:db.m4.4xlarge。 它運行MariaDB的10.0.17是

我的SQL鍊金術設置如下:

SQLALCHEMY_POOL_SIZE = 3 
SQLALCHEMY_MAX_OVERFLOW = 0 

在高負載下,我的應用程序啓動時拋出了以下錯誤:

TimeoutError: QueuePool limit of size 3 overflow 0 reached, connection timed out, timeout 30 

當我增加SQLALCHEMY_POOL_SIZE從3到20,相同的負載測試錯誤消失。這裏是我的問題:

  1. 我的數據庫可以同時處理多少個連接?
  2. 公平地假設Number of Number of EC2 instances * Number of Cores Per instance * SQLALCHEMY_POOL_SIZE可以達到但不能超過問題1的答案嗎?
  3. 我是否需要知道任何其他約束DB連接池 大小的分佈式Web應用程序,如我的?

回答

1

MySQL可以處理幾乎任何數量的「同時」連接。但是如果有幾十幾個是積極運行查詢,有可能被麻煩。

不知道你的查詢正在做什麼,不能說3是否是限制或300

我建議你打開slowlog收集關於哪些查詢是豬的信息。經過良好調整的網絡應用程序可以在3個連接的99%的時間內輕鬆生存。

其他1% - 好吧,可以有尖峯。因此,3是不合理的低。