告别内存乱调参,数据库共享 / 私有内存运维更稳更高效
作者金仓社区banjin一、内存整体架构说明KingbaseE整体内存分为共享内存和会话私有内存两大部分无自动内存适配机制所有内存规格均通过配置文件静态定义是数据库性能稳定的核心调优板块。共享内存为实例全局所有进程共用参数修改后需重启数据库生效私有内存随业务会话动态申请、释放支持会话临时调整无需重启实例。1.1 内存计算规则数据库整机内存占用计算公式数据库总内存 ≈ 共享内存总量 并发私有内存峰值 连接基础内存 运维专用内存生产硬性规范数据库内存总占用不得超过服务器物理内存的80%剩余20%内存预留为操作系统文件缓存杜绝Swap交换分区占用避免整机性能卡顿。1.2 内存层级划分服务器物理内存整体分为两层分别为操作系统内存与数据库实例内存1. 操作系统内存主要用于系统进程、文件缓存、页面缓存由effective_cache_size参数预估统计2. 数据库实例内存包含共享内存数据缓冲区、日志缓冲区、锁缓存和私有内存会话排序、运维操作、临时表缓存。对标Oracle数据库shared_buffers、wal_buffers对应SGA区域work_mem、maintenance_work_mem对应PGA区域。二、共享内存核心参数详解共享内存为实例启动时一次性分配全局所有会话共享核心参数调整必须重启数据库生效是数据库IO性能的决定性参数。2.1 shared_buffers 数据缓冲区该参数是数据库核心内存参数用于缓存数据表、索引的数据块将热点数据常驻内存大幅减少磁盘物理IO。系统默认值为128MB生产环境禁止使用默认配置。生产配置标准独立数据库服务器配置物理内存的25%-40%数据库与中间件混布服务器配置15%-25%最大不超过整机内存40%。性能判定标准数据缓冲区命中率≥99%为健康状态命中率低于95%时需扩容缓冲区或优化低效SQL。常用操作命令查看参数SHOW shared_buffers;修改参数ALTER SYSTEM SET shared_buffers4GB;修改后重启实例生效2.2 wal_buffers 日志缓冲区用于缓存事务WAL重做日志通过批量刷盘减少频繁磁盘IO提升事务提交性能。默认自动适配为shared_buffers的3%支持手动自定义规格。场景化配置高并发OLTP业务配置4MB-64MB批量导入、ETL数据同步场景配置16MB-32MB低负载测试库可沿用默认值。配置禁忌该参数无需配置过大WAL日志事务提交强制落盘超大规格无法提升性能只会浪费共享内存资源。2.3 锁管理共享内存该部分内存为系统隐式分配无独立配置参数主要用于存储行锁、表锁、事务锁等并发控制信息内存大小由两个参数控制max_connections最大连接数、max_locks_per_transaction单事务最大锁数量。生产环境禁止将两个参数配置过大极易导致实例启动内存分配失败常规OLTP业务建议max_locks_per_transaction配置64-128即可。三、私有内存核心参数详解私有内存为单会话独立占用随SQL执行动态申请和释放支持全局配置与单会话临时调整无需重启数据库主要用于排序、关联、索引创建等运算场景。3.1 work_mem 会话运算内存用于单条SQL的排序、哈希关联、去重、子查询运算。内存充足时所有运算在内存完成性能极高内存不足则落地磁盘生成临时文件SQL性能会大幅下降。默认值4MB。核心风险存在并发内存溢出风险单条SQL可包含多个运算算子高并发场景下过大的work_mem会瞬间耗尽整机内存触发OOM故障。场景配置规范高并发OLTP业务2MB-8MB混合业务8MB-16MB低并发OLAP报表业务64MB-256MB。单SQL临时调优仅对当前大查询会话生效不影响全局业务SET work_mem256MB; SELECT 报表查询SQL; RESET work_mem;3.2 maintenance_work_mem 运维操作内存专门用于VACUUM垃圾回收、索引创建、索引重建、表结构修改等数据库运维操作默认64MB。运维任务多为串行执行无并发冲突可适当放大配置。配置标准配置整机物理内存的5%-10%上限不超过2GB。大批量建索引、全库垃圾回收前可临时调高该参数提升效率。3.3 temp_buffers 临时表缓冲区用于缓存会话临时表数据默认8MB。业务频繁使用临时表的场景可调整为32MB-64MB仅当前会话生效全局无需大规格配置。四、辅助内存优化参数4.1 effective_cache_size该参数仅用于数据库优化器代价计算不占用任何物理内存。用于告知优化器整机可用缓存大小数值越高优化器越优先选择索引扫描避免全表扫描。配置规范统一配置为整机物理内存的50%-75%且必须大于shared_buffers大小。4.2 max_connections 最大连接数数据库最大并发连接数单连接会占用5-10MB基础内存。生产环境不建议配置过大需配合应用连接池使用实际业务连接数控制在参数最大值的1/3避免空闲连接占用内存资源。五、生产标准化内存配置模板以下模板为成熟落地配置可直接适配对应业务场景导入kingbase.conf生效。5.1 16G服务器 OLTP高并发业务交易、税务系统# 共享内存重启生效 shared_buffers 4GB wal_buffers 16MB max_connections 500 max_locks_per_transaction 128 # 私有内存 work_mem 4MB maintenance_work_mem 1GB # 辅助参数 effective_cache_size 12GB5.2 32G服务器 OLAP报表业务数仓、统计分析shared_buffers 10GB wal_buffers 32MB max_connections 100 work_mem 128MB maintenance_work_mem 2GB effective_cache_size 24GB5.3 8G服务器 测试/开发环境shared_buffers2GB wal_buffers8MB max_connections200 work_mem2MB maintenance_work_mem512MB effective_cache_size6GB六、日常内存监控手段6.1 数据库内部监控SQL1、查询数据缓冲区命中率SELECT sum(heap_blks_readidx_blks_read) disk_read, sum(heap_blks_hitidx_blks_hit) mem_hit, round(100.0*sum(heap_blks_hitidx_blks_hit)/(sum(heap_blks_hitidx_blks_readheap_blks_read)0.0001),2) hit_ratio FROM sys_statio_user_tables;2、查询内存不足导致磁盘临时文件的低效SQLSELECT queryid,query,temp_blks_read,temp_blks_written,round(temp_blks_written*8/1024.0,2) AS temp_mb FROM sys_stat_statements WHERE temp_blks_written0 ORDER BY temp_blks_written DESC;3、查询当前运行会话SELECT pid,usename,now()-query_start AS run_time,state,query FROM sys_stat_activity;6.2 服务器系统监控命令# 查看整机内存、Swap占用情况 free -h # 统计Kingbase进程总内存占用 ps aux | grep kingbase | awk {sum$6}END{print sum/1024 MB} # 查看数据库共享内存段 ipcs -m # 实时监控进程资源占用 top/htop七、常见内存故障排查方案7.1 数据库启动失败提示无法分配共享内存故障根因共享内存参数配置过大超出系统剩余内存锁参数规格过高系统内核共享内存上限不足。解决方式调小shared_buffers、max_locks_per_transaction参数调整Linux内核shmmax共享内存最大值刷新内核参数生效。7.2 业务SQL执行缓慢大量临时文件生成故障根因work_mem配置过小排序、哈希运算无法在内存完成强制落地磁盘高并发下多算子叠加加剧性能问题。解决方式大查询会话临时调高work_mem优化SQL减少无效排序、全表关联OLTP环境适度微调全局work_mem严控并发峰值。7.3 服务器Swap飙升、整机卡顿故障根因数据库总内存配置超标耗尽物理内存业务并发突增私有内存瞬间溢出触发系统换页。解决方式下调内存参数数据库总内存控制在整机70%以内应用侧收紧连接池限制最大并发连接数。7.4 索引创建、垃圾回收运维操作执行极慢故障根因maintenance_work_mem内存不足运维操作频繁读写临时文件。解决方式运维操作执行前临时调高该参数任务完成后恢复默认配置。
上一篇/下一篇内容由系统自动关联
返回资讯列表 →