《DB2性能管理与实战》——2.2 共享内存与私有内存

简介:

本节书摘来自异步社区出版社《DB2性能管理与实战》一书中的第2章,第2.2节,作者: IBM中国开发中心(CDL) 信息管理软件开发部,更多章节内容可以访问云栖社区“异步社区”公众号查看。

2.2 共享内存与私有内存

DB2性能管理与实战
至此,已经讨论了实例共享内存、数据库共享内存和应用程序组共享内存以及代理私有内存。但是共享内存和私有内存的意义是什么呢?

为了理解共享内存与私有内存之间的不同之处,首先通过快速阅读DB2进程模型来了解一下DB2代理进程。在DB2中,所有数据库请求都是由DB2代理或子代理来服务的。例如,当一个应用程序连接到一个数据库时,就有一个DB2代理指派给它。当该应用程序发出任何数据库请求(例如一个SQL查询)时,该代理就会执行完成这个查询所需的所有任务——它代表该应用程序工作(如果数据库是分区的,或者启用了INTRA_PARALLEL,那么可以分配不止一个的代理来代表应用程序工作,这些代理叫做子代理)。

每个代理或子代理都被当作一个DB2进程,它获得一定数量的内存来执行工作。这种内存被称作 代理私有内存——它不能与其他任何代理共享。之前曾提到过,代理私有内存包括一些内存池,例如应用程序堆大小、排序堆大小和语句堆大小(见图2-5)。

除了私有内存(代理在其中使用排序堆执行“私有”任务,例如私有排序)外,代理还需要数据库级的资源,例如缓冲池、LOCKLIST和日志缓冲区。这些资源在数据库共享内存中(见图2-5)。DB2的工作方式是数据库共享内存中的所有资源都由连接到相同数据库的所有代理或子代理共享。因此,该内存集被称作共享内存,而不是私有内存。例如,连接到数据库A的代理x使用数据库A的数据库共享内存中的资源。现在又有一个代理,即代理y也连接到数据库A。那么代理y将与代理x共享数据库A的数据库内存(当然,代理x和代理y都有其自己的代理私有内存,这些代理私有内存不是共享的)。

这样的逻辑同样适用于实例共享内存和应用程序组共享内存。

图2-5所示为了当两个DB2代理(代理x和代理y)连接到数据库A时分配的DB2内存集。假设:

boll 数据库A属于实例db2inst1;

boll 数据库A为应用程序组1启用了INTRA_PARALLEL;

boll 代理x和代理y都属于应用程序组1。

image

boll 用于实例db2inst1的实例共享内存集。

boll 用于数据库A的数据库共享内存集。

boll 用于应用程序组1的应用程序组共享内存。

boll 用于代理x的代理私有内存集。

boll 用于代理y的代理私有内存集。

boll 为内核和库之类的东西预留的内存。

代理x和代理y共享相同的实例内存、数据库内存和应用程序组内存,因为它们属于相同的实例、相同的数据库和相同的应用程序组。此外,它们有其自己的代理私有内存。

每个DB2代理进程都有其自己的内存地址空间。在内存空间中的内存地址允许代理访问物理RAM中的内存。可以把这些地址看作指向RAM的指针,如图2-5所示。对于任何DB2进程,这个地址空间必须能够容纳上述所有4种内存集。

本文仅用于学习和交流目的,不代表异步社区观点。非商业转载请注明作译者、出处,并保留本文的原始链接。

