yuzd / Hangfire.HttpJob

httpjob for Hangfire,restful api for Hangfire,job调度与业务分离
https://github.com/yuzd/Hangfire.HttpJob/wiki
MIT License
628 stars 185 forks source link

Set表数据过大如何处理? #43

Closed tohkinzhu closed 4 years ago

tohkinzhu commented 4 years ago

老哥,问个问题,Set表数据过大如何处理,跑了几个月,居然有7000w的数据,控制台(key是console开头的)似乎可以配置自动删除,有些key是tags开头的数据,可以配置自动删除嘛?多谢

yuzd commented 4 years ago

应该是tag组件导致的 https://github.com/face-it/Hangfire.Tags 我研究下

tohkinzhu commented 4 years ago

嗯、我无脑把tags相关的数据暂时都先删了、删了2小时、好像没什么影响?

yuzd commented 4 years ago

删除tag是没有影响的。因为tag只是根据你的jobname进行分类展示而已。你删除了 顶多没有分类。下次重新执行还是会给你新增tag的

我测试了 确实发现有部分的tag是过期日期没有赋值,我刚升级了下tag组件和hangfire.core的组件到最新版后,目前没有发现这个问题了。你可以升级下到最新版 Hangfire.HttpJob 3.1.8

tohkinzhu commented 4 years ago

好的 我试试 谢谢大佬

tohkinzhu commented 4 years ago

不过 这个tags可以禁用么?因为我看界面上也没有展示tags数据的地方。 @yuzd

yuzd commented 4 years ago

image

tohkinzhu commented 4 years ago

image 升级到最新版本好像没有显示出这个。

tohkinzhu commented 4 years ago

这些job需要重新重建? 因为我发现还是有不少过期时间是null的数据在不断的生成,然后越来越大。。 能不能手动开启关闭这个tag功能?

tohkinzhu commented 4 years ago

image

yuzd commented 4 years ago

好像你的 Hangfire.Tags.Mysql 没更新吧

yuzd commented 4 years ago

你看下你的startup.cs里面配置的代码里面有没有usetag 有的话去掉的话 就关闭tag功能了

tohkinzhu commented 4 years ago

我用的sqlserver,你的意思是还需要单独安装升级Hangfire.Tags?startup里没有usetag. 但是tag还是不断增长。目前就这些引用,根据你GitHub主页来配置的

<PackageReference Include="Hangfire.AspNetCore" Version="1.7.11" />
      <PackageReference Include="Hangfire.Core" Version="1.7.11" />
      <PackageReference Include="Hangfire.Dashboard.BasicAuthorization" Version="1.0.2" />
      <PackageReference Include="Hangfire.HttpJob" Version="3.2.0" />
      <PackageReference Include="Hangfire.HttpJob.Agent" Version="1.1.4" />
      <PackageReference Include="Hangfire.HttpJob.Client" Version="1.1.5" />
      <PackageReference Include="Hangfire.SqlServer" Version="1.7.11" />
tohkinzhu commented 4 years ago

DELETE FROM HangFire.[Set] WHERE [Key] LIKE 'tags%'

Affected rows: 3161548 时间: 127.146s 每天得删一删数据

tohkinzhu commented 4 years ago
        private void AddHangfireConfiguration(IGlobalConfiguration globalConfiguration)
        {
            globalConfiguration.UseSqlServerStorage(Configuration["HangfireSqlserverConnectionString"], new SqlServerStorageOptions
                {
                    CommandBatchMaxTimeout = TimeSpan.FromMinutes(5),
                    SlidingInvisibilityTimeout = TimeSpan.FromMinutes(5),
                    QueuePollInterval = TimeSpan.Zero,
                    UseRecommendedIsolationLevel = true,
                    UsePageLocksOnDequeue = true,
                    DisableGlobalLocks = true
                })
                .UseConsole(new ConsoleOptions
                {
                    ExpireIn = TimeSpan.FromMinutes(5)
                })
                .UseHangfireHttpJob(new HangfireHttpJobOptions
                {
                    MailOption = new MailOption
                    {
                        Server = Configuration["HangfireMail:Server"],
                        Port = int.Parse(Configuration["HangfireMail:Port"]),
                        UseSsl = bool.Parse(Configuration["HangfireMail:UseSsl"]),
                        User = Configuration["HangfireMail:User"],
                        Password = Configuration["HangfireMail:Password"],
                    },
                    JobExpirationTimeoutDay = 1,
                    DefaultRecurringQueueName = Configuration["DefaultRecurringQueueName"],
                    RecurringJobTimeZone = TZConvert.GetTimeZoneInfo("Asia/Shanghai") //这里指定了添加周期性job时的时区
                });
        }
yuzd commented 4 years ago

稍等 我查下

yuzd commented 4 years ago

sqlserver上如果没有用tag 会记录tag的bug我修复了。请升级下

tohkinzhu commented 4 years ago

好的,我升级下看看。

tohkinzhu commented 4 years ago

UseConsole的这个数据是否可以关闭,我之前没有UseConsole好像也会记录数据,现在记录了5分钟,但是好像还是会一天后才过期。