更新时间:2024-11-12 GMT+08:00
分享

优化器开销常量

介绍优化器开销常量。这里描述的开销可以按照任意标准度量。只关心其相对值,因此以相同的系数缩放它们将不会对优化器的选择产生任何影响。缺省时,以抓取顺序页的开销为基本单位。也就是说将seq_page_cost设为1.0,同时其他开销参数以该参数为基准设置。也可以使用其他基准,比如以毫秒计的实际执行时间。

seq_page_cost

参数说明设置优化器计算一次顺序磁盘页面抓取的开销。

参数类型:浮点型

参数单位:

取值范围0 ~ DBL_MAX

默认值1

设置方式该参数属于USERSET类型参数,请参考表1中对应设置方法进行设置。

设置建议:推荐使用默认值。

设置不当的风险与影响:该参数影响一次查询中对顺序抓取磁盘页面的性能开销评估,错误地设置该参数会影响优化器对生成计划的选择,部分场景下影响查询性能。若要更改,请谨慎操作,避免因误操作产生意料之外的风险。

random_page_cost

参数说明设置优化器计算一次非顺序抓取磁盘页面的开销。

参数类型:浮点型

参数单位:

取值范围0 ~ DBL_MAX

默认值4

设置方式:该参数属于USERSET类型参数,请参考表1中对应设置方法进行设置。

设置建议:参见说明部分。

设置不当的风险与影响:该参数影响一次查询中对随机抓取磁盘页面的性能开销评估,错误地设置该参数会影响优化器对生成计划的选择,部分场景下影响查询性能。若要更改,请谨慎操作,避免因误操作产生意料之外的风险。

  • 虽然服务器允许将random_page_cost设置的比seq_page_cost小,但是物理上实际不受影响。如果所有数据库都位于随机访问内存中,两者设置为相等很合理。因为在此种情况下,非顺序抓取页并没有副作用。同样,在缓冲率很高的数据库上,应该相对于CPU参数同时降低这两个值,因为获取内存中的页要比通常情况下开销小很多。
  • 对于指定表空间中的表和索引,可以通过设置同名的表空间参数覆盖库级别的该参数值,即表空间级别该参数的优先级高于库级别该参数的优先级。
  • 相对于seq_page_cost,减少这个值将导致系统更倾向于使用索引扫描,而增加这个值使得索引扫描开销比较高。可以通过同时增加或减少这两个值来调整磁盘I/O相对于CPU的开销。

cpu_tuple_cost

参数说明设置优化器计算在一次查询中处理每一行数据的开销。

参数类型:浮点型

参数单位:

取值范围0 ~ DBL_MAX

默认值0.01

设置方式:该参数属于USERSET类型参数,请参考表1中对应设置方法进行设置。

设置建议:推荐使用默认值。

设置不当的风险与影响:该参数影响一次查询中对处理一行数据的性能开销评估,错误地设置该参数会影响优化器对生成计划的选择,部分场景下影响查询性能。若要更改,请谨慎操作,避免因误操作产生意料之外的风险。

cpu_index_tuple_cost

参数说明设置优化器计算在一次索引扫描中处理每条索引的开销。

参数类型:浮点型

参数单位:

取值范围0 ~ DBL_MAX

默认值0.005

设置方式:该参数属于USERSET类型参数,请参考表1中对应设置方法进行设置。

设置建议:推荐使用默认值。

设置不当的风险与影响:该参数影响一次查询中对索引扫描的性能开销评估,错误地设置该参数会影响优化器对生成计划的选择,部分场景下影响查询性能。若要更改,请谨慎操作,避免因误操作产生意料之外的风险。

cpu_operator_cost

参数说明设置优化器计算一次查询中执行一个操作符或函数的开销。

参数类型:浮点型

参数单位:

取值范围0 ~ DBL_MAX

默认值0.0025

设置方式:该参数属于USERSET类型参数,请参考表1中对应设置方法进行设置。

设置建议:推荐使用默认值。

设置不当的风险与影响:该参数影响一次查询中对操作符或函数的性能开销评估,错误地设置该参数会影响优化器对生成计划的选择,部分场景下影响查询性能。若要更改,请谨慎操作,避免因误操作产生意料之外的风险。

effective_cache_size

参数说明设置优化器在一次单一的查询中可用的磁盘缓冲区的有效大小。

设置这个参数,要考虑GaussDB的共享缓冲区以及内核的磁盘缓冲区,还要考虑预计在不同表之间的并发查询数目,因为它们将共享可用的空间。

这个参数对GaussDB实际运行时分配的共享内存大小没有影响,它只用于计划生成阶段的估算。该数值用磁盘页来计算,通常每个页面是8192字节。

参数类型:整型

参数单位:页面(8kB)

取值范围

方式一:设置为不带单位的整数,整数范围为1~2147483647。例如设置为200,表示200个页面,即200*8kB的大小。

方式二:设置为带单位的值,范围为1*8kB ~ 2147483647*8kB。例如设置为200MB,表示200MB的大小。单位仅限于“kB”、“MB”和“GB”。

默认值

独立部署:

CN:2GB(60核CPU/480G内存);1GB(32核CPU/256G内存,16核CPU/128G内存);512MB(8核CPU/64G内存);256MB(4核CPU/32G内存);128MB(4核CPU/16G内存)

DN:70GB(60核CPU/480G内存);38GB(32核CPU/256G内存);20GB(16核CPU/128G内存);8GB(8核CPU/64G内存);4GB(4核CPU/32G内存);2GB(4核CPU/16G内存)

设置方式:该参数属于USERSET类型参数,请参考表1中对应设置方法进行设置。

设置建议:较大的数值使优化器倾向于选择索引扫描,较小的数值使优化器倾向于选择全表扫描。一般情况下,可以设为shared_buffers大小的1/2,较为激进地,可以设为shared_buffers大小的3/4。内存充足的情况下,该值越大性能越优。

设置不当的风险与影响:错误地设置该参数会影响优化器对生成计划的选择,部分场景下影响查询性能。若要更改,请谨慎操作,避免因误操作产生意料之外的风险。

allocate_mem_cost

参数说明设置优化器计算Hash Join创建Hash表开辟内存空间所需的开销,供Hash join估算不准时调优使用。

参数类型:浮点型

参数单位:

取值范围0 ~ DBL_MAX

默认值0

设置方式:该参数属于USERSET类型参数,请参考表1中对应设置方法进行设置。

设置建议:推荐使用默认值,仅在Hash Join估算不准确时调整该参数。

设置不当的风险与影响:错误地设置该参数可能导致Hash Join估算不准确,部分场景下影响查询性能。若要更改,请谨慎操作,避免因误操作产生意料之外的风险。

相关文档