恒美微站
首页
关于我们
建站服务
主题模板
案例展示
资讯中心
联系我们
大表加索引太慢?一文搞懂 KingbaseES 并行查询:原理、参数与实战
首页
资讯中心
/
大表加索引太慢?一文搞懂 KingbaseES 并行查询:原理、参数与实战
大表加索引太慢?一文搞懂 KingbaseES 并行查询:原理、参数与实战
发布时间:2026/10/3 20:37:53
金仓社区精华banjin 的并行查询实战前两天同事问一个表很大要加索引很慢怎么办当时回复可以使用并行啊parallel ( degree 32启用32并行来创建创建完后关闭索引并行在信创国产化替代持续深化的当下金融、政务、能源等关键领域的业务数据量呈爆炸式增长百万级、千万级甚至亿级数据的查询、统计与分析场景日益频繁单线程处理模式已难以满足业务对响应速度的要求刚好也学习一下KingbaseES并行使用数据库并行并行执行是指将一个 SQL 查询任务分成多个子任务并允许这些子任务在多个处理器上同时运行以提高整个查询任务的执行效率。在现代计算机系统中多核处理器、多线程和高速网络连接广泛应用这使得并行执行成为了一种可行的高效率查询技术。并行执行能够极大降低计算密集型大查询的响应时间被广泛应用在离线数据仓库、实时报表、在线大数据分析等业务场景同时还应用在批量导数快速构建索引表等领域通过并行处理可以显著提高大规模数据处理的速度和效率尤其是在处理复杂查询、批量数据更新等场景时。适用与不适用场景适用场景需满足访问数据量大、SQL 并发低、要求低延迟、硬件资源充足多核、大内存、高 IO 带宽、系统负载低通常 30% 以下的条件典型场景包括大表扫描 / 连接 / 排序 / 聚合、大表 DDL、Create Table As Select、批量增删改。不适用场景数据量小、SQL 执行时间 100 毫秒、高并发 OLTP 的普通查询以及系统负载高、硬件资源紧张的环境这类场景下并行调度的开销会抵消性能收益甚至引发负面效果。并行查询原理在优化器评估某个特定查询时若判断并行执行为最优策略则会生成包含Gather或GatherMerge操作节点的查询执行计划在执行计划中Gather节点作为其中一个操作符节点标志着并行处理的开始。当查询执行到达该节点时会话进程将根据配置参数及成本估算申请一定数量的工作线程worker processes。其中一个特定的worker被指定为主工作线程leader worker负责协调和汇总其他worker线程的查询结果。主工作线程不仅承担协调任务还会根据实际数据量参与部分并行处理工作。在并行查询执行中Leader工作线程与其他工作线程通过动态共享内存实现通信机制。在并行查询过程中所有其他worker进程包括主工作线程将各自处理的数据结果写入到共享内存区域中。主工作线程负责从共享内存中读取各worker的处理成果并完成最终结果的汇总操作。关于并行的参数参数名称取值范围描述max_worker_processes0 ~ 218 – 1默认值30设置系统支持的最大后台进程数此参数调整后需要重启数据库生效。max_parallel_workers0 ~ 1024默认值8最大并行worker数。该数值不能大于max_worker_processes。max_parallel_workers_per_gather默认值2最大并行执行worker数。不能超过max_parrellel_workers。max_parallel_maintenance_workers默认值2最大并行维护操作 worker数。不能超过max_parrellel_workers。这4个参数之间的关系为max_parallel_workers_per_gather max_parallel_maintenance_workers max_parallel_workers max_worker_processes上述参数中max_parallel_workers_per_gather是最核心的参数直接控制单个SQL的并行进程数需根据CPU核心数合理调整——若设置过大会导致进程争用反而降低性能若设置过小无法充分利用多核资源。并行触发条件参数min_parallel_table_scan_size0~2G默认值8MB表的存储空间至少大于等于该值才有可能触发并行min_parallel_index_scan_size0~2G默认值512KB索引存储空间至少大于等于该数值才有可能触发并行索引并行查询实战postgresql.conf 配置文件设置参数参数配置完成后并行功能即可自动生效优化器会根据表大小、SQL复杂度、参数设置自动评估是否启用并行执行max_worker_processes 16 max_parallel_workers_per_gather 4 # taken from max_parallel_workers max_parallel_worders 8 parallel_tuple_cost 0.1 parallel_setupcost 1000.0 min_parallel_table_scan_size 8MB min_parallel_index_scan_size 612kb force_parallel_mode off怎么来确认是否启用了并行当执行计划里有parallel关键字和gather算子就说明当前的查询使用了并行查询并行顺序扫描create table test_parallel ( id bigint, name character varying(32), create_time timestamp without time zone default now() ); insert into test_parallel(id, name) select nub, nub || _parallel from generate_series(1, 5000000) nub; explain select * from test_parallel where name 1_parallel;位图索引并行扫描CREATE INDEX test_parallel_name ON test_parallel(name); explain select * from test_parallel where name 1_parallel;并行聚合explain select count(*) from test_parallel;这里简单放了几个例子更多可以参考官网。使用并行 | KingbaseES不走并行的问题排查检查并行参数max_parallel_workers_per_gathermax_parallel_workers_per_gather参数允许启用的并行进程的进程数默认值为 2 设置成 0 表示禁用并行查询这个参数会话级也可以修改查看是不是误改了show max_parallel_workers_per_gather;检查表和索引的大小是多少上面我们讲到过两个触发并行的条件参数min_parallel_table_scan_size、min_parallel_index_scan_size如果查询没有使用到并行需要检查表和索引SELECT sys_size_pretty(sys_relation_size(test_parallel)); SELECT sys_size_pretty(sys_rindex_size(test_parallel));体验总结从实操体验来看KingbaseES并行功能的简洁易配、高性能提升、强兼容性能够极大地降低数据库运维人员的工作负担尤其是对于Oracle迁移项目中的DBA而言可快速衔接原有运维习惯无需重新适应新的操作逻辑有效提升迁移后的运维效率。在多核CPU成为信创服务器标配、数据量持续增长的今天并行使用已成为国产数据库不可或缺的核心功能而KingbaseES的并行特性无疑展现了国产数据库在性能优化上的技术实力也打破了“国产数据库性能不如国外数据库”的偏见。当然KingbaseES的并行使用也存在一些可优化之处例如创建索引时候的并行这个oracle做的比较好还有使用hint来使用并行也不如oracle做的好。不过相信随着KingbaseES的不断发展并行功能将进一步优化智能调整能力、拓展复杂场景支持新增更多个性化、智能化的功能充分释放多核硬件的潜力。