[英]MariaDBConnector/Python Connection Pools get slower to get connections with each connection in the pool
我在 Python 3.11、Linux Mint、最新版本的 MariaDB 等上使用 MariaDB/Python 連接器,我這輩子都弄不明白。 我有一個名為get_connection()
的簡單 function,它從mariadb.ConnectionPool
返回一個Connection
,並且pool_size=1
時,Postman 中的響應時間為 75 毫秒,而pool_size=5
時,響應時間為 400 毫秒。 除了打開和關閉此連接的 FastAPI 中間件外,此請求中沒有其他任何內容。 這個問題有一個門檻,與使用ConnectionPool
相比,每個請求打開一個新連接更快。
我希望get_connection()
具有相同的響應時間,無論我有pool_size=5
還是pool_size=64
。
這是代碼:
POOL = mariadb.ConnectionPool(
host=os.environ.get("DATABASE_IP"),
port=3306,
user=os.environ.get("DATABASE_USER"),
password=os.environ.get("DATABASE_PASSWORD"),
pool_name="poolname",
pool_size=5,
pool_reset_connection=True
)
def get_connection() -> Connection:
"""
Returns a DatabaseHandler object
:return:
"""
before = datetime.datetime.now()
connection = POOL.get_connection()
after = datetime.datetime.now()
print((after - before).microseconds)
return connection
在使用連接池而不是單個連接運行內部基准測試時,我們遇到了同樣的問題。
問題是在迭代未使用的連接時由不必要的健康檢查(發送 MYSQL_PING)引起的。
計划在 1.1.6 中修復(計划於 2 月中旬)
有關此問題的跟蹤狀態,請查看CONPY-245
更新(2 月 1 日):問題已修復,將在 1.1.6 版本中提供:
$ python3.11 conpy245.py
Acquiring 100000 connections via Pool
Pool size: 64
Average time per connection: 19 ms
Acquiring 100000 connections without Pool
Average time per connection: 170 ms
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.