powered by simpleCommunicator - 2.0.36     © 2025 Programmizd 02
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Ускорение работы растущей базы данных Firebird через приложение на Delphi
25 сообщений из 243, страница 5 из 10
Ускорение работы растущей базы данных Firebird через приложение на Delphi
    #40117506
ъъъъъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
rgreat
X11,


Задумайся о обновлении изменившихся данных вместо того что бы постоянно все с нуля перезаписывать.

Если у тебя рекорды позже могут появляться аналогичные удаленным до этого - сделай логическое удаление. (Поле IsDeleted = 1/0).

Будешь делать только апдейты. От этого база расти не должна.

Ты Firebird вообще никогда не трогал, наверное?
...
Рейтинг: 0 / 0
Ускорение работы растущей базы данных Firebird через приложение на Delphi
    #40117509
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rgreat
Задумайся о обновлении изменившихся данных вместо того что бы постоянно все с нуля перезаписывать.


да, вот уже пытаюсь... но все равно будут же и старые
...
Рейтинг: 0 / 0
Ускорение работы растущей базы данных Firebird через приложение на Delphi
    #40117511
ъъъъъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
X11
rgreat
Задумайся о обновлении изменившихся данных вместо того что бы постоянно все с нуля перезаписывать.


да, вот уже пытаюсь... но все равно будут же и старые

Ты об этом - знаешь?
...
Рейтинг: 0 / 0
Ускорение работы растущей базы данных Firebird через приложение на Delphi
    #40117513
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_
Сколько живе эта транзакция? Как ее завершаешь? Больше у базы нет активных write транзакций?


вообще, в приложении хватает транзакций, т.е. их на самом деле не две.

А живет она недолго. Только на момент выполнения Delete запроса.

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

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
function ExecSql(const aSQL: string; ParamValues: array of variant; const aOkMess: string = ''; const aErrMess: string = ''): string;
Var
  i, c: integer;
  UniSql: TUniSql;
begin
  if aSql.IsEmpty then
    exit(constError + '. ' + constSqlIsEmpty);

  UniSql := CreateUniSql;

  UniSql.Transaction := CreateWrireTransaction(UniSql);
  UniSql.Transaction.StartTransaction;

  try
    UniSql.SQL.Text := aSql;
    try

     if High(ParamValues) < UniSql.Params.Count - 1 then
      c := High(ParamValues)
     else
      c := UniSql.Params.Count - 1;

      for i := 0 to c do
        if not VarIsEmpty(ParamValues[i]) then
        begin
          UniSql.Params[i].ParamType := ptInput;

          case VarType(ParamValues[i]) of
            varByte, varWord, varLongWord, varShortInt, varSmallint, varInteger:
              UniSql.Params[i].AsInteger := ParamValues[i];
            else
              UniSql.Params[i].Value := ParamValues[i];
          end;// case
        end;

      UniSql.Execute;

      if UniSql.Transaction.Active then
        UniSql.Transaction.Commit;

      result := '';

      if not aOkMess.IsEmpty then
        MyMessageBox(constAttention, constMsgSQLOk + aOkMess);

    except
      on e: exception do
      begin
        if UniSql.Transaction.Active then
          UniSql.Transaction.Rollback;

        result := 'Error in ExecSql, sql = ' + aSQL + ', ' + e.Message;

        if not aErrMess.IsEmpty then
          LogError(aErrMess + constMsgSQLErr, e, aSQL);

      end;// on e:
    end;// except
  finally
    FreeAndNil(UniSql);
  end;// finally

end;



код примерно такой:
* Закрываю набор данных, связанный с таблицей мониторинга.
* Удаляю записи текущего процесса.
* Открываю набор данных, связанный с таблицей мониторинга.

и это я поставил для тестирования на ночь на таймер раз в секунду
...
Рейтинг: 0 / 0
Ускорение работы растущей базы данных Firebird через приложение на Delphi
    #40117516
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ъъъъъ
Ты об этом - знаешь?

