问题一:在PolarDB一个事务中,写入主节点一条语句但未提交,再select一定会发到主节点吗?
问题二:那如果这个select是个费时间的复杂查询,就会占用主节点大量资源,有没有通过什么设置让它走列存呢?
以下为热心网友提供的参考意见
在PolarDB中,如果在一个事务中写入主节点一条语句但未提交,那么select查询可能会发送到主节点。然而,这并非绝对,因为实际的查询路径选择还取决于许多因素,如数据量、查询优化器的逻辑和策略等。
对于你提到的复杂查询占用主节点大量资源的问题,可以通过调整查询优化器的设置来改善。PolarDB的查询优化器会通过优化逻辑计划从而输出物理计划,其主要阶段包含查询改写和计划枚举。此外,PolarDB-X 1.0版本也提供了并行查询加速功能,可以显著提高复杂查询的效率。同时,PolarDB 优化器对主查询和子查询可能分别并行执行,最大Worker数由 max_parallel_degree 的值决定。这些特性都有助于降低复杂查询对主节点资源的占用。
以下为热心网友提供的参考意见
针对问题一的回答:是的。 针对问题二的回答:把他拆到事务外面。此回答整理自钉群“PolarDB专家面对面 – HTAP(列存索引)”
以下为热心网友提供的参考意见
问题一:在PolarDB中,可以通过修改参数enable_columnstore
来启用列存储功能。将该参数设置为ON
即可让查询走列存。此外,还可以通过调整其他参数来优化查询性能,例如增加max_parallelism
参数的值来提高并行度,或者调整query_cache_size
参数来增加查询缓存的大小等。
问题二:是的,可以在控制台中的参数配置里修改loose_imci_optimizer_switch
参数。将其设置为ON
可以开启IMCI优化器,从而更好地利用列存储功能进行查询优化。需要注意的是,修改参数后需要重启数据库实例才能生效。