实例使用的pga内存超出怎么解决

实例使用的pga内存超出怎么解决,第1张

如果实例使用的PGA内存超出了预期,常见的解决方法有以下几种:

1 增大PGA目标比例(PGA_AGGREGATE_TARGET),这样可以分配更多的PGA内存。

2 优化SQL语句,减少需要占用大量PGA内存的操作。例如,可以尽可能地使用索引来减少排序和哈希操作,或者使用更高效的查询方式。

3 调整SORT_AREA_SIZE参数,控制排序操作使用的PGA内存。

4 调整HASH_AREA_SIZE参数,控制哈希操作使用的PGA内存。

5 增大临时表空间(TEMP tablespace),这样可以将一些需要临时存储的数据写入到磁盘上,减少占用PGA内存的压力。

6 调整PGA_AGGREGATE_LIMIT参数,限制PGA内存的使用。这个参数需要谨慎设置,因为过小的限制可能会导致性能降低。

7 根据实际情况调整SGA内存和PGA内存的比例,以达到更好的性能表现。

Linux 进程通过 C 标准库中的内存分配函数 malloc 向系统申请内存,但是到真正与内核交互之间,其实还隔了一层,即内存分配管理器(memory allocator)。常见的内存分配器包括:ptmalloc(Glibc)、tcmalloc(Google)、jemalloc(FreeBSD)。MySQL 默认使用的是 glibc 的 ptmalloc 作为内存分配器。

内存分配器采用的是内存池的管理方式,处在用户程序层和内核层之间,它响应用户的分配请求,向操作系统申请内存,然后将其返回给用户程序。

为了保持高效的分配,分配器通常会预先向操作系统申请一块内存,当用户程序申请和释放内存的时候,分配器会将这些内存管理起来,并通过一些算法策略来判断是否将其返回给操作系统。这样做的最大好处就是可以避免用户程序频繁的调用系统来进行内存分配,使用户程序在内存使用上更加高效快捷。

关于 ptmalloc 的内存分配原理,个人也不是非常了解,这里就不班门弄斧了,有兴趣的同学可以去看下华庭的《glibc 内存管理 ptmalloc 源代码分析》文末链接。

关于如何选择这三种内存分配器,网上资料大多都是推荐摒弃 glibc 原生的 ptmalloc,而改用 jemalloc 或者 tcmalloc 作为默认分配器。因为 ptmalloc 的主要问题其实是内存浪费、内存碎片、以及加锁导致的性能问题,而 jemalloc 与 tcmalloc 对于内存碎片、多线程处理优化的更好。

目前 jemalloc 应用于 Firefox、FaceBook 等,并且是 MariaDB、Redis、Tengine 默认推荐的内存分配器,而 tcmalloc 则应用于 WebKit、Chrome 等。

尝试缩小你这些限制

最大虚拟内存设为512-1024

物理内存设置到128-256

我服务器几十个站,都这样设置,运行非常良好

当然SQL里也有个设置内存使用情况的,如果你站不是经常频繁使用数据库,那就是说限制到60-100M内存吧

我这里被使用的数据库超过2G了 内存限制也只到80MB而已

CPU方面不做限制

DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
网站模板库 » 实例使用的pga内存超出怎么解决

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情