一些用户抱怨全新服务器的性能不佳。这台机器上唯一运行的是 Oracle 10.2。
乍一看一切正常:负载很小,日志中没有任何内容。我唯一能找到的是 vmstat 抱怨大量的交换和阻塞进程。我应该从哪里开始解决这个问题?
# vmstat -S 5 5
kthr memory page disk faults cpu
r b w swap free si so pi po fr de sr rm s0 s1 s2 in sy cs us sy id
0 0 0 12420128 16679384 0 0 672 809 809 0 0 -0 2 2 -0 875 572 652 0 0 100
0 7 0 1926560 5871472 0 0 4396 11463 11463 0 0 0 0 0 0 1796 662 1731 0 0 100
0 2 0 1925984 5934624 0 0 19058 13657 13657 0 0 0 0 0 0 4877 1336 6145 0 1 99
0 3 0 1925984 6126144 0 0 12691 13821 13821 0 0 0 0 0 0 3708 1055 4537 0 1 99
0 5 0 1925984 6093776 0 0 6033 15628 15628 0 0 0 0 0 0 2215 745 2386 0 0 100
抱歉,您的 vmstat 输出并没有真正显示任何交换。首先,Solaris 对“交换”的定义是当整个进程由于极大的内存压力而被换出时。这些是您的 0 si 等列。除了最病态负载的系统之外,您不应该真正看到这一点。pi 和 po 列可以显示“分页”活动。在其他系统上通常称为“交换”的活动在 Solaris 术语中称为“分页”。但是您需要运行“vmstat -p”来查看 api/apo(匿名页面输入和匿名页面输出)编号——这就是人们通常所说的“交换”。pi/po 列包括本质上是正常的文件系统活动。(例如内存映射IO)。
要识别有问题的设备,iostat 将帮助您。类似“iostat -dxzn 1”的东西。您可能会看到一些 100% 繁忙的设备,因为您在磁盘 IO(vmstat b 列)上阻塞了进程。
我太新手了,无法添加评论,所以我会“回答”......
尝试运行“iostat -xcn 1”来查看您的热块设备是什么。您是使用原始卷还是格式化?ZFS 或 UFS(我假设这是 Solaris 10 ...)?你的磁盘布局是什么?
您正在交换一点..您是否调整了信号量等?使用项目或 /etc/system(再次假设 Solaris 10..)?
我通常会从用户那里获得更多细节。究竟是什么运行不快?即使你找回“一切”,也要试着找出至少一个特定的案例、交易、工作……一些可以继续追踪和追踪的东西。
然后通过Oracle跟踪它(例如跟踪10046,如果它不是太复杂),检查使用了哪些服务器资源(哪些表,在哪些磁盘上......),找出时间花费在哪里,......
根据我的经验,当我看到 100% 繁忙的磁盘时
iostat -znx 3
,要么是 oracle 配置错误,要么是执行全表扫描等的非最佳执行计划。另一种方法是查看繁忙磁盘上的数据(表空间或重做或什么?),然后寻找 IO 昂贵的事务或长操作或其他东西。
顺便说一句 - 当您移至新服务器时,您是否重新计算了统计数据等?Oracle 的动态优化器在两种意义上都是一个婊子。
好吧,如果你正在交换,你通常会增加 IO 等待,这将导致行为迟缓。一般是什么负载?负载可能会“感觉”不同,具体取决于导致它的原因。由于 CPU 利用率高导致的负载峰值会影响性能,但如果 IO 等待很重,15 的负载感觉就像 1000。
仔细查看您发布的数字,显示交换了 0 个页面。即使
-S
您的机器正在交换,您也不应该在这些列中看到 0。我敢打赌,您的机器正在执行 Memory Mapped IO,它具有类似的分页特性,但并不表示抖动。
我目前无法访问 Solaris 机器,因此我将其基于vmstat(1) 的手册页副本