本文介绍了使用列存索引过程中可能遇见的问题及解决方案。
创建列存索引时提示:ERROR: access method "csi" does not exist
需要创建polar_csi插件,请执行以下指令。
CREATE EXTENSION polar_csi;创建列存索引较慢
可通过设置不同参数来加快索引创建速度,详情请参见提升索引创建速度。
创建列存索引过程阻塞原表写入
最新写入的数据无法在列存索引中被检索
开启强一致性功能后查询变慢
查询无法使用列存索引
请按如下步骤检查:
请根据您的PolarDB PostgreSQL版版本确认是否开启了列存索引:
高版本可支持添加列存索引的只读节点,也可直接使用。
PostgreSQL 16(2.0.16.9.8.0及以上)或PostgreSQL 14(2.0.14.17.35.0及以上)
当前版本下的PolarDB PostgreSQL版集群,支持两种开启方式,具体差异如下,请按需选择:
对比项
【推荐】添加列存索引只读节点
直接使用预安装的列存索引插件
操作方式
通过控制台实现可视化操作,手动添加列存索引节点。
无需任何操作,即可直接使用。
资源分配
列存引擎独占所有资源,能够充分利用所有内存。
列存引擎只能使用25%的内存,其余内存则分配给行存引擎使用。
业务影响
TP(事务)与AP(分析)业务在不同节点上相互隔离,互不影响。
TP(事务)与AP(分析)业务在同一节点,会互相影响。
费用
需额外收取列存索引只读节点的费用,按照普通计算节点收费。
无费用。
添加列存索引只读节点
您可选择以下两种方式中任意一种方式添加列存索引只读节点:
说明集群中应包含一个只读节点,即单节点集群不支持添加列存索引只读节点。
控制台添加
-
登录PolarDB控制台,选择集群所在地域。您可以按照如下两种方式中的任意一种进入增删节点向导页面:
-
在集群列表页面,单击操作栏的增删节点。
-
在目标集群的基本信息页面,数据库节点区域,单击增删节点。
-
-
选择增加列存索引只读节点选项,并单击确定。
-
在集群变配页面,添加列存索引只读节点并支付。
-
单击增加一个列存索引只读节点,选择节点规格。
-
选择切换时间。
-
(可选)查看产品服务协议、服务等级协议。
-
单击立即购买。
-
-
支付完成后,返回集群详情页等待列存索引只读节点添加成功,即节点状态为运行中。
购买时添加
在PolarDB购买页的节点个数配置项中自行选择列存索引只读节点数量。
-
低版本需安装列存索引插件。
PostgreSQL 16(2.0.16.8.3.0~2.0.16.9.8.0)或PostgreSQL 14(2.0.14.10.20.0~2.0.14.17.35.0)
当前版本下的PolarDB PostgreSQL版集群,列存索引作为插件
polar_csi部署在数据库集群中,在使用之前需要在指定的数据库中创建插件。说明-
polar_csi插件的作用域是Database级别,如果需要在集群的多个Database中使用列存索引,需要为每个Database分别创建polar_csi插件。 -
安装插件使用的数据库账号必须为高权限账号。
您可以选择以下两种方式中的任意一种安装
polar_csi插件。控制台安装
-
登录PolarDB控制台,在左侧导航栏单击集群列表,选择集群所在地域,并单击目标集群ID进入集群详情页。
-
在左侧导航栏选择配置与管理 > 插件管理,在管理插件页签,选中未安装插件。
-
在页面右上角选择目标数据库,单击
polar_csi插件操作列安装,在弹出的安装插件对话框,选择目标数据库账号,单击确定,即将插件安装到目标数据库中。
命令行安装
连接数据库集群,并在具有相应权限的目标数据库中执行以下语句,创建
polar_csi插件。CREATE EXTENSION polar_csi;-
确认表是否创建列存索引,详情请参见开启和使用列存索引。
确认查询语句所涉及的列是否都在加速索引中。例如,使用
CREATE INDEX csi_idx_t ON t USING CSI(id,name);创建索引,使用SELECT id,name,age FROM t;查询时无法使用列存索引,这是因为查询语句中age字段并未包含在列存索引中。确认是否开启列存索引,通过
SHOW polar_csi.enable_query来确认,当结果为off时,表示该SQL语句无法使用列存索引,开启列存索引功能请参见开启和使用列存索引。确认查询语句的执行代价是否较小。当查询语句较为简单时,使用行存引擎效率更高。可通过Explain或Explain Analyze等工具打印查询计划,确认语句的查询代价,若需要忽略查询代价,强制查询语句使用列存索引,可将
polar_csi.cost_threshold值设为0,其他注意事项请参见开启和使用列存索引。如果还无法使用列存索引加速,可执行
SET client_min_messages = debug5进一步排查。
与PolarDB ePQ的关系
PolarDB PostgreSQL版的ePQ是基于云原生一写多读架构下,为了充分利用所有RO节点的计算资源而研发的跨机并行能力。ePQ能够将一个查询语句分发到所有的RO节点执行,而原生PostgreSQL的并行能力只能使用一个节点的计算资源,因此PolarDB PostgreSQL版的ePQ比原生PostgreSQL具有更好的scale out能力。
PolarDB PostgreSQL版的列存索引与ePQ并非同一种技术,列存索引的目标是在同样的硬件资源下提升计算效率,而ePQ的目标是能充分利用数据库集群的所有资源,二者相互补充。