#系统资源调优

实例调优的目的是减少执行所需的资源消耗以及运行时间,提高特定资源的利用率。通常情况下,实例级性能问题都是因为某些资源的过度使用而导致这些资源成了系统中的瓶颈。

经过分析诊断后,用户可能发现很多时候性能问题的根因来自于系统的资源能力,或者通过提升系统资源能力就可以很好地解决某些性能问题。数据库性能与操作系统的资源配置息息相关,例如内存、I/O、网络等。针对这些资源的调优,对提升数据库性能有很大的帮助。

# I/O性能调优

I/O性能对数据库性能至关重要,例如redo数据刷盘、脏块刷盘都直接依赖底层磁盘的I/O性能。在部署数据库时,应当选择满足I/O性能要求的介质作为数据库底层的存储。

通常情况下,磁盘的I/O性能评价指标主要包括以下几个方面:

  • 吞吐量:每秒的I/O请求大小
  • IOPS:每秒的I/O请求数
  • 响应时间:I/O请求从发出到收到响应的时间间隔
  • 使用率:磁盘处理I/O的时间百分比

Note

上述I/O性能评价指标均可以通过I/O工具(例如IOSTAT)获取。

由于数据库的I/O模型有自身明确的特征,用户需要进一步依据这些特征来判断磁盘是否满足数据库应用要求,主要考虑以下几个方面:

  • 离散I/O的能力:数据块的读取和刷盘都是离散I/O,如果磁盘离散I/O性能差将严重影响数据库的性能。
  • 不同I/O大小的能力:YashanDB的默认数据块大小为8K,redo的I/O大小一般为1M,其它如归档、备份等均有不同的I/O大小设置。
  • I/O并行能力:数据库I/O模型为读写混合模型,因此对磁盘的混合I/O能力要求较高。

建议用户在部署数据库之前,通过I/O测试工具(例如FIO)对这些场景的I/O进行验证,以保证数据库运行过程中不会出现明显的I/O瓶颈。

当数据库在运行过程中出现明显的I/O瓶颈,且并无提升资源能力的计划时,需要考虑进行I/O性能调优,一些典型的措施列举如下:

  • redo文件和DATA文件分盘部署,以减少I/O竞争。
  • 通过DATAFILE_IO_MODE和REDOFILE_IO_MODE改变数据库I/O行为,以满足运行的环境。
  • 调整DBWR系列参数,以提升I/O效率。
  • 增大VM BUFFER,以减少SWAP。

# CPU性能调优

CPU的性能同样会影响数据库的性能表现。在部署数据库时,一般情况下用户需要关注以下可能影响数据库性能的CPU指标:

  • CPU核数:决定了系统的并发处理能力,同样也决定了数据库的并发处理能力,同时还需要考虑系统中其他应用的并行。
  • CPU主频:决定了CPU的执行能力,同样也将影响数据库的执行能力。
  • CACHE:YashanDB内部有很多针对CACHE的优化机制,因此较大的CACHE可以带来很好的性能收益。
  • NUMA:跨NUMA节点访问内存的延迟很高,对数据库这种访存模型很不友好,因此建议尽量避免出现较多的NUMA节点。

Note

  • 上述CPU性能评价指标均可以通过lscpu等操作系统工具获取。
  • 建议数据库并行处理数一般不超过CPU核数的2倍以上,否则频繁的上下文切换将严重影响数据库的性能。

当数据库在运行过程中出现CPU瓶颈(例如系统LOAD过高)时,通常需要考虑以下几个方面的优化:

  • 数据库应用优化:对SQL进行调优,选择更好的执行计划,降低资源开销。
  • 数据库限流:通过改变线程池的配置,对数据库进行流程控制。
  • 其他应用优化:CPU属于公共资源,因此需要考虑对除了数据库之外的应用进行优化。
  • 硬件升级:如果当前硬件满足不了应用诉求,需要考虑对硬件进行升级。

# 内存性能调优

内存是数据库重要的运行资源之一,需要考虑以下几个方面的优化:

  • 内存大小:为数据库配置合理的内存大小,例如DATA BUFFER POOL,这些内存对数据库整体性能至关重要。
  • 内存SWAP:建议关闭SWAP区,防止内存SWAP造成的性能抖动,YashanDB提供了使用操作系统大页内存的方式,可以通过大页消除SWAP的带来的性能抖动。
  • 防止OOM:建议将系统内存申请的over_commit关闭,防止数据库运行过程中出现意外的OOM。

在诊断内存问题时,用户还可以借助一些系统工具,例如虚拟内存管理带来的Page Fault会严重影响数据库的访存效率,如果发现数据库有过多的Page Fault,那么就应该及时对内存进行优化。

pdf-btn 下载文档
copy-btn 复制链接