本文为您介绍列存索引 CSI 的参数配置和监控项。
前提条件
内核版本为 TDSQL-C MySQL 版8.0 3.1.20.001及以上。
说明:
针对只读实例而言,符合版本要求的情况下,4核以上的只读实例才可以开启列存索引功能。
参数列表
参数名 | 类型 | 默认值 | 取值范围 | 说明 |
columnstore_enable | boolean | OFF | OFF / ON | 是否开启列式存储。 ON:开启。 OFF:关闭。 |
columnstore_enable_query_execution | boolean | OFF | OFF / ON | 是否开启列式计算。 ON:开启。 OFF:关闭。 |
columnstore_enable_proxy_forward | boolean | OFF | OFF / ON | 数据库代理自动分流大查询到列存节点(业务接入数据库代理)。 ON:开启。 OFF:关闭。 |
columnstore_cost_threshold | numeric | 100000 | 0 - 1.7976931348623157e308 | 大查询的阈值。 |
columnstore_prm_memory_pool_size | integer | 1GB | 1MB - 100GB | 行列转换缓存(内存)。 |
columnstore_buffer_pool_size | integer | 1GB | 1MB - 16EB | 列式数据缓存(内存)。 |
columnstore_ap_buffer_limit | integer | 10GB | 1GB - ≈16EB | 列式计算缓存(内存)。 |
columnstore_local_disk_usage_limit | integer | 1TB | 1MB - 1PB | 列式数据缓存(磁盘)。 |
columnstore_ap_max_temp_directory_size | integer | 0 | 0 - ≈16EB | 列式计算缓存(磁盘)。 |
说明:
当前列式计算只支持列式存储,还不支持直接从行存读数据。
行列分流参数设置
数据库代理模式(通过数据库代理转发查询到列存 RO 节点):开启数据库代理后,在数据库代理模式下支持负载均衡和跨节点行列分流,列存节点在数据库代理中注册为列存 RO。
直连模式(直连列存 RO 节点):直连列存节点时会在节点内行列分流,但是列存节点需要规划足够的行存和列存资源,直连模式不支持故障切换。
参数 | 纯行存 | RW | 行存 RO | 列存 RO | 说明 |
columnstore_enable | OFF | ON | OFF | ON | 允许列存管理数据(RW 只维护元数据)。 |
columnstore_enable_query_execution | OFF | OFF | OFF | ON | 允许列存执行 SQL。 |
columnstore_enable_proxy_forward | OFF | ON | ON | ON | 节点参与数据库代理分流。 |
节点资源参数设置
全局资源参数在 RW 上自动忽略,在 RO 上受列存存储和计算开关控制,关闭时无资源开销。设置参考如下:
# 全局参数 (RW 忽略)columnstore_buffer_pool_size = <MEM*0.3>columnstore_ap_buffer_limit = <MEM*0.1>columnstore_prm_memory_pool_size = <MEM*0.02>columnstore_local_disk_usage_limit = <MEM*3>columnstore_ap_max_temp_directory_size = <MEM>
行存节点默认配置
行存节点关闭列式存储和计算,不识别大查询,也不参与转发。设置参考如下:
# 纯行存模式columnstore_enable = OFFcolumnstore_enable_query_execution = OFFcolumnstore_enable_proxy_forward = OFF# 行存资源参数innodb_buffer_pool_size = <MEM*0.75>
RW 节点配置(开启列存,参与行列分流)
RW 节点开启列式存储,但只维护元数据,不存储列式数据。RW 参与行列分流,识别并转发大查询到列存节点执行。设置参考如下:
# 列存 RW 参数columnstore_enable = ONcolumnstore_enable_query_execution = OFFcolumnstore_enable_proxy_forward = ON# 行存资源参数innodb_buffer_pool_size = <MEM*0.75># 全局参数 (RW 忽略)columnstore_buffer_pool_size = <MEM*0.3>columnstore_ap_buffer_limit = <MEM*0.1>columnstore_prm_memory_pool_size = <MEM*0.02>columnstore_local_disk_usage_limit = <MEM*3>columnstore_ap_max_temp_directory_size = <MEM>
行存 RO(参与行列分流)
行存 RO 节点不规划资源在列存存储和执行上,但是参与行列分流,识别并转发大查询到列存节点执行。设置参考如下:
# 行存 RO 参与行列分流columnstore_enable = OFFcolumnstore_enable_query_execution = OFFcolumnstore_enable_proxy_forward = ON# 行存资源参数innodb_buffer_pool_size = <MEM*0.75>
列存 RO 节点路由配置(列式执行 SQL)
列存 RO 分配资源到存储和计算,接收转发或直连的大查询。缓存需要根据节点规格按比例设置。
注意:
在行存节点上,默认 innodb buffer pool 为节点内存的75%,在列存节点上,这75%应由列存和行存分享。
# 列存 RO 参数columnstore_enable = ONcolumnstore_enable_query_execution = ONcolumnstore_enable_proxy_forward = ON# 行存资源调整,需要划一部分给列存innodb_buffer_pool_size = <MEM*0.3># 全局参数 (列存 RO 有效)columnstore_buffer_pool_size = <MEM*0.3>columnstore_ap_buffer_limit = <MEM*0.1>columnstore_prm_memory_pool_size = <MEM*0.02>columnstore_local_disk_usage_limit = <MEM*3>columnstore_ap_max_temp_directory_size = <MEM>
列存索引 CSI 监控项
中文指标名 | 英文指标名 | 单位 | 聚合方式 | 含义 |
列存索引执行语句数 | Innodb_csi_select_pushdown | 个 | SUM | 已执行的列存查询语句数量。 |
列存索引回退语句数 | Innodb_csi_select_fallback | 个 | SUM | 列存索引回退语句数量。 |
列存索引同步延时 | innodb_csi_lag_seconds | 秒 | MAX | rw 与 CSI 实例同步延时。 |
列索引存储使用量 | Innodb_csi_disk_usage | GB | MAX | 列索引存储使用量。 |
创建 CSI 失败数 | txsql_csi_fail | 个 | SUM | 创建列存索引失败个数。 |