powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Зависание Firebird на базе 50 МБ
25 сообщений из 102, страница 4 из 5
Зависание Firebird на базе 50 МБ
    #39669702
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Денисвыкинь это срочно!!! Чушь несусветная+100500
...
Рейтинг: 0 / 0
Зависание Firebird на базе 50 МБ
    #39669703
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hvladgstat -r для "плохой" БД покажи
и где gstat -h для security2.fdb ?Уже не надо
...
Рейтинг: 0 / 0
Зависание Firebird на базе 50 МБ
    #39669704
offsites
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Понял, выкину. Рад что вроде все прояснилось, сам дурак.
Но все таки прошу объяснений, что не так?)))
При достижении 100000, сортируем в обратном порядке и грохаем первых 50000. Чего он виснет? Неправильный код, может чего не замечаю? ВРоде не так уж и много всего сделать нужно, чтобы на вечно зависнуть
...
Рейтинг: 0 / 0
Зависание Firebird на базе 50 МБ
    #39669706
offsites
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Логи такие хранить мне в любом случае нужно.
Как это правильно делается?
...
Рейтинг: 0 / 0
Зависание Firebird на базе 50 МБ
    #39669707
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
offsites,

всё не так.
1. Использование COUNT по своей таблицы в ROW-level триггерах (других у нас нет). Который мало того что медленный, так ещё и не надёжен в данном случае.
2. DELETE в INSERT триггере для той же таблицы это уже нечто
3. Потенциально глючная конструкция DELETE FROM table1 NOT IN (SELECT FIRST(1000) * FROM table1). В 2.5 был артефакт со стабильностью курсора
...
Рейтинг: 0 / 0
Зависание Firebird на базе 50 МБ
    #39669708
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
offsites,

чисти логи по расписанию
...
Рейтинг: 0 / 0
Зависание Firebird на базе 50 МБ
    #39669709
offsites
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Симонов Денис,

может задам глупый вопрос, но по расписанию это как? Инициировать чистку таблицы с клиента? Типа раз в пол года? Или у сервера есть свои инструменты для этого?
...
Рейтинг: 0 / 0
Зависание Firebird на базе 50 МБ
    #39669711
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
offsites,

ты не знаешь что такое cron в CentOS?
Пишешь скрипт скармливаешь его isql и запускаешь по крону. Можно ночером
...
Рейтинг: 0 / 0
Зависание Firebird на базе 50 МБ
    #39669714
offsites
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Симонов Денис,

понял. Но как то кажется что это не правильно, хотя может и эффективно. Если потребуется базу перенести по какой-то причине, я через год-два забуду что там крон был завязан. Сама база не может об этом думать никак?
...
Рейтинг: 0 / 0
Зависание Firebird на базе 50 МБ
    #39669715
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
offsites,

ускорить и изменить можно легко:
1. Убери триггер на INSERT (он просто не нужен);
2. Триггер на коннект сделай таким:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
AS
DECLARE VARIABLE CUR_EID BIGINT; --или какой там тип у тебя в таблице у поля EID
DECLARE VARIABLE CUR_REMOTE_ADDRESS VARCHAR(255);
begin
  CUR_EID = gen_id(gen_events_id,1);

  SELECT FIRST 1 MON$REMOTE_ADDRESS FROM MON$ATTACHMENTS INTO :CUR_REMOTE_ADDRESS;

  INSERT INTO events(eid, EType, edatetime, user_login, user_role, eip)
  VALUES (:CUR_EID, 4, current_timestamp, current_user, current_role, :CUR_REMOTE_ADDRESS);  

  DELETE FROM events WHERE eid < :CUR_EID - 50000;
end



Не проверял, но думаю, заработает норм.
...
Рейтинг: 0 / 0
Зависание Firebird на базе 50 МБ
    #39669716
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
offsites,

в firebird нету Job'ов
Варианты с самоочисткой в триггерах чушь собачья. Начиная с того что ты тупо замедляешь каждый коннект хотя бы своим COUNT
...
Рейтинг: 0 / 0
Зависание Firebird на базе 50 МБ
    #39669725
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YuRockНе проверял, но думаю, заработает норм.

С обращением к таблицам мониторинга нормально не заработает. Адрес можно получить из
системных переменных.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Зависание Firebird на базе 50 МБ
    #39669727
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
получать первый попавшийся IP адрес пользователя это конечно умно
...
Рейтинг: 0 / 0
Зависание Firebird на базе 50 МБ
    #39669728
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovС обращением к таблицам мониторинга нормально не заработает. Адрес можно получить из
системных переменных.
Ну это вообще бред, а не запрос:

Код: sql
1.
SELECT FIRST 1 MON$REMOTE_ADDRESS FROM MON$ATTACHMENTS INTO :CUR_REMOTE_ADDRESS;


Он неизвестно что возвращает, а не адрес текущего пользователя. Я просто скопировал. Зря.

