使用了Sugar后,mysql的information_schema.tables查询次数超级多 返回

SqlSugar 沟通中
9 230
该叫什么 码丁 发布于2周前
悬赏:0 飞吻

现在这个查询量是整个系统第一名,如何解决

information_schema.tables.jpg

热忱回答9

  • 你是不是用了分表,分表有个性能优化,可以不查询这个

    0 回复
  • 对,我们大量用到了分表,请教下大佬如何进行优化

    0 回复
  • @fate sta对,我们大量用到了分表,请教下大佬如何进行优化

    0 回复
  • image.png

    0 回复
  • 每天12点清空缓存就行了

    0 回复
  • image.png

    @fate sta:既然传true就是走缓存,为什么还要另外去写缓存的方法

    0 回复
  • @码丁:这个缓存没办法清理

    0 回复
  • 你要无缓存方法

    0 回复
  • services.AddSingleton<ISqlSugarClient>(sqlSugar); // 单例注册
    services.AddScoped(typeof(SqlSugarRepository<>)); // 仓储注册
    services.AddUnitOfWork<SqlSugarUnitOfWork>(); // 事务与工作单元注册
    
    var cacheKey = "SplitTablesCache";
    var cache = services.BuildServiceProvider().GetRequiredService<IMemoryCache>();
    StaticConfig.SplitTableGetTablesFunc = () =>
    {
        if (cache.TryGetValue(cacheKey, out List<SplitTableInfo> cachedTables))
        {
            return cachedTables;
        }
        else
        {
            var db = services.BuildServiceProvider().GetRequiredService<ISqlSugarClient>();
            var list = db.DbMaintenance.GetTableInfoList(false);
            var result = list.Select(it => new SplitTableInfo() { TableName = it.Name }).ToList();
    
            var nextMidnight = DateTime.Now.Date.AddDays(1);
    
            var cacheEntryOptions = new MemoryCacheEntryOptions
            {
                AbsoluteExpiration = new DateTimeOffset(nextMidnight)
            };
    
            cache.Set(cacheKey, result, cacheEntryOptions);
    
            return result;
        }
    };


    @fate sta:我这么写似乎没有生效,跟踪下来还是老样子。

    image.png

    0 回复