[Chore/Refactor] Workflow database performance optimization #19835

Open
opened 2026-02-21 20:04:28 -05:00 by yindo · 3 comments
Owner

Originally created by @qiqizjl on GitHub (Oct 22, 2025).

Self Checks

  • I have read the Contributing Guide and Language Policy.
  • This is only for refactoring, if you would like to ask a question, please head to Discussions.
  • I have searched for existing issues search for existing issues, including closed ones.
  • I confirm that I am using English to submit this report, otherwise it will be closed.
  • 【中文用户 & Non English User】请使用英语提交,否则会被关闭 :)
  • Please do not modify this template :) and fill in all the required fields.

Description

We found that a large amount of SQL statements are generated during workflow execution, including many duplicate statements. For example, when querying app and workflow information, can this be cached in Redis to reduce the pressure on the database?

Motivation

No response

Additional Context

No response

Originally created by @qiqizjl on GitHub (Oct 22, 2025). ### Self Checks - [x] I have read the [Contributing Guide](https://github.com/langgenius/dify/blob/main/CONTRIBUTING.md) and [Language Policy](https://github.com/langgenius/dify/issues/1542). - [x] This is only for refactoring, if you would like to ask a question, please head to [Discussions](https://github.com/langgenius/dify/discussions/categories/general). - [x] I have searched for existing issues [search for existing issues](https://github.com/langgenius/dify/issues), including closed ones. - [x] I confirm that I am using English to submit this report, otherwise it will be closed. - [x] 【中文用户 & Non English User】请使用英语提交,否则会被关闭 :) - [x] Please do not modify this template :) and fill in all the required fields. ### Description We found that a large amount of SQL statements are generated during workflow execution, including many duplicate statements. For example, when querying app and workflow information, can this be cached in Redis to reduce the pressure on the database? ### Motivation _No response_ ### Additional Context _No response_
yindo added the 💪 enhancementrefactor labels 2026-02-21 20:04:28 -05:00
Author
Owner

@qiqizjl commented on GitHub (Oct 22, 2025):

In addition, regarding the connection pool properties of sqlalchemy, have you considered changing all db.session to with?

@qiqizjl commented on GitHub (Oct 22, 2025): In addition, regarding the connection pool properties of sqlalchemy, have you considered changing all db.session to with?
Author
Owner

@dosubot[bot] commented on GitHub (Oct 22, 2025):

Yes, this has been considered and is actively being adopted. Recent refactoring in Dify has moved many database operations from direct db.session usage to using 'with' context managers (like with Session(db.engine) as session), which ensures sessions are properly closed and connections are released back to the pool. This approach helps prevent connection leaks and improves connection pool health, especially under high concurrency or in long-running workflows. However, some direct db.session usage still exists, so the transition is ongoing. The connection pool properties (such as pool size, overflow, recycle, and timeout) are fully configurable in Dify's settings and can be tuned as needed for your workload. For examples of the new pattern, see the recent refactor in the codebase here and the configuration details here.

To reply, just mention @dosu.


How did I do? Good | Irrelevant | Incorrect | Verbose | Hallucination | Report 🐛 | Other  Chat with Dosu Join Discord Share on X

@dosubot[bot] commented on GitHub (Oct 22, 2025): <!-- Answer --> Yes, this has been considered and is actively being adopted. Recent refactoring in Dify has moved many database operations from direct db.session usage to using 'with' context managers (like with Session(db.engine) as session), which ensures sessions are properly closed and connections are released back to the pool. This approach helps prevent connection leaks and improves connection pool health, especially under high concurrency or in long-running workflows. However, some direct db.session usage still exists, so the transition is ongoing. The connection pool properties (such as pool size, overflow, recycle, and timeout) are fully configurable in Dify's settings and can be tuned as needed for your workload. For examples of the new pattern, see the recent refactor in the codebase [here](https://github.com/langgenius/dify/pull/24135) and the configuration details [here](https://github.com/langgenius/dify/blob/4bb00b83d9fb74d262243cae8d4ead10d1651e31/api/configs/middleware/__init__.py). <!-- Dosu Comment Footer --> *To reply, just mention [@dosu](https://go.dosu.dev/dosubot).* --- <sup>How did I do? [Good](https://app.dosu.dev/response-feedback/505577fd-eff1-47e8-b4b5-a7a8787c57ed?feedback_type=great_response) | [Irrelevant](https://app.dosu.dev/response-feedback/505577fd-eff1-47e8-b4b5-a7a8787c57ed?feedback_type=irrelevant_answer) | [Incorrect](https://app.dosu.dev/response-feedback/505577fd-eff1-47e8-b4b5-a7a8787c57ed?feedback_type=incorrect_sources) | [Verbose](https://app.dosu.dev/response-feedback/505577fd-eff1-47e8-b4b5-a7a8787c57ed?feedback_type=too_verbose) | [Hallucination](https://app.dosu.dev/response-feedback/505577fd-eff1-47e8-b4b5-a7a8787c57ed?feedback_type=hallucination) | [Report 🐛](https://app.dosu.dev/response-feedback/505577fd-eff1-47e8-b4b5-a7a8787c57ed?feedback_type=bug_report) | [Other](https://app.dosu.dev/response-feedback/505577fd-eff1-47e8-b4b5-a7a8787c57ed?feedback_type=other)</sup>&nbsp;&nbsp;[![Chat with Dosu](https://dosu.dev/dosu-chat-badge.svg)](https://app.dosu.dev/6088a4f4-073a-43f3-b3d4-4f06fb0c05a0/ask?utm_source=github)&nbsp;[![Join Discord](https://img.shields.io/badge/join-5865F2?logo=discord&logoColor=white&label=)](https://go.dosu.dev/discord-bot)&nbsp;[![Share on X](https://img.shields.io/badge/X-share-black)](https://twitter.com/intent/tweet?text=%40dosu_ai%20helped%20me%20solve%20this%20issue!&url=https%3A//github.com/langgenius/dify/issues/27299)
Author
Owner

@uply23333 commented on GitHub (Nov 21, 2025):

Same issue here. Within an Iteration node’s Retrieve node, each RAG step triggers ProviderManager.get_configurations ( core/provider_manager.py ), which issues multiple SQL queries and consistently takes ~1s per call in my environment.

@uply23333 commented on GitHub (Nov 21, 2025): Same issue here. Within an **Iteration node**’s **Retrieve node,** each RAG step triggers `ProviderManager.get_configurations` ( core/provider_manager.py ), which issues multiple SQL queries and consistently takes ~1s per call in my environment.
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: langgenius/dify#19835