详解数据库中的分页、内存和I/O延迟

发表于:2010-12-14 10:37

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:梨园小鹿    来源:51Testing软件测试网采编

  内存和 I/O 缓冲区

  在探索最佳内存设置时,有几个命令很有用,尤其是 vmstat -v。图 2 显示 vmstat -v 的部分输出。

  在内存中有两类页面:持久页面(与文件系统关联)和工作存储或者说动态页面(包含可执行代码及其工作区)。如果偷取持久页面,就不需要换出页 面,除非页面被修改过(在这种情况下,把它写回文件系统)。如果偷取工作存储页面,就必须先把它写到分页数据集,下一次需要它时再从分页数据集读回来;这 是开销很大的操作。

  设置 minperm%=3 和 lru_file_repage=0 意味着,强烈建议 LRUD 在文件系统正在使用超过 3% 的内存的情况下总是尝试偷取持久页面。LRUD 在大多数情况下忽略最大设置,除非是要限制文件系统可以使用的内存量。maxperm% 指所有持久页面,包括日志文件系统 (JFS)、网络文件服务器 (NFS)、Veritas File System (VxFS) 和增强型日志文件系统 (JFS2)。maxclient% 是其中的子集,只包括 NFS 和 JFS2 文件系统。maxperm% 是软限制,maxclient% 是硬限制(而且不能超过 maxperm%)。因为新的文件系统通常是 JFS2,应该把最大设置保持在 90%,以免意外限制文件系统使用的内存量。

  在 vmstat -v 的输出中,有几个指标有助于判断要调整哪些值。在图 2 中,可以看到 numperm 和 numclient 是相同的,都是 45.1%。这意味着 NFS 和/或 JFS2 文件系统正在使用 45.1% 的内存。如果这是一个数据库系统,我会检查是否正在使用 CIO,因为它可以消除双重页面存储和处理,从而降低内存和 CPU 使用量。

  在构建 I/O 请求时,逻辑卷管理程序 (LVM) 请求一个 pbuf,这是固定的内存缓冲区,它保存 LVM 层中的 I/O 请求。然后把 I/O 放到另一个称为 fsbuf 的固定内存缓冲区中。有三种 fsbuf:文件系统 fsbuf(供 JFS 文件系统使用)、客户机 fsbuf(由 NFS 和 VxFS 使用)和外部分页程序 fsbuf(由 JFS2 文件系统使用)。另外,还有 psbuf,它们是对分页空间的 I/O 请求所用的固定内存缓冲区。

  在图 2 中,vmstat -v 命令显示的值是自引导以来的平均值。因为服务器可能很长时间不重新引导,所以一定要间隔几小时取两个快照,检查这些值是否有变化。在这里,它们快速增长,需要调优。

  I/O 延迟

  在 vmstat -v 的输出中,有几个表示存在 I/O 延迟的迹象。I/O 延迟会影响性能和内存。下面介绍识别 I/O 阻塞的原因和解决问题的一些常用方法。

  1468217 pending disk I/Os blocked with no pbuf 这一行清楚地说明一个或多个未完成的磁盘 I/O 在试图获得固定内存缓冲区(具体地说是 pbuf)时被阻塞了。这表明在 LVM 层上出现排队。因为 AIX 无法获得缓冲区以存储 I/O 请求的信息,导致请求被延迟。使用下面的 lvmo 命令应该可以解决这个问题。

  图 3. lvmo –a 输出

  图 3 给出 lvmo -a 命令的输出,它表明 datavg 的 pbuf 不足(查看 pervg_blocked_io_count)。应该只对正在使用的这个卷组纠正此问题,因为这些是固定的内存缓冲区,把它们设置得过大是没有意义的:

lvmo -v datavg -o pv_pbuf_count=2048

32/3<123>
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号