List я не использую.
...
Рейтинг: 0 / 0
Ускорение работы растущей базы данных Firebird через приложение на Delphi
    #40117517
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rgreat
Будешь делать только апдейты. От этого база расти не должна.
Должна. UPDATE и DELETE порождают ровно такие же версии, как и INSERT.
...
Рейтинг: 0 / 0
Ускорение работы растущей базы данных Firebird через приложение на Delphi
    #40117519
ъъъъъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
X11,

после b/r размер базы уменьшается? Если нет, то и "лечить" не нужно.
...
Рейтинг: 0 / 0
Ускорение работы растущей базы данных Firebird через приложение на Delphi
    #40117520
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
X11,

Попробуй периодически делать SELECT из этой таблицы. Он собирать мусор может.
Сколько вообще записей в таблице? Несколько штук, как я понял? Делай SELECT COUNT(*), и будет хорошо.
...
Рейтинг: 0 / 0
Ускорение работы растущей базы данных Firebird через приложение на Delphi
    #40117521
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ъъъъъ
после b/r размер базы уменьшается? Если нет, то и "лечить" не нужно.

да, возвращается на начальный размер
...
Рейтинг: 0 / 0
Ускорение работы растущей базы данных Firebird через приложение на Delphi
    #40117522
ъъъъъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
X11
ъъъъъ
после b/r размер базы уменьшается? Если нет, то и "лечить" не нужно.

да, возвращается на начальный размер

Тебе следует плакать в этой теме (предварительно изучив её).
...
Рейтинг: 0 / 0
Ускорение работы растущей базы данных Firebird через приложение на Delphi
    #40117523
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YuRock
Попробуй периодически делать SELECT из этой таблицы.


я выше написал....
только немного ошибся, вот так правильно:

* Закрываю набор данных, связанный с таблицей мониторинга.
* Удаляю записи текущего процесса.
* Открываю набор данных, связанный с таблицей мониторинга.
* Добавляю новые записи (подтверждаю пишущую транзацию).
* Переоткрываю набор данных, связанный с таблицей мониторинга.

У этого набора данных, который связан с таблицей мониторинга, две транзакции. И читающую я не переоткрываю, а только пишущую.
...
Рейтинг: 0 / 0
Ускорение работы растущей базы данных Firebird через приложение на Delphi
    #40117525
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
X11
YuRock
Попробуй периодически делать SELECT из этой таблицы.


я выше написал....
только немного ошибся, вот так правильно:

* Закрываю набор данных, связанный с таблицей мониторинга.
* Удаляю записи текущего процесса.
* Открываю набор данных, связанный с таблицей мониторинга.
* Добавляю новые записи (подтверждаю пишущую транзацию).
* Переоткрываю набор данных, связанный с таблицей мониторинга.

У этого набора данных, который связан с таблицей мониторинга, две транзакции. И читающую я не переоткрываю, а только пишущую.

Я точно не помню, и щас проверять лень, но:
- Возможно, в читающей транзакции мусор не чистится;
- Возможно, при индексированном чтении мусор не чистится.
Может у тебя что из этих вариантов.
...
Рейтинг: 0 / 0
Ускорение работы растущей базы данных Firebird через приложение на Delphi
    #40117526
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кстати, индексов не создавал, а при открытии НД - простой Select, даже where нет.
...
Рейтинг: 0 / 0
Ускорение работы растущей базы данных Firebird через приложение на Delphi
    #40117527
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
X11
Кстати, индексов не создавал, а при открытии НД - простой Select, даже where нет.
И такой селект каждые секунды 3 запускается?
Значит, попробуй запускать его в НЕread-only транзакции, авось поможет.
...
Рейтинг: 0 / 0
Ускорение работы растущей базы данных Firebird через приложение на Delphi
    #40117529
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
X11
вот процедура выполнения запроса
Вот это
X11
Код: pascal
1.
if UniSql.Transaction.Active then

лишнее в обоих случаях. Не мешает, но лишнее
X11
вообще, в приложении хватает транзакций, т.е. их на самом деле не две.
Ну вот и ищи длинную транзакцию.
...
Рейтинг: 0 / 0
Ускорение работы растущей базы данных Firebird через приложение на Delphi
    #40117532
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YuRock
И такой селект каждые секунды 3 запускается?


раз в 5 секунд
...
Рейтинг: 0 / 0
Ускорение работы растущей базы данных Firebird через приложение на Delphi
    #40117534
ъъъъъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
X11
код примерно такой:
* Закрываю набор данных, связанный с таблицей мониторинга.
* Удаляю записи текущего процесса.
* Открываю набор данных, связанный с таблицей мониторинга.

Добавь в итерацию:
Код: sql
1.
 select count(*) from табличка


Например - после удаления всех записей.
...
Рейтинг: 0 / 0
Ускорение работы растущей базы данных Firebird через приложение на Delphi
    #40117535
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_
Ну вот и ищи длинную транзакцию.


что ее искать?
она одна на все приложение и все НД с гридами к ней подключены
...
Рейтинг: 0 / 0
Ускорение работы растущей базы данных Firebird через приложение на Delphi
    #40117536
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ъъъъъ
Добавь в итерацию:
Код: sql
1.
 select count(*) from табличка




ок, спасибо, добавлю
...
Рейтинг: 0 / 0
Ускорение работы растущей базы данных Firebird через приложение на Delphi
    #40117537
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
X11В итоге админ видит в этой таблице кто куда подключен и т.д.

Для этого у админа есть MON$ таблицы. Всовывать-высовывать каждую секунду не надо.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Ускорение работы растущей базы данных Firebird через приложение на Delphi
    #40117539
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
и удалять буду не все, а только те, которые старше на 15 мин текущего времени

Код: pascal
1.
2.
3.
4.
5.
6.
7.
      OLDLASTTIME := IncMillisecond(now, 0-UniServerModule.SessionTimeout);// старые записи, которые старше 15 мин(900000 мс), удалить
      UniSession.Log('OLDLASTTIME: ' + DateTimeToStr(OLDLASTTIME));

      if UniServerModule.NodeMode then// если программа запущена из-под HyperServer
        UniMainModule.ExecSql('DELETE FROM TWEBMON WHERE PROCID = :PROCID AND LASTTIME <= :OLDLASTTIME', [pid, OLDLASTTIME]) // удалить все, что связано с текущим процессом, т.к. через HyperServer может быть запущено несколько процессов
      else
        UniMainModule.ExecSql('DELETE FROM TWEBMON WHERE LASTTIME <= :OLDLASTTIME', [OLDLASTTIME]); // удалить все, что связано с текущим процессом
...
Рейтинг: 0 / 0
Ускорение работы растущей базы данных Firebird через приложение на Delphi
    #40117541
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov
Для этого у админа есть MON$ таблицы.


так у меня не монитор подключений к Firebird серверу, а монитор подключений веб-пользователей к приложению

у меня своя табличка пользователей и все приложения к Firebird подключены как SYSDBA.
...
Рейтинг: 0 / 0
Ускорение работы растущей базы данных Firebird через приложение на Delphi
    #40117542
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
X11так у меня не монитор подключений к Firebird серверу, а монитор подключений
веб-пользователей к приложению

Сугубо всё равно. Ежесекундный секс с табличкой не нужен и проистекает из
неправильной архитектуры приложения.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Ускорение работы растущей базы данных Firebird через приложение на Delphi
    #40117543
ъъъъъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
X11
и удалять буду не все, а только те, которые старше на 15 мин текущего времени

Ну и что это тебе даст, если ты процедуру каждые 3 секунды повторяешь? Просто отодвинешь "процесс" на 15 минут.
...
Рейтинг: 0 / 0
Ускорение работы растущей базы данных Firebird через приложение на Delphi
    #40117544
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov
Сугубо всё равно. Ежесекундный секс с табличкой не нужен и проистекает из
неправильной архитектуры приложения.


Согласен.

Тем не менее, ежесекундный секс с табличкой только пока открыто окно монитора у админа и то раз в 5 сек. В другое время в таблицу ничего не записывается.
Может быть правильно было бы сделать какой-нибудь обмен данными между процессами (программами), но я не хочу морочиться, т.к. совсем нет опыта в этой области. Приходится Firebird использовать, как средство сбора инфы с разных процессов.
...
Рейтинг: 0 / 0
25 сообщений из 243, страница 5 из 10
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Ускорение работы растущей базы данных Firebird через приложение на Delphi
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]