postgresql Flask和SQLAlchemy导致Postgres DB上的空闲事务

utugiqy6  于 2023-06-22  发布在  PostgreSQL
关注(0)|答案(1)|浏览(145)

我有一个Flask应用程序,它使用SQLAlchemy来访问PostgreSQL数据库。我在www.example.com文件中遵循此tutorial启动我的应用程序init.py:

from flask import Flask
from flask_sqlalchemy import SQLAlchemy

db = SQLAlchemy(engine_options={"pool_pre_ping":True})

def create_app():
    """Construct the core application."""
    app = Flask(__name__, instance_relative_config=False)
    app.config.from_object('config.Config')

    db.init_app(app)

    with app.app_context():
        from . import routes  # Import routes
        db.create_all()  # Create sql tables for our data models

        return app

我注意到db.create_all()调用在我的Postgres DB中创建了一些空闲事务。postgres查询

SELECT backend_start, query_start, state_change, wait_event_type, wait_event, state, query, backend_type 
FROM pg_stat_activity 
order by state_change desc;

给出4行空闲事务,查询字段等于ROLLBACK(图像连接)

如果我注解db.create_all()命令,则没有空闲事务。有人能解释这种交易的原因以及如何避免它们。

0aydgbwb

0aydgbwb1#

SQLAlchemy引擎通常会生成一个连接池。引擎将为每个新问题创建连接,最多可达池中的最大连接数。例如,如果连接池的大小为5,则前五个查询将创建一个新的连接池,但随后这些连接将被重用于未来的查询。
您可以通过Flask-SQLAlchemy中的SQL_ENGINE_OPTIONS对象控制连接池的大小,具体选项继承自SQLAlchemy中的连接选项

相关问题