参数 | 何时使用 | 含义 |
lists | 创建索引时指定,insert 时使用。 |
|
ivfflat.probes | 查询时指定,索引扫描时使用。 | 最小值为 1,最大值为 32768,默认值为 1,在本次索引扫描过程中,搜索的列表数目。该值越大,搜索扫描搜索的列表数越多,召回率(recall)就会越高,但是索引扫描效率会有所降低;反之,该值越小,索引扫描搜索列表数越少,召回率就会较低,但是索引扫描的效率会有所提升。 如果该值大于创建索引时指定的 lists 值时,查询优化将会忽略索引,选择全表扫描。此时,可能会降低查询性能。 |
ivfflat.iterative_scan | 查询时指定,索引扫描时使用。 | 可选值为"off"或"relaxed_order"。若设置为"relaxed_order",在查询时,会扩大索引扫描的范围,获得更高的召回率,自然也会消耗更多的时间。 |
ivfflat.max_probes | 查询时指定,索引扫描时使用。 | 最小值为 1,最大值为 32768,默认值为 32768。ivfflat.iterative_scan 设置为"relaxed_order"时生效,在本次索引扫描过程中,搜索的最大列表数目为 max(ivfflat.probes, ivfflat.max_probes)。 |
参数 | 何时使用 | 含义 |
m | 创建索引时指定,insert 时使用。 | 表示每个点需要与图中其他的点建立的连接数。m 的最小值为 2,最大值为 100,默认值为 16。通常 m 越大召回率越高,同时内存消耗越大;m 值越小,构建时间就越短。 |
ef_construction | 创建索引时指定,insert 时使用。 | 表示构建索引时动态候选集合的大小。ef_construction 的最小值为 4,最大值为 1000,默认值为 64。ef_construction 必须大于 m,通常设置为 m 值的 2 倍。对于聚集性数据而言,通常 ef_construction 取较大值时效果更佳。ef_construction 的值越大,索引构建速度越慢。 |
hnsw.ef_search | 查询时指定,索引扫描时使用。 | 该参数为查询时参数,用于限制返回的最大记录数和准确性。hnsw.ef_search 的最小值为 1,最大值为 1000,默认值为 40。例如,将 hnsw.ef_search 值设置为 40,则查询将只能返回 40 行,即使您尝试查询 100 个最近邻的记录。 通常 hnsw.ef_search 越大搜索准确度越高,同时消耗的时间越长。 |
hnsw.iterative_scan | 查询时指定,索引扫描时使用。 | 可选值为"off"、"relaxed_order"或"strict_order"。若设置为"relaxed_order"或"strict_order",在查询时,会扩大索引扫描的范围,获得更高的召回率,自然也会消耗更多的时间。 |
hnsw.max_scan_tuples | 查询时指定,索引扫描时使用。 | 最小值为 1,默认值为 20000,限制扩大索引扫描时访问的最大 tuple 数量。 |
hnsw.scan_mem_multiplier | 查询时指定,索引扫描时使用。 | 最小值为 1,最大值为 1000,默认值为 1,设置扩大索引扫描时的使用的内存为 work_mem 的倍数。 |
参数 | 含义 |
max_parallel_workers | 设置系统的最大并行进程数量,默认值为 8。 |
max_parallel_maintenance_workers | 设置单一工具性命令(例如 CREATE INDEX)的最大并行进程数。 |
maintenance_work_mem | 指定在维护性操作(例如 VACUUM、CREATE INDEX)中使用的最大的内存量。 |
转换类型 | 使用示例 |
将 vector 转换为 vector | |
将 vector 转换为 real[ ] | |
将 real[ ] 转换为 vector | |
将 int4[ ] 转换为 vector | |
将 double precision[ ] 转换为 vector | |
将 numeric[ ] 转换为 vector | |
测试参数 | |
测试并发数 | 6/16 |
测试线程数 | 1/4 |
测试时间 | 60s |
PostgreSQL实例规格 | 单 AZ 一主一备 32C64G |
客户端规格 | 32vCPU128GiB 极速型 SSD PL0 40 GiB |
测试步骤 | 语句 |
创建插件 | |
创建表和索引 | |
创建函数,生成指定维度的 embedding 数据 | |
导入 10 万条数据 | |
pg_bench 压测 sql 语句:vtest.sql | |
pgbench 执行 | |
导入 20 万条数据 | |
导入 40 万条数据 | |
导入 60 万条数据 | |
导入 80 万条数据 | |
导入 100 万条数据 | |