我有一个在 Windows 2003 上运行的 Sybase ASE 12.5.2 服务器,对于大多数选择查询来说它的速度非常慢。该系统是一个 2 x Dual Core Xeon、4GB 内存和 200GB Raid5(10k SAS 磁盘),用于在具有 128MB 缓存 + BBU 的 LSI megaraid 控制器上存储数据。
服务器上唯一值得注意的迹象是“磁盘读取队列长度”在 perfmon 中为 100。通常这表明磁盘存在问题,但它们似乎没有任何问题。
关于我可以做些什么来找出问题所在的任何想法?我还应该说我更熟悉 Solaris 上的 Sybase,而不是 Windows 上的 Sybase。
这是一个屏幕截图:
替代文字 http://img.skitch.com/20090722-t4sgfxd5fb2ck7bbsdjei38uu6.png
这是一个 40 分钟的 sp_sysmon 输出。
编辑:显然 sp_sysmon 输出对于 serverfault 问题文本区域来说太大了。这是完整输出的链接:[ http://pastie.org/private/t5xqd0vamhz7ynnjuo3cxq][2]
编辑:我将屏幕截图更改为能够更好地反映正在发生的事情的截图。
查看 sysmon,您正在尝试执行 964.2 IOPS,
Total Requested Disk I/Os 964.2 2373.5 2314183
在这 99.2% 中,这个设备占了,你所有的其他设备都做的很少。您所有的设备都在同一个物理阵列 (D:) 上,但如果它们什么都不做,这不是问题。
设备:
D:\DTCLASS\ads\ads_data01
ads_data01 per sec per xact count % of total
总 I/O 956.4 2354.3 2295469 99.2 %
950 IOPS 应该在 10 个磁盘 raid 5 的能力范围内,特别是因为这些都是读取。如果我们允许每个主轴 100 IOPS 的保守估计,我们估计此阵列为 1000 IOPS。编辑:但是,假设有 10 张光盘,我似乎误读了您的原始帖子!请告诉我们这个阵列中有多少张光盘。
Cache Search Summary Total Cache Hits 1283.3 3158.8 3079829 71.9 % Total Cache Misses 502.2 1236.3 1205348 28.1 %
你得到了很多缓存未命中。这会让我想知道您是否有足够的内存分配给 ASE。在使用 ASE 12.5 的 Windows 上,ASE 的内存限制为大约 2.6 GB(无论是在 64 位还是 32 位 Windows 上)。请让我们看看 sp_configure 'memory' 的输出。我对这条线特别感兴趣:
max memory 33792 2950000 1475000 1475000 memory pages(2k) dynamic
您可能有足够的内存分配给 ASE,但您尚未将其添加到数据缓存中。您能否也让我们看看 sp_cacheconfig 的输出。
您可以从 sysmon 输出的开头看到您的 CPU 大部分时间都在处理 IO:
引擎繁忙利用率 CPU 繁忙 I/O 繁忙空闲
引擎 0 2.4 % 79.9 % 17.7 %
引擎 1 2.0 % 75.2 % 22.8 %
您也只有 2 个引擎分配给 ASE,在双双核上,如果这是专用服务器,您最多可以增加 4 个。尽管您的许可可能不允许这样做,因为 ASE 是按内核许可的。
在我看来,您的实际平均磁盘队列长度是 3.554。比例设置为以 100 倍的值绘制它。
当此数字大于 RAID 组中的心轴数时,就会出现典型的问题迹象。
我将从 sysinternals 的 procmon 开始确定磁盘使用情况。然后我会研究 db 特定工具来监视查询(对不起 - 对 sybase 不太了解)
您可以尝试使用此优化工具来帮助跟踪和解决问题,它有 14 天的试用期。