ЛВС Скорость работы файлового сервера Windows XP в многопользовательском режиме

Тема в разделе "Локальные сети (ЛВС), Hardware ("Железо"), Windows", создана пользователем TesterXP, 17 сен 2008.

  1. TopicStarter Overlay
    TesterXP
    Offline

    TesterXP

    Регистрация:
    17 сен 2008
    Сообщения:
    3
    Симпатии:
    0
    Баллы:
    1
    Добрый день!

    Очень странные результаты тестирования при копировании 238 файлов DBF (база данных 1С 7.7) общим объемом 391 МБ с файлового сервера (Windows XP Pro SP3 Процессор Core 2 Duo 2.4 ГГц, ОЗУ 4 ГБ памяти, Жесткий диск 250 ГБ SATA) на компьютер пользователя (Windows XP Pro SP3, Процессор Core 2 Duo 2.33 ГГц, ОЗУ 2 ГБ, жесткий диск 250 ГБ SATA) по локальной сети 100 МБит/с, локальная сеть подключена к домену через канал 128 кбит/с, у пользователей стоят всякие ограничения.

    Замеры времени проводились, 1) когда в 1С «никого нет» - то есть файлы на файловом сервере не открыты, и 2) когда в 1С кто-нибудь «зашел не монопольно» и ничего не делает, то есть файлы открыты, но их могут читать другие пользователи, нагрузки на локальную сеть нет.

    Для тестов использовались:
    а) Far Manager с включенной опцией "Использовать системную функцию копирования".
    б) консольная команда copy /b *.dbf d:
    в) "Проводник" Windows XP
    г) Программа на Visual FoxPro 7.0 № 1:
    CLEAR
    m.Seco=SECONDS()
    m.Path='X:\BASE1S\'
    m.PathTo='D:\DBF\'
    m.Cnt=ADIR(Arr,m.Path+'*.DBF')
    FOR m.i=1 TO m.Cnt
    m.s1=SECONDS()
    COPY FILE (m.Path+Arr[m.i,1]) TO (m.PathTo+Arr[m.i,1])
    ?Arr[m.i,1],'Size in bytes:',Arr[m.i,2],'Seconds:',SECONDS()-m.s1​
    ENDF
    ?'Total:',SECONDS()-m.Seco​
    д) Программа на Visual FoxPro 7.0 № 2:
    SET EXCLUSIVE OFF
    CLEAR
    m.Seco=SECONDS()
    m.Path='X:\BASE1C\'
    m.PathTo='D:\DBF\'
    m.Cnt=ADIR(Arr,m.Path+'*.DBF')
    FOR m.i=1 TO m.Cnt
    m.s1=SECONDS()
    USE (m.Path+Arr[m.i,1]) ORDER 0
    m.Recc=RECCOUNT()
    COPY TO (m.PathTo+Arr[m.i,1])
    USE
    ?Arr[m.i,1],'Reccount:',m.Recc,'Seconds',SECONDS()-m.s1​
    ENDF
    ?'Total:',SECONDS()-m.Seco​

    1) В 1С никого нет.
    а) Far Manager - 41 сек. (скорость 9.5 МБ/с)
    б) copy /b *.dbf d: - 42 сек. (скорость 9.3 МБ/с)
    в) «Проводник» - 41 сек. (скорость 9.5 МБ/с)
    г) FoxPro (COPY FILE TO) – 41 сек. (скорость 9.5 МБ/с)
    д) FoxPro (USE, COPY TO) – 58 сек. (скорость 6.7 МБ/с)​
    2. В 1С кто-нибудь "зашел не монопольно".
    а) Far Manager - 4 мин. 20 сек. (скорость 1.5 МБ/с)
    б) copy /b *.dbf d: - 4 мин. 20 сек. (скорость 1.5 МБ/с)
    в) «Проводник» - 8 мин. (скорость 0.8 МБ/с)
    г) FoxPro (COPY FILE TO) – 4 мин. 18 сек. (скорость 1.5 МБ/с)
    д) FoxPro (USE, COPY TO) – 58 сек. (скорость 6.7 МБ/с)​

    Что интересно, время копирования записей таблиц с помощью USE, COPY TO не влияет, открыты файлы на файловом сервере или нет, а при использовании системной функции копирования скорость падает в 6 - 11 раз при открытых файлах. Я заметил, что при открытых файлах на копирование каждого файла система делает задержку в 1 секунду.
    При работе в 1С тоже чувствуется замедление работы в несколько раз, если к базе еще кто-то подключился.
    Может есть какие-то настройки в Windows по ускорению копирования файлов с файлового сервера и работы 1С в многопользовательском режиме (до уровня FoxPro)?

    Спасибо.
  2. WaRDeR
    Offline

    WaRDeR Модераторы Команда форума Модератор

    Регистрация:
    23 ноя 2006
    Сообщения:
    3.263
    Симпатии:
    14
    Баллы:
    29
    Насколько я знаю, единственная настрояка Windows позволяющая это сделать -- терминальный режим :)
  3. TopicStarter Overlay
    TesterXP
    Offline

    TesterXP

    Регистрация:
    17 сен 2008
    Сообщения:
    3
    Симпатии:
    0
    Баллы:
    1
    Еще один тест вот такой процедуры на 1С 7.7 - просмотр справочника контрагентов, кто отоваривался за последний год:
    Код:
    Процедура Сформировать()
    Часы0=0; Минуты0=0; Секунды0=0;
    СтрВремя=ТекущееВремя(Часы0, Минуты0, Секунды0);
    Сообщить("Начали в "+СтрВремя);
    ФильтрДата=ДобавитьМесяц(ТекущаяДата(),-12);
    Док=СоздатьОбъект("Документ");
    Док.ОбратныйПорядок(1);
    СпрКли=СоздатьОбъект("Справочник.Контрагенты");
    СпрКли.ВыбратьЭлементы();
    Пока СпрКли.ПолучитьЭлемент()=1 Цикл
    Док.ВыбратьПоЗначению(ФильтрДата, ТекущаяДата(), "Контрагент", СпрКли.ТекущийЭлемент());
    Пока Док.ПолучитьДокумент()=1 Цикл
    Если Док.Вид()="РасходнаяНакладная" Тогда
    Если Док.ДатаДок>ФильтрДата Тогда
    Прервать;
    КонецЕсли;
    КонецЕсли;
    КонецЦикла;
    КонецЦикла;
    Часы=0; Минуты=0; Секунды=0;
    СтрВремя=ТекущееВремя(Часы, Минуты, Секунды);
    ВсегоСекунд=(Часы-Часы0)*24*60+(Минуты-Минуты0)*60+(Секунды-Секунды0);
    Сообщить("Закончили в "+СтрВремя+",  время, секунд: "+ВсегоСекунд);
    КонецПроцедуры
    
    
    Когда я зашел первым и нахожусь один в 1С неи монопольно, скорость выполнения с первой попытки - 3 сек., со второй попытки - 1 сек. Если монопольно - вообще 0 сек.
    Когда я зашел вторым (и даже если первый уже вышел, я уже один), скорость выполнения - 43 сек.
    Что-то в движке 1С для работы с DBF-CDX не продумано, или слишком передумано ...

Поделиться этой страницей