1 (edited by motorolla 2015-01-12 18:16:49)

Topic: загрузка локальной сети при обращении к базе

Подскажите, сделал базу из своего  старого экселевского файла. Размер базы получился в районе 13 Мбайт. При работе с такой базой по локальной сети заметил вот какую особенность - при добавлении новой записи или сохранении изменений в существующей записе базы, а также при запуске проекта происходит примерно 10-и процентная загрузка локальной сети 100МБит/сек. при этом ничего с программой делать нельзя, она как бы висит. На  самом деле идет обмен по сети 100МБит/сек с загрузкой как я уже написал около 10%. Длится это все около 3-х минут. Затем загрузка падает до 0 и программа оживает.  При этом с базой может работать пользователь, на компе у которого лежит эта база. Я примерно прикинул трафик пропущенный по сети: 1Мбайт х 180 сек. = 180 Мбайт. Это повторюсь при размере базы 13МБайт. А как это так?
Если база лежит в папке с программой - все летает.

Re: загрузка локальной сети при обращении к базе

motorolla wrote:

Подскажите, сделал базу из своего  старого экселевского файла. Размер базы получился в районе 13 Мбайт. При работе с такой базой по локальной сети заметил вот какую особенность - при добавлении новой записи или сохранении изменений в существующей записе базы, а также при запуске проекта происходит примерно 10-и процентная загрузка локальной сети 100МБит/сек. при этом ничего с программой делать нельзя, она как бы висит. На  самом деле идет обмен по сети 100МБит/сек с загрузкой как я уже написал около 10%. Длится это все около 3-х минут. Затем загрузка падает до 0 и программа оживает.  При этом с базой может работать пользователь, на компе у которого лежит эта база. Я примерно прикинул трафик пропущенный по сети: 1Мбайт х 180 сек. = 180 Мбайт. Это повторюсь при размере базы 13МБайт. А как это так?
Если база лежит в папке с программой - все летает.

Скажите...а какова структура вашей базы? Сколько таблиц и полей? и сколько на данный момент записей в основной таблице?

Re: загрузка локальной сети при обращении к базе

motorolla
Возможно у вас скрипты делают какие то запросы? попробуйте их отключить временно.


Не могли бы вы мне прислать свою базу данных для тестов на support@drive-software.com

Dmitry.

Re: загрузка локальной сети при обращении к базе

Добрый вечер!
Решил поделиться небольшим опытом .
Тоже работаю по локаль. сети(5 пользователей) . База тяжелая (35-40 таблиц). Сам к серверу на удаленке( ping до сервера 17 мс).
База была 23 мб . Вынес  фотки - теперь 1,65 мб . Проблем пока нет (фу,фу,фу).Предполагал , что упрусь в скорость , поэтому оптимизировал скрипты с запросами SQL . Первое :  выяснил , что прямой SELECT в переменную работает гораздо быстрее чем внутри INSERT или
UPDATE  .
Т. е.  вот такое работает гораздо быстрее  :


     begin
     id_Mater := SQLExecute('SELECT id_Materials FROM MatZayav2 WHERE id = ' + IntToStr(frmZakroyniyCeh.TableGrid3.dbItemID) ); // читаем идентификатор родительской таблицы
      Nom := SQLExecute('SELECT NomNak FROM MatZayav2 WHERE id = ' + IntToStr(frmZakroyniyCeh.TableGrid3.dbItemID) );
       NakDat := SQLExecute('SELECT DataNak FROM MatZayav2 WHERE id = ' + IntToStr(frmZakroyniyCeh.TableGrid3.dbItemID) );
        Otkud := SQLExecute('SELECT Kuda FROM MatZayav2 WHERE id = ' + IntToStr(frmZakroyniyCeh.TableGrid3.dbItemID) );
         Kud := SQLExecute('SELECT Otkuda FROM MatZayav2 WHERE id = ' + IntToStr(frmZakroyniyCeh.TableGrid3.dbItemID) );
          Vozvr := StrToFloat(SQLExecute('SELECT Vozvrat FROM MatZayav2 WHERE id = ' + IntToStr(frmZakroyniyCeh.TableGrid3.dbItemID)));
           VozNet := SQLExecute('SELECT OtchZaPriz FROM MatZayav2 WHERE id = ' + IntToStr(frmZakroyniyCeh.TableGrid3.dbItemID) );
            ZaN := SQLExecute('SELECT NomerZayav FROM MatZayav2 WHERE id = ' + IntToStr(frmZakroyniyCeh.TableGrid3.dbItemID) );
             ZaDat := SQLExecute('SELECT DataZayav FROM MatZayav2 WHERE id = ' + IntToStr(frmZakroyniyCeh.TableGrid3.dbItemID) );

  SQLExecute('INSERT INTO Nakladnie (Nomer,NakData,Otkuda,Kuda,Vozvrat,VozvrNet,id_Materials,ZayavNom,ZayavData) VALUES ("'+Nom+'","'+NakDat+'","'+Otkud+'","'+Kud+'",'+ReplaceStr( FloatToStr(Vozvr),',','.')+',"'+VozNet+'",'+IntToStr(id_Mater)+',"'+ZaN+'","'+ZaDat+'")');
    end;


чем например такое :

SQLExecute('INSERT INTO AktBrakMat (NomAkt, DataAkt, KolMat, id_Materials, NomNak, DataNak, KolichVnakl) SELECT MatZayav2.NomNast,MatZayav2.ZakroyDataFakt,MatZayav2.BrakPolot,MatZayav2.id_Materials,MatZayav2.NomNak,MatZayav2.DataNak,MatZayav2.MaterKolFakt FROM MatZayav2 WHERE MatZayav2.id = ' + IntToStr(frmZakroyniyCeh.TableGrid3.dbItemID));

да и вероятность нарваться на locked  уменьшается .
Если я не очень понятно , то пишите , раскрою измерения подробней.

Да , еще . Если у вас проходит много удалений из базы , не ленитесь делать базе (периодически) сжатие .