文档首页 > > 开发指南> 资源负载管理> 优先级调度> I/O优先级调度

I/O优先级调度

分享
更新时间: 2019/11/12 GMT+08:00

背景信息

在导入或者查询场景下,进行导入作业或者复杂查询作业的IO资源控制。

IO资源管理提供两种模式的控制方式,即优先级模式和上限数值模式,它们均可用于Session级别或者用户级别的作业IO资源控制。

IO资源管理的设计如图1所示:

图1 IO资源管理设计图示

IO资源管理通过以下几个维度来进行分析:

  • 只考虑特定语句的作业的IO管控。对于写IO的控制,可以对INSERT INTO SELECT,COPY FROM, CREATE TABLE AS 这几种语句进行控制。对于读IO操作来说,需要根据优化器的评估计算出要扫描的数据量,通常单DN数据量大约超过500MB时就会触发IO控制。VACUUM FULL, “CREATE INDEX”, “CLUSTER TABLE USING INDEX”, “ANALYZE”, “MERGE INTO”作为读写混合的场景,也可以在一定条件下触发IO的控制。
  • 需要用户手动设置GUC参数或者调整资源池来引入IO控制。
  • GUC参数可对session级IO进行控制,包括优先级模式io_priority,和上限数值模式io_limits两种。
  • 可以通过用户关联资源池来实现用户级别的IO控制,需要设置资源池属性io_limits, 或者io_priority.
  • io_limits作为上限模式,控制每秒可以触发的IO请求数量。默认为0,表示不控制。对于行存,以万次每秒为单位,对于列存,以次每秒为单位。
  • 在磁盘使用率达到90以上时,会触发IO优先级模式,优先级通过io_priority 指定。io_priority提供三种优先级,分别是High, Medium, Low,相当于控制作业触发IO比例的80%、50%及20%。默认为None,表示不控制。
    • 对于行存,由于缓冲区策略,读写IO请求并不在真正读写磁盘过程中控制,而是在读写缓冲区过程中控制。io_limits以万次每秒为单位,可设置100左右。对于行存建议使用io_priority进行控制,防止在IO比较宽松的环境下仍然做控制造成IO资源不能得到充分利用。
    • 列存查询和导入的机制跟行存不同,列存的io_limits可以设置100左右,如果设置过大,起不到控制IO的作用。

IO资源管理相关视图

  • pg_session_iostat提供session级IO资源监控
    select * from pg_session_iostat;
  • pg_user_iostat提供user级IO资源监控
    select * from pg_user_iostat('username');
分享:

    相关文档

    相关产品

文档是否有解决您的问题?

提交成功!

非常感谢您的反馈,我们会继续努力做到更好!

反馈提交失败,请稍后再试!

*必选

请至少选择或填写一项反馈信息

字符长度不能超过200

提交反馈 取消

如您有其它疑问,您也可以通过华为云社区问答频道来与我们联系探讨

跳转到云社区