fix: 优化 MySQL 连接池配置
问题:Cannot Open when State is Connecting 分析: - SqlSugarScope 是线程安全的,使用 AsyncLocal 隔离上下文 - Singleton 注册符合官方建议 - 问题可能出在 MySQL 连接池配置 修复: 添加连接池参数: - Pooling=true(开启连接池) - MaximumPoolSize=100(最大连接数) - MinimumPoolSize=5(最小连接数) - ConnectionTimeout=30(连接超时) - ConnectionIdleTimeout=180(空闲连接超时,避免使用陈旧连接) 配合内存缓存层,减少数据库查询次数
This commit is contained in:
parent
8d7e62f8af
commit
51b7372d81
@ -8,9 +8,9 @@ public static class DatabaseExtensions
|
||||
{
|
||||
public static IServiceCollection AddDatabase(this IServiceCollection services)
|
||||
{
|
||||
// 使用 Scoped 注册,每个 HTTP 请求一个实例,避免并发冲突
|
||||
// SqlSugarScope 内部会自动管理连接池
|
||||
services.AddScoped<ISqlSugarClient>(s =>
|
||||
// SqlSugarScope 是线程安全的,内部使用 AsyncLocal 隔离上下文
|
||||
// 使用 Singleton 注册,整个应用共享一个实例
|
||||
services.AddSingleton<ISqlSugarClient>(s =>
|
||||
{
|
||||
return SqlSugarConfig.GetSqlSugarClient();
|
||||
});
|
||||
|
||||
@ -27,6 +27,31 @@ public static class SqlSugarConfig
|
||||
?? _configuration.GetConnectionString("Default")
|
||||
?? throw new InvalidOperationException("Connection string 'Default' not found in environment variables or configuration.");
|
||||
|
||||
// MySQL 连接池优化配置
|
||||
// 添加连接池参数提高稳定性
|
||||
if (!connectionString.Contains("Pooling=", StringComparison.OrdinalIgnoreCase))
|
||||
{
|
||||
connectionString += ";Pooling=true";
|
||||
}
|
||||
if (!connectionString.Contains("MaximumPoolSize=", StringComparison.OrdinalIgnoreCase))
|
||||
{
|
||||
connectionString += ";MaximumPoolSize=100";
|
||||
}
|
||||
if (!connectionString.Contains("MinimumPoolSize=", StringComparison.OrdinalIgnoreCase))
|
||||
{
|
||||
connectionString += ";MinimumPoolSize=5";
|
||||
}
|
||||
// 连接超时和生命周期
|
||||
if (!connectionString.Contains("ConnectionTimeout=", StringComparison.OrdinalIgnoreCase))
|
||||
{
|
||||
connectionString += ";ConnectionTimeout=30";
|
||||
}
|
||||
// 连接空闲超时,避免使用长时间空闲的连接
|
||||
if (!connectionString.Contains("ConnectionIdleTimeout=", StringComparison.OrdinalIgnoreCase))
|
||||
{
|
||||
connectionString += ";ConnectionIdleTimeout=180";
|
||||
}
|
||||
|
||||
return new SqlSugarScope(new ConnectionConfig()
|
||||
{
|
||||
ConnectionString = connectionString,
|
||||
|
||||
Loading…
Reference in New Issue
Block a user