数据仓库服务 GAUSSDB(DWS)-GaussDB(DWS) 3.0 存算分离使用建议及性能优化:关于磁盘缓存

时间:2024-11-08 17:19:31

关于磁盘缓存

DWS会把经常访问的数据缓存到EVS本地磁盘,以减少OBS直读次数,加速查询性能。磁盘缓存只在DN计算节点上存在,协调节点CN上不存在。

缓存大小

集群默认的缓存大小(disk_cache_max_size)配置为:EVS容量的1/3。

EVS容量默认划分是:1/3 * 2(副本)存储本地持久化的数据(如:列存索引,行存表,本地列存表),另外1/3给缓存用。DWS的索引不同于Redshift,Redshift索引只是一个优化器提示,没有实体的索引数据,DWS的索引类似Oracle,会实际存储索引数据。

如果列存表没有创建索引,则可适当调大缓存的大小,即通过DWS管理控制台调大disk_cache_max_size

缓存状态

用户查询数据时,会优先到Disk Cache中查看数据是否已存在于本地磁盘,如果不存在则再去OBS读取数据,同时将数据缓存到本地磁盘,下次再读取这段数据时,即可在本地磁盘中读取到。使用Disk Cache可显著提升OBS数据的查询速度。

Disk Cache会默认使用主备两块硬盘作为缓存介质,通过查询以下参数查看相关信息:

通过查询视图pgxc_disk_cache_all_stats可以查看当前缓存的命中率以及各个DN磁盘的使用大小情况:

图2 pgxc_disk_cache_all_stats查询结果

缓存双写

开启缓存双写可以提升首次查询数据的性能,即用户在写数据到远端OBS的同时,将数据也写到本地Disk Cache上。当第一次读取数据时,可显著提升读取效率。用户可通过disk_cache_dual_write_option来设置是否开启缓存双写,参数包含三个设置选项:

  • none:表示不开启缓存双写。
  • hstore_only(默认值):表示只对hstore opt表,在delta merge时才开启缓存双写。
  • all:表示对普通v3表和hstore opt表都开启缓存双写。

缓存清理

通过函数pgxc_clear_disk_cache()可以将所有的Disk Cache清空

集群空间不足与磁盘缓存空间调整

当集群出现资源容量不足时,对于Disk Cache中已使用了较大空间的集群来说,可通过缩小其空间来释放集群的磁盘空间,从而缓解资源不足状态;

通过调整disk_cache_max_size参数缩小Disk Cache的实际使用空间缓解集群空间不足:

具体示例如下,假设磁盘总容量为1000GB, disk_cache_max_size大小为500GB,通过视图pgxc_disk_cache_all_stats查询到实际占用450GB; 磁盘空间的总占用大小为900GB触发了资源剩余容量不足ThresholdReadRisk问题,在没有可清理的列存2.0表和索引资源的情况下,可将disk_cache_max_size的大小调整为300GB或者更小的数值来缓解空间不足问题,缺点是缩小Disk Cache可用规模后可能带来查询性能下降。

磁盘使用率告警判断如下:

  • 容量预警:磁盘空间占用或者文件描述符使用超过ThresholdReadOnly(默认80%);日志中会出现“Disk usage on the node %u has reached the risky threshold 80%”;
  • 容量不足:磁盘空间占用或者文件描述符使用超过ThresholdReadRisk(默认90%),触发集群只读;日志中会出现"Disk usage on the node %u has reached the read-only threshold 90%";
  • 容量严重不足:磁盘空间占用或者文件描述符使用超过ThresholdReadDanger(默认95%),会终止DN备实例和DN从备实例,重启DN主实例;日志中会出现"Disk usage on the node %u has reached the dangerous threshold 95%";
support.huaweicloud.com/bestpractice-dws/dws_05_0027.html