From 01a13d0306055e0a7ff89ae0492150b903e1a55a Mon Sep 17 00:00:00 2001 From: Dmitry Vychikov Date: Sun, 3 Mar 2024 17:51:14 +0300 Subject: [PATCH 1/2] [#348] Improve dequeue performance Create index for jobqueue table that puts NULLs in "fetchedat" column first for better de-queueing performance Signed-off-by: Dmitry Vychikov --- src/Hangfire.PostgreSql/Scripts/Install.v22.sql | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 src/Hangfire.PostgreSql/Scripts/Install.v22.sql diff --git a/src/Hangfire.PostgreSql/Scripts/Install.v22.sql b/src/Hangfire.PostgreSql/Scripts/Install.v22.sql new file mode 100644 index 0000000..55f06fe --- /dev/null +++ b/src/Hangfire.PostgreSql/Scripts/Install.v22.sql @@ -0,0 +1,13 @@ +SET search_path = 'hangfire'; + +DO $$ +BEGIN + IF EXISTS(SELECT 1 FROM "schema" WHERE "version"::integer >= 22) THEN + RAISE EXCEPTION 'version-already-applied'; +END IF; +END $$; + +DROP INDEX IF EXISTS jobqueue_queue_fetchat_jobId; +CREATE INDEX IF NOT EXISTS ix_hangfire_jobqueue_fetchedat_queue_jobid ON jobqueue USING btree (fetchedat nulls first, queue, jobid); + +RESET search_path; From 2d4deb125f39acfcad22f079225ebf346295415c Mon Sep 17 00:00:00 2001 From: Dmitry Vychikov Date: Sun, 3 Mar 2024 17:56:27 +0300 Subject: [PATCH 2/2] Bump schema version in tests Signed-off-by: Dmitry Vychikov --- tests/Hangfire.PostgreSql.Tests/PostgreSqlInstallerFacts.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/Hangfire.PostgreSql.Tests/PostgreSqlInstallerFacts.cs b/tests/Hangfire.PostgreSql.Tests/PostgreSqlInstallerFacts.cs index b7beb75..1fb173a 100644 --- a/tests/Hangfire.PostgreSql.Tests/PostgreSqlInstallerFacts.cs +++ b/tests/Hangfire.PostgreSql.Tests/PostgreSqlInstallerFacts.cs @@ -20,7 +20,7 @@ public void InstallingSchemaUpdatesVersionAndShouldNotThrowAnException() PostgreSqlObjectsInstaller.Install(connection, schemaName); int lastVersion = connection.Query($@"SELECT version FROM ""{schemaName}"".""schema""").Single(); - Assert.Equal(21, lastVersion); + Assert.Equal(22, lastVersion); connection.Execute($@"DROP SCHEMA ""{schemaName}"" CASCADE;"); }); @@ -39,7 +39,7 @@ public void InstallingSchemaWithCapitalsUpdatesVersionAndShouldNotThrowAnExcepti PostgreSqlObjectsInstaller.Install(connection, schemaName); int lastVersion = connection.Query($@"SELECT version FROM ""{schemaName}"".""schema""").Single(); - Assert.Equal(21, lastVersion); + Assert.Equal(22, lastVersion); connection.Execute($@"DROP SCHEMA ""{schemaName}"" CASCADE;"); });