背景:
- 创建了一个商品推荐系统,商品信息按对应的分类( 100 个左右)生成不同维度的向量,并且按分类创建表(就是 100 个左右的表),保存商品的向量。
- 向量的索引采用
hnsw,向量类型halfvec,m取 16 ,ef_construction为 100 ,距离计算L2 distance。 - 连接 PostgreSQL 的驱动采用
asyncpg,即基于 Python 异步 IO 的驱动。 - PostSQL 和 pgvector 参数全部默认。
问题:
使用 48 个不同分类的向量,分别搜索对应分类的相似商品向量。异步 IO 同时发送 48 个查询向量的 SQL 时,查询很慢,约 700ms~1600ms ,而且 48 个查询几乎同时返回。
简单优化:
改为每次同时发送 4 个查询,约 200ms 完成 48 个查询。
疑问:
- PostgreSQL 的并发查询能力应该没这么差,是不是参数未调优?
- 还是 pgvector 的问题?其向量查询的并发处理能力不足?