Доправились Вы не только до этих параметров...
#обмен между процессами обработки и ядром сервера - через системную память (1)
#или через временные файлы в рабочей директории workdir
MAPING_WORK_FILES=1
#размер системной памяти выделяемой клиенту, Mb
MappingFileSize=10
Первый же клиент, запросивший данных больше 10Мб приведет к непредсказуемым результатам. Ускорение и потерю в надежности Вы получили именно установив MAPING_WORK_FILES в 1. Можно поиграться с размером буфера и подобрать более-менее безопасное значение, но памяти на сервере у Вас должно быть много - иначе тормоза получите гораздо более жестокие чем в случае MAPING_WORK_FILES в 0. Определить заранее этот параметр очень сложно - в каждом случае приходится подбирать его достаточно долго. Стоит учесть, что такой объем данных требуется в основном сложным задачам (особенно книгообеспеченность), когда правятся тысячи записей. Если готовы рисковать таким объемом данных - держите MAPING_WORK_FILES выставленным в 1...
Цитата:dvv
Админы сбивались с ног, искав в чем же была проблема, а проблема тем временем исчезала сама собой через недельку-две и появлялась в следующий раз месяца через 3-4 месяца
Само собой, тем более на серверах обычно ничего не происходит. У всего есть причины.
О параметрах про которые говорите Вы.
DUPLICATE_SOCKETS=1
Этой командой решается у кого будет сокет (и, соответственно, кто ответит клиенту) - сам сервер который принял соединение (=0) или же сокет будет передан процессу обработки и ответит клиенту этот процесс (=1). Вот и все :) Теоретический выигрыш в скорости ответа при потере надежности за счет передачи сокета между процессами windows. При том что у вас количество этих процессов ограничено 20 (MAX_PROCESS_COUNT=20) смысл не очень просматривается. И MAPING_WORK_FILES=1 тогда не имеет смысла - ответ отдается клиенту обработчиком... Плюс, тут есть еще одна опасность. Если обработчик по каким-либо причинам безвременно помер - клиент об этом долго не узнает...
####РАСПАРАЛЛЕЛИВАТЬ ПРОЦЕССЫ - (ТОЛЬКО В СЛУЧАЕ МНОГОПРОЦЕССОРНОГО СЕРВЕРА!)
USE_MULTY_PROCESSOR=1
"Многопроцессорный сервер" - имеется ввиду не железо, а режим работы сервера ирбис. Если выставлен в 1, то для каждого процесса обработки создается отдельный поток в ядре сервера, который общается с процессом обработки. Учитывая что за 20 процессов обработки Вы не выходите, смысла использовать этот параметр особого не вижу. К надежности конечно минус за счет усложнения алгоритма общения...
Параметр Appication.Handle - это внутренний параметр сервера. Перезаписывается каждый раз при старте сервера. Собственно хендл процесса сервера, по которому его получают процессы обработки. Идеальное значение - соответствующее хендлу сервера :) Если поправить во время работы сервера - рискуете получить неработоспособную систему.
Резюмируя.
Из Вашего конфига - ощутимый прирост скорости Вы получаете за счет параметра MAPING_WORK_FILES=1. Опасность использования такого параметра мною описана. Решать использовать его или нет - Вам. Видите периодически падающий сервер и битые записи (например, половина записей с сохраненными коэффициентами КО, половина - без) - регулируйте MappingFileSize с оглядкой на общий объем памяти на сервере. Сам я в свое время поигравшись с этим параметром, доведя его до 100Мбайт, намучавшись с висами сервера по превышению этого объема, последующими восстановлениями из бекапов и упершись в деградацию скорости по свопу памяти операционкой выставил MAPING_WORK_FILES в 0 и забыл о зависаниях наглухо сервера совсем. Кеш windows тут весьма кстати - обработка файлов происходит в памяти.