Короче, offsites , вот переделанный вариант триггера на коннект. Если хочешь - пробуй:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
AS
DECLARE VARIABLE CUR_EID BIGINT; --или какой там тип у тебя в таблице у поля EID
begin
  CUR_EID = gen_id(gen_events_id,1);

  INSERT INTO events( eid, EType, edatetime, user_login, user_role, eip )
  VALUES ( :CUR_EID, 4, current_timestamp, current_user, current_role, RDB$GET_CONTEXT( 'SYSTEM', 'CLIENT_ADDRESS' ) );  

  DELETE FROM events WHERE eid < :CUR_EID - 50000;
end
...
Рейтинг: 0 / 0
Зависание Firebird на базе 50 МБ
    #39669733
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я не уверен как сервер реагирует на попытку удаления уже удалённой записи. Если как на
обычный конфликт обновления - будут неприятности.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Зависание Firebird на базе 50 МБ
    #39669734
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
offsites new.eip = (SELECT FIRST 1 MON$REMOTE_ADDRESS FROM MON$ATTACHMENTS);
японский городовой... Это тебе еще повезло, что у тебя не 50-100 активных коннектов.
Срочно переделать на RDB$GET_CONTEXT('SYSTEM', 'CLIENT_ADDRESS').
Про after insert уже сказали, оно и есть.
...
Рейтинг: 0 / 0
Зависание Firebird на базе 50 МБ
    #39669735
offsites
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
YuRock,

обязательно попробую, спасибо!) Я завтра вечером к написанию кода приступлю, сейчас просто отключил триггер, посмотрю это ли было единственной проблемой.
...
Рейтинг: 0 / 0
Зависание Firebird на базе 50 МБ
    #39669737
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YuRockSELECT FIRST 1 MON$REMOTE_ADDRESS FROM MON$ATTACHMENTS
еще один. Ребята, запомните, что обращение к mon$ из базы данных, из любого триггера или процедуры, срабатывающих регулярно, будет в геометрической прогрессии сажать производительность при увеличении числа пользователей.
Поэтому обращение к mon$ следует допускать только извне, и грубо говоря, не чаще 1 раза минут в 30. И то, предварительно надо делать замер по времени выполнения первого обращения к mon$ при максимальном кол-ве юзеров. Оно может нескольких минут достигать.
...
Рейтинг: 0 / 0
Зависание Firebird на базе 50 МБ
    #39669738
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovЯ не уверен как сервер реагирует на попытку удаления уже удалённой записи. Если как на
обычный конфликт обновления - будут неприятности.
Да. Впрочем, у автора эта проблема и раньше была.
Значит, надо либо WHEN ANY пробовать добавлять, либо в клиента переносить.
...
Рейтинг: 0 / 0
Зависание Firebird на базе 50 МБ
    #39669739
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdvYuRockSELECT FIRST 1 MON$REMOTE_ADDRESS FROM MON$ATTACHMENTS
еще один
Я ж говорю, что скопировал это, не глядя
Скопировал отсюда: 21544117
...
Рейтинг: 0 / 0
Зависание Firebird на базе 50 МБ
    #39669740
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YuRock,

90% раньше автор вообще налетал на стабильный курсор, который и вводил базу в полный ступор. Впрочем и без этого код был полным ужасом.
...
Рейтинг: 0 / 0
Зависание Firebird на базе 50 МБ
    #39669741
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Денис90% раньше автор вообще налетал на стабильный курсор, который и вводил базу в полный ступор.

Нет, его DELETE IN всего лишь должно было удалить из таблицы вообще все записи. Это не
INSERT SELECT.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Зависание Firebird на базе 50 МБ
    #39669840
WildSery
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мне кажется мягко говоря странным существование базы без регламентных заданий, выполняющихся шедулером.
Это означает, для начала, отсутствие регулярных бэкапов.
...
Рейтинг: 0 / 0
Зависание Firebird на базе 50 МБ
    #39669865
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
и так, шо мы имеем с гуся...

наглядное подтверждение библейской притчи об обезьяне с гранатой.
аминь.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Зависание Firebird на базе 50 МБ
    #39669937
Василий 2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YuRockКороче, offsites , вот переделанный вариант триггера на коннект. Если хочешь - пробуй:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
AS
DECLARE VARIABLE CUR_EID BIGINT; --или какой там тип у тебя в таблице у поля EID
begin
  CUR_EID = gen_id(gen_events_id,1);

  INSERT INTO events( eid, EType, edatetime, user_login, user_role, eip )
  VALUES ( :CUR_EID, 4, current_timestamp, current_user, current_role, RDB$GET_CONTEXT( 'SYSTEM', 'CLIENT_ADDRESS' ) );  

  DELETE FROM events WHERE eid < :CUR_EID - 50000;
end


Тут DELETE будет срабатывать каждый раз. Не критично, но не совсем то, что было у автора.
...
Рейтинг: 0 / 0
25 сообщений из 102, страница 4 из 5
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Зависание Firebird на базе 50 МБ
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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