web-dev-qa-db-ja.com

Hangfireをクリーンな状態に安全にリセットするにはどうすればよいですか?

Hangfireがインストールされたサーバーがあります。私はしばらくそれをチェックしていません、そして、1つの繰り返しの仕事が不正になっているようです。それは動作を停止し、その後、再試行が積み重なって、完全にロックされたように見えます。

データベースをクリアしてやり直したい。すべてのテーブルからデータを削除することはできますか、それともテーブルを削除してHangfireに再作成させますか?これを行うことで何か危険を冒していますか?

AzureBasicデータベース全体で2GBのスペースを使用するHangfire.State。 enter image description here

10
Ogglas

結局、テーブルを削除しました。最初はクエリがまったく機能せず、そのまま続行され、何も起こりませんでした。次にTRUNCATE TABLE [HangFire].[State]を使用しましたが、すべてが魅力のように機能しました。これがHangfire 1.5.6UseSqlServerStorageで使用したスクリプトです。

GO
PRINT N'Dropping [HangFire].[FK_HangFire_State_Job]...';


GO
ALTER TABLE [HangFire].[State] DROP CONSTRAINT [FK_HangFire_State_Job];


GO
PRINT N'Dropping [HangFire].[FK_HangFire_JobParameter_Job]...';


GO
ALTER TABLE [HangFire].[JobParameter] DROP CONSTRAINT [FK_HangFire_JobParameter_Job];


GO
PRINT N'Dropping [HangFire].[Schema]...';


GO
DROP TABLE [HangFire].[Schema];


GO
PRINT N'Dropping [HangFire].[Job]...';


GO
DROP TABLE [HangFire].[Job];


GO
PRINT N'Dropping [HangFire].[State]...';


GO
DROP TABLE [HangFire].[State];


GO
PRINT N'Dropping [HangFire].[JobParameter]...';


GO
DROP TABLE [HangFire].[JobParameter];


GO
PRINT N'Dropping [HangFire].[JobQueue]...';


GO
DROP TABLE [HangFire].[JobQueue];


GO
PRINT N'Dropping [HangFire].[Server]...';


GO
DROP TABLE [HangFire].[Server];


GO
PRINT N'Dropping [HangFire].[List]...';


GO
DROP TABLE [HangFire].[List];


GO
PRINT N'Dropping [HangFire].[Set]...';


GO
DROP TABLE [HangFire].[Set];


GO
PRINT N'Dropping [HangFire].[Counter]...';


GO
DROP TABLE [HangFire].[Counter];


GO
PRINT N'Dropping [HangFire].[Hash]...';


GO
DROP TABLE [HangFire].[Hash];


GO
PRINT N'Dropping [HangFire].[AggregatedCounter]...';


GO
DROP TABLE [HangFire].[AggregatedCounter];


GO
PRINT N'Dropping [HangFire]...';


GO
DROP SCHEMA [HangFire];


GO
PRINT N'Update complete.';


GO
26
Ogglas

私はかなり興味深い解決策を見てきました ここ

TRUNCATE TABLE [HangFire].[AggregatedCounter]
TRUNCATE TABLE [HangFire].[Counter]
TRUNCATE TABLE [HangFire].[JobParameter]
TRUNCATE TABLE [HangFire].[JobQueue]
TRUNCATE TABLE [HangFire].[List]
TRUNCATE TABLE [HangFire].[State]
DELETE FROM [HangFire].[Job]
DBCC CHECKIDENT ('[HangFire].[Job]', reseed, 0)
UPDATE [HangFire].[Hash] SET Value = 1 WHERE Field = 'LastJobId'

これは基本的にすべてのテーブルを切り捨て、ジョブテーブルのシードをリセットします(ジョブIDをリセットします)

スクリプトを実行する前に、アプリケーションを停止し、サーバーでワーカープロセスがクリアされていることを確認することをお勧めします。

8
JosePaya