KingbaseES配置系统全局区内存
关键字:
数据库实例、内存管理、内存配置、人大金仓、KingbaseES
一、摘要
本文对KingbaseES配置系统全局区内存进行了介绍。
内存结构
KingbaseES数据库中,相关的基本内存结构包括:
系统全局区(简写为SGA):SGA是一组共享内存结构,其中包含一个KingbaseES数据库实例的数据和控制信息。SGA由所有服务器和后台进程共享。存储在SGA中的数据包括数据块缓冲区和重做日志缓冲区等。
进程全局区(简写为PGA):PGA是包含单个服务进程的数据和控制信息的内存区域。它是在启动服务进程时创建的非共享内存。只有该服务进程可以对本PGA进行访问。每个服务进程都有一个PGA,每个后台进程也会有自己的PGA。一个实例中所有PGA的总和称为实例PGA。存储在PGA中的数据包括排序和哈希操作可使用的工作内存等。。
配置系统全局区内存
系统全局区的内存配置包括数据页面缓存、日志页面缓存以及锁缓存的配置。
数据页面缓存
在共享内存中缓存的数据页面的大小,由shared_buffers参数控制其大小。 该参数会影响数据库性能。配置的缓存越大,则在内存中保存的数据页面就越多,这通常会减少磁盘读取和写入的次数,并因此提高性能。然而过大的数据页面缓存也可能会占用过多的系统内存并导致内存分页或交换。
出于IO资源优化的角度,建议将 hared_buffers配置为操作系统总内存的一半,根据特定需求浮动,但一般不建议设置超过操作系统总内存的80%。
采用以下方式查看数据页面缓存大小:
SHOW shared_buffers;
采用以下方式修改数据页面缓存大小:
ALTER SYSTEM SET shared_buffers = '1GB';
重启数据库后生效。
日志页面缓存
数据库操作产生的重做日志内容会存放在日志页面缓存中,并在需要时由日志写进程和服务进程刷写到磁盘。参数wal_buffer可以设置日志页面缓存大小,。如果每个事务对数据页面修改的数据量较大,占满了日志页面缓存而不得不提前刷写日志,将导致一定的IO资源浪费,此时可以适当增大wal_buffers的值,以降低日志刷写磁盘的频率。由于日志总是需要在事务提交时和检查点刷盘,因此过大的wal_buffers并没有实际意义。
采用以下方式查看日志页面缓存大小:
SHOW wal_buffers;
采用以下方式修改日志页面缓存大小:
ALTER SYSTEM SET wal_buffers = '4MB';
重启数据库后生效。
锁缓存
数据库事务所需的并发控制机制的组成部分之一是锁,而锁的控制信息则存在于系统全局区SGA中。锁缓存的大小由数据库内部决定,不可配置,但是参数max_locks_per_transaction可以影响到锁缓存的大小。参数max_locks_per_transaction代表了每个事务最大可持有的锁数量,缺省为64。参数max_locks_per_transaction越大,锁缓存所占有的空间就越大。
通常锁缓存占用内存在系统中占比不大,不会成为系统的瓶颈,不需要手动配置。




