mirror of
https://git.mirrors.martin98.com/https://github.com/infiniflow/ragflow.git
synced 2025-08-13 16:49:01 +08:00
Perf: Increase database connection pool size (#7559)
### What problem does this PR solve? 1. The MySQL instance is configured with max_connections=1000, but our connection pool was limited to max_connections: 100. This mismatch caused connection pool exhaustion during performance testing. 2. Increase stale_timeout to resolve #6548 ### Type of change - [x] Performance Improvement
This commit is contained in:
parent
5b626870d0
commit
6bd7d572ec
@ -18,7 +18,7 @@ from datetime import datetime
|
|||||||
import peewee
|
import peewee
|
||||||
|
|
||||||
from api.db.db_models import DB
|
from api.db.db_models import DB
|
||||||
from api.utils import datetime_format, current_timestamp, get_uuid
|
from api.utils import current_timestamp, datetime_format, get_uuid
|
||||||
|
|
||||||
|
|
||||||
class CommonService:
|
class CommonService:
|
||||||
@ -32,6 +32,7 @@ class CommonService:
|
|||||||
Attributes:
|
Attributes:
|
||||||
model: The Peewee model class that this service operates on. Must be set by subclasses.
|
model: The Peewee model class that this service operates on. Must be set by subclasses.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
model = None
|
model = None
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
@ -52,8 +53,7 @@ class CommonService:
|
|||||||
Returns:
|
Returns:
|
||||||
peewee.ModelSelect: A query result containing matching records.
|
peewee.ModelSelect: A query result containing matching records.
|
||||||
"""
|
"""
|
||||||
return cls.model.query(cols=cols, reverse=reverse,
|
return cls.model.query(cols=cols, reverse=reverse, order_by=order_by, **kwargs)
|
||||||
order_by=order_by, **kwargs)
|
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
@DB.connection_context()
|
@DB.connection_context()
|
||||||
@ -80,11 +80,9 @@ class CommonService:
|
|||||||
if not order_by or not hasattr(cls, order_by):
|
if not order_by or not hasattr(cls, order_by):
|
||||||
order_by = "create_time"
|
order_by = "create_time"
|
||||||
if reverse is True:
|
if reverse is True:
|
||||||
query_records = query_records.order_by(
|
query_records = query_records.order_by(cls.model.getter_by(order_by).desc())
|
||||||
cls.model.getter_by(order_by).desc())
|
|
||||||
elif reverse is False:
|
elif reverse is False:
|
||||||
query_records = query_records.order_by(
|
query_records = query_records.order_by(cls.model.getter_by(order_by).asc())
|
||||||
cls.model.getter_by(order_by).asc())
|
|
||||||
return query_records
|
return query_records
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
@ -200,8 +198,7 @@ class CommonService:
|
|||||||
for data in data_list:
|
for data in data_list:
|
||||||
data["update_time"] = current_timestamp()
|
data["update_time"] = current_timestamp()
|
||||||
data["update_date"] = datetime_format(datetime.now())
|
data["update_date"] = datetime_format(datetime.now())
|
||||||
cls.model.update(data).where(
|
cls.model.update(data).where(cls.model.id == data["id"]).execute()
|
||||||
cls.model.id == data["id"]).execute()
|
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
@DB.connection_context()
|
@DB.connection_context()
|
||||||
@ -212,12 +209,6 @@ class CommonService:
|
|||||||
# data: Updated field values
|
# data: Updated field values
|
||||||
# Returns:
|
# Returns:
|
||||||
# Number of records updated
|
# Number of records updated
|
||||||
try:
|
|
||||||
if not DB.is_connection_usable():
|
|
||||||
DB.connect()
|
|
||||||
except Exception:
|
|
||||||
DB.close()
|
|
||||||
DB.connect()
|
|
||||||
data["update_time"] = current_timestamp()
|
data["update_time"] = current_timestamp()
|
||||||
data["update_date"] = datetime_format(datetime.now())
|
data["update_date"] = datetime_format(datetime.now())
|
||||||
num = cls.model.update(data).where(cls.model.id == pid).execute()
|
num = cls.model.update(data).where(cls.model.id == pid).execute()
|
||||||
@ -315,8 +306,7 @@ class CommonService:
|
|||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
@DB.connection_context()
|
@DB.connection_context()
|
||||||
def filter_scope_list(cls, in_key, in_filters_list,
|
def filter_scope_list(cls, in_key, in_filters_list, filters=None, cols=None):
|
||||||
filters=None, cols=None):
|
|
||||||
# Get records matching IN clause filters with optional column selection
|
# Get records matching IN clause filters with optional column selection
|
||||||
# Args:
|
# Args:
|
||||||
# in_key: Field name for IN clause
|
# in_key: Field name for IN clause
|
||||||
@ -331,22 +321,12 @@ class CommonService:
|
|||||||
res_list = []
|
res_list = []
|
||||||
if cols:
|
if cols:
|
||||||
for i in in_filters_tuple_list:
|
for i in in_filters_tuple_list:
|
||||||
query_records = cls.model.select(
|
query_records = cls.model.select(*cols).where(getattr(cls.model, in_key).in_(i), *filters)
|
||||||
*
|
|
||||||
cols).where(
|
|
||||||
getattr(
|
|
||||||
cls.model,
|
|
||||||
in_key).in_(i),
|
|
||||||
*
|
|
||||||
filters)
|
|
||||||
if query_records:
|
if query_records:
|
||||||
res_list.extend(
|
res_list.extend([query_record for query_record in query_records])
|
||||||
[query_record for query_record in query_records])
|
|
||||||
else:
|
else:
|
||||||
for i in in_filters_tuple_list:
|
for i in in_filters_tuple_list:
|
||||||
query_records = cls.model.select().where(
|
query_records = cls.model.select().where(getattr(cls.model, in_key).in_(i), *filters)
|
||||||
getattr(cls.model, in_key).in_(i), *filters)
|
|
||||||
if query_records:
|
if query_records:
|
||||||
res_list.extend(
|
res_list.extend([query_record for query_record in query_records])
|
||||||
[query_record for query_record in query_records])
|
|
||||||
return res_list
|
return res_list
|
||||||
|
@ -163,12 +163,6 @@ class TenantLLMService(CommonService):
|
|||||||
@classmethod
|
@classmethod
|
||||||
@DB.connection_context()
|
@DB.connection_context()
|
||||||
def increase_usage(cls, tenant_id, llm_type, used_tokens, llm_name=None):
|
def increase_usage(cls, tenant_id, llm_type, used_tokens, llm_name=None):
|
||||||
try:
|
|
||||||
if not DB.is_connection_usable():
|
|
||||||
DB.connect()
|
|
||||||
except Exception:
|
|
||||||
DB.close()
|
|
||||||
DB.connect()
|
|
||||||
e, tenant = TenantService.get_by_id(tenant_id)
|
e, tenant = TenantService.get_by_id(tenant_id)
|
||||||
if not e:
|
if not e:
|
||||||
logging.error(f"Tenant not found: {tenant_id}")
|
logging.error(f"Tenant not found: {tenant_id}")
|
||||||
|
@ -7,8 +7,8 @@ mysql:
|
|||||||
password: 'infini_rag_flow'
|
password: 'infini_rag_flow'
|
||||||
host: 'localhost'
|
host: 'localhost'
|
||||||
port: 5455
|
port: 5455
|
||||||
max_connections: 100
|
max_connections: 900
|
||||||
stale_timeout: 30
|
stale_timeout: 300
|
||||||
minio:
|
minio:
|
||||||
user: 'rag_flow'
|
user: 'rag_flow'
|
||||||
password: 'infini_rag_flow'
|
password: 'infini_rag_flow'
|
||||||
|
@ -7,8 +7,8 @@ mysql:
|
|||||||
password: '${MYSQL_PASSWORD:-infini_rag_flow}'
|
password: '${MYSQL_PASSWORD:-infini_rag_flow}'
|
||||||
host: '${MYSQL_HOST:-mysql}'
|
host: '${MYSQL_HOST:-mysql}'
|
||||||
port: 3306
|
port: 3306
|
||||||
max_connections: 100
|
max_connections: 900
|
||||||
stale_timeout: 30
|
stale_timeout: 300
|
||||||
minio:
|
minio:
|
||||||
user: '${MINIO_USER:-rag_flow}'
|
user: '${MINIO_USER:-rag_flow}'
|
||||||
password: '${MINIO_PASSWORD:-infini_rag_flow}'
|
password: '${MINIO_PASSWORD:-infini_rag_flow}'
|
||||||
|
Loading…
x
Reference in New Issue
Block a user