From 312411cca2d2cc21a33e0026b78f1b984a7d5460 Mon Sep 17 00:00:00 2001 From: Zack Fu Zi Xiang Date: Thu, 5 Sep 2024 00:06:04 +0800 Subject: [PATCH] fix: slow query deleting collab embeddings --- ...2e5eeeaabda218c3709540e4a4c2df0180047.json | 15 +++++++++++++++ ...9fda9e0e9323806a6f42a5d8f73243f349b85.json | 15 --------------- ...7ded940d66320270d5ab4431271dd50a9d50b.json | 14 ++++++++++++++ ...03f63e80e4f05a45a0790dd0bde892429ef14.json | 14 -------------- libs/database/src/workspace.rs | 19 ++++++++++++------- ...904000000_af_collab_embeddings_indices.sql | 1 + 6 files changed, 42 insertions(+), 36 deletions(-) create mode 100644 .sqlx/query-1e36d9b3adf957524af88f997f12e5eeeaabda218c3709540e4a4c2df0180047.json delete mode 100644 .sqlx/query-4c985215efcd09915403a7f76449fda9e0e9323806a6f42a5d8f73243f349b85.json create mode 100644 .sqlx/query-cbe43eb734e0afd865a7c1082ba7ded940d66320270d5ab4431271dd50a9d50b.json delete mode 100644 .sqlx/query-e5d51236e5c96ac91c70cd1d1b603f63e80e4f05a45a0790dd0bde892429ef14.json create mode 100644 migrations/20240904000000_af_collab_embeddings_indices.sql diff --git a/.sqlx/query-1e36d9b3adf957524af88f997f12e5eeeaabda218c3709540e4a4c2df0180047.json b/.sqlx/query-1e36d9b3adf957524af88f997f12e5eeeaabda218c3709540e4a4c2df0180047.json new file mode 100644 index 00000000..3934d291 --- /dev/null +++ b/.sqlx/query-1e36d9b3adf957524af88f997f12e5eeeaabda218c3709540e4a4c2df0180047.json @@ -0,0 +1,15 @@ +{ + "db_name": "PostgreSQL", + "query": "\n UPDATE af_workspace\n SET settings = $1\n WHERE workspace_id = $2\n ", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Jsonb", + "Uuid" + ] + }, + "nullable": [] + }, + "hash": "1e36d9b3adf957524af88f997f12e5eeeaabda218c3709540e4a4c2df0180047" +} diff --git a/.sqlx/query-4c985215efcd09915403a7f76449fda9e0e9323806a6f42a5d8f73243f349b85.json b/.sqlx/query-4c985215efcd09915403a7f76449fda9e0e9323806a6f42a5d8f73243f349b85.json deleted file mode 100644 index 45063005..00000000 --- a/.sqlx/query-4c985215efcd09915403a7f76449fda9e0e9323806a6f42a5d8f73243f349b85.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "db_name": "PostgreSQL", - "query": "UPDATE af_workspace SET settings = $1 WHERE workspace_id = $2", - "describe": { - "columns": [], - "parameters": { - "Left": [ - "Jsonb", - "Uuid" - ] - }, - "nullable": [] - }, - "hash": "4c985215efcd09915403a7f76449fda9e0e9323806a6f42a5d8f73243f349b85" -} diff --git a/.sqlx/query-cbe43eb734e0afd865a7c1082ba7ded940d66320270d5ab4431271dd50a9d50b.json b/.sqlx/query-cbe43eb734e0afd865a7c1082ba7ded940d66320270d5ab4431271dd50a9d50b.json new file mode 100644 index 00000000..e2c64532 --- /dev/null +++ b/.sqlx/query-cbe43eb734e0afd865a7c1082ba7ded940d66320270d5ab4431271dd50a9d50b.json @@ -0,0 +1,14 @@ +{ + "db_name": "PostgreSQL", + "query": "\n DELETE FROM af_collab_embeddings e\n USING af_collab c\n WHERE e.oid = c.oid\n AND e.partition_key = c.partition_key\n AND c.workspace_id = $1\n ", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Uuid" + ] + }, + "nullable": [] + }, + "hash": "cbe43eb734e0afd865a7c1082ba7ded940d66320270d5ab4431271dd50a9d50b" +} diff --git a/.sqlx/query-e5d51236e5c96ac91c70cd1d1b603f63e80e4f05a45a0790dd0bde892429ef14.json b/.sqlx/query-e5d51236e5c96ac91c70cd1d1b603f63e80e4f05a45a0790dd0bde892429ef14.json deleted file mode 100644 index 256dd3e3..00000000 --- a/.sqlx/query-e5d51236e5c96ac91c70cd1d1b603f63e80e4f05a45a0790dd0bde892429ef14.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "db_name": "PostgreSQL", - "query": "DELETE FROM af_collab_embeddings e WHERE e.oid in (\n SELECT c.oid\n FROM af_collab c\n WHERE c.partition_key = e.partition_key\n AND c.oid = e.oid\n AND c.workspace_id = $1)", - "describe": { - "columns": [], - "parameters": { - "Left": [ - "Uuid" - ] - }, - "nullable": [] - }, - "hash": "e5d51236e5c96ac91c70cd1d1b603f63e80e4f05a45a0790dd0bde892429ef14" -} diff --git a/libs/database/src/workspace.rs b/libs/database/src/workspace.rs index 98dd82ee..ba52f9cd 100644 --- a/libs/database/src/workspace.rs +++ b/libs/database/src/workspace.rs @@ -907,7 +907,11 @@ pub async fn upsert_workspace_settings( ) -> Result<(), AppError> { let json = serde_json::to_value(settings)?; sqlx::query!( - r#"UPDATE af_workspace SET settings = $1 WHERE workspace_id = $2"#, + r#" + UPDATE af_workspace + SET settings = $1 + WHERE workspace_id = $2 + "#, json, workspace_id ) @@ -916,12 +920,13 @@ pub async fn upsert_workspace_settings( if settings.disable_search_indexing { sqlx::query!( - r#"DELETE FROM af_collab_embeddings e WHERE e.oid in ( - SELECT c.oid - FROM af_collab c - WHERE c.partition_key = e.partition_key - AND c.oid = e.oid - AND c.workspace_id = $1)"#, + r#" + DELETE FROM af_collab_embeddings e + USING af_collab c + WHERE e.oid = c.oid + AND e.partition_key = c.partition_key + AND c.workspace_id = $1 + "#, workspace_id ) .execute(tx.deref_mut()) diff --git a/migrations/20240904000000_af_collab_embeddings_indices.sql b/migrations/20240904000000_af_collab_embeddings_indices.sql new file mode 100644 index 00000000..338e6c99 --- /dev/null +++ b/migrations/20240904000000_af_collab_embeddings_indices.sql @@ -0,0 +1 @@ +CREATE INDEX af_collab_embeddings_oid_idx ON public.af_collab_embeddings (oid);