Форум » [x]Harbour » Виснет сервак... » Ответить

Виснет сервак...

Dr. Oldwarez: Вроде уже доделал свою программу (30 таблиц и 100 выходных форм), но тут вылез неожиданно глюк. На локальной машине всё работает нормально, а вот если база данных - на сервере, а программа на клиенте - то начинает тормозить, особенно при распечатке отчётов из FastReport. На сервере стоит Windows 2008 Server SP3, на клиенте Windows XP SP3. Важная информация: клиенты у шефа слабые - 2 Гигагерца процы и память всего 1,25 Гига. Скорее всего, тормоза все именно из-за них:( Но с деньгами у шефа сейчас неважно - кризис. Пусть хоть памяти добавит.

Ответов - 8

AlexMyr: Использовать letodb, терминальный режим.

Pasha: Доступ к совместно открытым файлам (с индексами) несколькими клиентами файлам в сетях windows выполняется на порядок (грубо) медленнее, чем доступ к файлу, открытому одним клиентом. Этот вопрос можно решить либо установкой блокировки индекса на чтение (READLOCK), что может привести к другим проблемам, либо использованию клиент-сервера (ads/letodb) Конечно, остается еще путь оптимизации алгоритма. Практика показывает, что резервы оптимизации всегда есть. Если алгоритм выполняется быстро при монопольном доступе, это означает только то, что его выполняет очень производительный компьютер, а не то, что алгоритм оптимальный.

Dr. Oldwarez: Не-е LetoDB не рулит. Шеф хочет классический DBF. А оптимизация алгоритмов в столь навороченной программе - дело морочное. Тем более, я уже устал смертельно. ПЯТЬ НЕДЕЛЬ БЕЗ ВЫХОДНЫХ


Andrey: Dr. Oldwarez пишет: а программа на клиенте - то начинает тормозить, особенно при распечатке отчётов из FastReport. Я с таким тоже сталкивался (у меня пока ФАЙЛ-СЕРВЕРНАЯ архитектура). Помогло - оптимизация алгоритма. Какие операторы используешь ? Покажи примерную логику выборки. SET FILTER использовать нельзя, он в хХарборе (в отличие от Клипера 5.3) не оптимизирован !

Pasha: Dr. Oldwarez пишет: Шеф хочет классический DBF. Это вам еще повезло. Шеф мог потребовать программу под ms dos :) Дополню: ads и letodb это и есть классический dbf, только доступ к БД выполняется не через ненадежные и медленные файловые операции, а с помощью надежной и быстрой технологии клиент-сервер. К тому же программу можно написать так, что она будет работать и как файл-сервер (через dbfcdx/dbfntx), и как клиент-сервер.

petr707: ...особенно при распечатке отчётов из FastReport - именно распечатке ? или подготовке отчетов FastReport ? Предложение: Тормозную часть алгоритма можно выполнять не на клиентах, а прямо на сервере(если он производительный), в частности для подготовки отчетов: организуете "Отчет-сервер" - папка запросов клиентов на отчет , сюда клиенты размещают текстовый файл-запрос - папка ответов - готовых отчетов, каждый клиент забирает свой файл. На сервере Windows 2008 - все время выполняется Ваш второй "отчетный" exe, который обнаруживает запросы на отчет, готовит файлы отчетов, выкладывает их в папку ответов. Для подготовки отчетов иногда (в зависимости от размера) проще сделать реплику баз ( копирование базы при открытии без индексов - в реплику для отчетов) и готовить отчет по этой реплике.

Dr. Oldwarez: Всё, ясно стало. Оказывается, причиной тормозов был конфликт с одной малоизвестной в СНГ программой, которую шеф запускал на клиенте одновременно с моей задачей. Договорились, что больше не будем запускать их одновременно.

a_sidorov: Одна и та же программа у меня давно (несколько лет)работает и как Файл сервер и как клиент сервер на leto. При открытии таблицы проверяется наличие в пути сетевого пути (//) if at("//",NewFile)>0 use (NewFile) VIA LETO else use (NewFile) VIA DBFNTX endif Очень удобно для отладки и работы с локальными копиями. Надежность работы с данными на порядок лучше, нет потери данных и разрушения индексов при аварийном снятии клиента. Только если в индексах есть свои функции, необходимо их включить в сервер leto и перекомпилировать, но это несложно.



полная версия страницы