У меня есть сервер Sybase ASE 12.5.2, работающий под управлением Windows 2003, который работает очень медленно для большинства выборочных запросов. Система представляет собой два двухъядерных процессора Xeon, 4 ГБ памяти и 200 ГБ Raid5 (10k SAS-дисков) для данных на контроллере LSI megaraid с кэш-памятью 128 МБ + BBU.
Единственное заметное указание на сервере - это то, что «Длина очереди чтения с диска» в perfmon равна 100. Обычно это указывает на проблему с дисками, но с ними все в порядке.
Есть идеи, что я могу сделать, чтобы выяснить, в чем проблема? Я также должен сказать, что я гораздо больше знаком с Sybase для Solaris, а не с Sybase для Windows.
Вот скриншот:
альтернативный текст http://img.skitch.com/20090722-t4sgfxd5fb2ck7bbsdjei38uu6.png
Вот 40-минутный вывод sp_sysmon.
РЕДАКТИРОВАТЬ: Очевидно, вывод sp_sysmon слишком велик для области текста вопроса serverfault. Вот ссылка на полный вывод: [http://pastie.org/private/t5xqd0vamhz7ynnjuo3cxq visible[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 в секунду за xact count% от общего количества
Reads
APF 459.9 1132.0 1103670 48.1 %
Non-APF 495.8 1220.3 1189821 51.8 %
Writes 0.8 2.0 1978 0.1 %
Всего операций ввода-вывода 956,4 2354,3 2295469 99,2%
950 операций ввода-вывода в секунду должно быть в пределах возможностей рейда на 10 дисков 5, особенно если это все операции чтения. Если мы допустим консервативную оценку 100 операций ввода-вывода в секунду на шпиндель, мы получим оценку 1000 операций ввода-вывода в секунду для этого массива. Изменить: Однако похоже, что я неправильно прочитал ваш исходный пост, предполагая, что есть 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. В Windows с ASE 12.5 вы ограничены примерно 2,6 ГБ памяти для ASE (как в 64-битных, так и в 32-битных Windows). Не могли бы вы показать нам результат выполнения процедуры sp_configure 'memory'. Меня особенно интересует эта строка:
max memory 33792 2950000 1475000 1475000 memory pages(2k) dynamic
Возможно, у вас достаточно памяти, выделенной для ASE, но вы не добавили ее в кэш данных. Не могли бы вы также показать нам результат выполнения процедуры sp_cacheconfig.
Из начала вывода sysmon видно, что ваши процессоры большую часть времени тратят на ввод-вывод:
Движок загружен Загрузка ЦП Занят Ввод / вывод Занят Ожидание
Двигатель 0 2,4% 79,9% 17,7%
Двигатель 1 2,0% 75,2% 22,8%
У вас также есть только 2 ядра, назначенных для ASE, на двухъядерном двухъядерном сервере вы можете увеличить его до 4, если это выделенный сервер. Хотя ваша лицензия может не допускать этого, поскольку ASE лицензируется на ядро.
Мне кажется, что ваша фактическая средняя длина очереди диска составляет 3,554. Масштаб установлен так, чтобы он отображал 100-кратное значение.
Типичные признаки проблем начинаются, когда это число больше, чем количество шпинделей в группе рейда.
Я бы начал с procmon из sysinternals, чтобы начать определение использования диска. Затем я бы посмотрел на специальные инструменты db для мониторинга запросов (извините, я мало знаю о sybase)
Вы можете попробовать эту оптимизацию инструмент Чтобы помочь отследить и устранить проблему, предлагается 14-дневная пробная версия.