目录
相关文章
|
存储 缓存 监控
Docker容器性能调优的关键技巧,涵盖CPU、内存、网络及磁盘I/O的优化策略,结合实战案例,旨在帮助读者有效提升Docker容器的性能与稳定性。
本文介绍了Docker容器性能调优的关键技巧,涵盖CPU、内存、网络及磁盘I/O的优化策略,结合实战案例,旨在帮助读者有效提升Docker容器的性能与稳定性。
1598 8
|
存储 监控 算法
JVM调优深度剖析:内存模型、垃圾收集、工具与实战
【10月更文挑战第9天】在Java开发领域,Java虚拟机(JVM)的性能调优是构建高性能、高并发系统不可或缺的一部分。作为一名资深架构师,深入理解JVM的内存模型、垃圾收集机制、调优工具及其实现原理,对于提升系统的整体性能和稳定性至关重要。本文将深入探讨这些内容,并提供针对单机几十万并发系统的JVM调优策略和Java代码示例。
622 2
|
算法 Java Python
【Python 的内存管理机制专栏】Python 内存管理实战:性能优化与内存泄漏检测
【5月更文挑战第18天】Python内存管理关乎程序性能与稳定性。优化包括避免过多临时对象,如优化列表推导式减少对象创建。警惕循环引用造成的内存泄漏,如示例中的Node类。使用`gc`模块检测泄漏,通过`gc.set_debug(gc.DEBUG_LEAK)`和`gc.collect()`获取信息。实践中需持续分析内存使用,优化算法、数据结构和资源释放,以提升程序质量与效率。
407 9
【Python 的内存管理机制专栏】Python 内存管理实战:性能优化与内存泄漏检测
|
NoSQL Java 测试技术
Golang内存分析工具gctrace和pprof实战
文章详细介绍了Golang的两个内存分析工具gctrace和pprof的使用方法,通过实例分析展示了如何通过gctrace跟踪GC的不同阶段耗时与内存量对比,以及如何使用pprof进行内存分析和调优。
856 0
Golang内存分析工具gctrace和pprof实战
|
存储 安全 Java
SpringSecurity6从入门到实战之初始用户如何存储到内存
Spring Security 在 SpringBoot 应用中默认使用 `UserDetailsServiceAutoConfiguration` 类将用户信息存储到内存中。当classpath有`AuthenticationManager`、存在`ObjectPostProcessor`实例且无特定安全bean时,此配置生效。`inMemoryUserDetailsManager()`方法创建内存用户,通过`UserDetails`对象填充`InMemoryUserDetailsManager`的内部map。若要持久化到数据库,需自定义`UserDetailsService`接口实
|
算法 Java 开发者
Java面试题:Java内存探秘与多线程并发实战,Java内存模型及分区:理解Java堆、栈、方法区等内存区域的作用,垃圾收集机制:掌握常见的垃圾收集算法及其优缺点
Java面试题:Java内存探秘与多线程并发实战,Java内存模型及分区:理解Java堆、栈、方法区等内存区域的作用,垃圾收集机制:掌握常见的垃圾收集算法及其优缺点
281 0
|
安全 Java 调度
Java面试题:Java内存优化、多线程安全与并发框架实战,如何在Java应用中实现内存优化?在多线程环境下,如何保证数据的线程安全?使用Java并发工具包中的哪些工具可以帮助解决并发问题?
Java面试题:Java内存优化、多线程安全与并发框架实战,如何在Java应用中实现内存优化?在多线程环境下,如何保证数据的线程安全?使用Java并发工具包中的哪些工具可以帮助解决并发问题?
282 0
|
Arthas 监控 Java
JVM工作原理与实战(三十一):诊断内存泄漏的原因
JVM作为Java程序的运行环境,其负责解释和执行字节码,管理内存,确保安全,支持多线程和提供性能监控工具,以及确保程序的跨平台运行。本文主要介绍了诊断内存溢出的原因、MAT内存泄漏检测的原理等内容。
773 0
|
存储 Arthas 监控
JVM工作原理与实战(三十):堆内存状况的对比分析
JVM作为Java程序的运行环境,其负责解释和执行字节码,管理内存,确保安全,支持多线程和提供性能监控工具,以及确保程序的跨平台运行。本文主要介绍了堆内存状况的对比分析、产生内存溢出的原因等内容。
585 0
|
Arthas Prometheus 监控
JVM工作原理与实战(二十九):监控内存泄漏的工具
JVM作为Java程序的运行环境,其负责解释和执行字节码,管理内存,确保安全,支持多线程和提供性能监控工具,以及确保程序的跨平台运行。本文主要介绍了解决内存溢出的步骤、Top命令、VisualVM、Arthas、Prometheus + Grafana等内容。
1315 0