powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Помогите советом, репликация
13 сообщений из 38, страница 2 из 2
Помогите советом, репликация
    #40098674
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
demon1992
на базе крутится только служба реплики, она ничего кроме вставки данных не делает.
demon1992
Служба эта принимает данные от удаленных серверов, парсит, применят - все просто.
Кто кого куда зачем - ничего не понимаю.
...
Рейтинг: 0 / 0
Помогите советом, репликация
    #40098675
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
demon1992
hvlad

Откуда известно, что тормозит именно вставка ?

Потому что на базе крутится только служба реплики, она ничего кроме вставки данных не делает.
Проверял trace and audit, который в ibe есть, задержка непосредственно на командах модификации.
Так встака или модификация ? Тебя вообще возможно понять ?
...
Рейтинг: 0 / 0
Помогите советом, репликация
    #40098678
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
demon1992
ты напиши пожалуйста, не стесняйся

Фейспалм мешает. Ты столько индексов специально наворотил чтобы оно гарантированно повесилось, или тупо создал по индексу для каждого запроса?

demon1992
ничего кроме вставки данных не делает

Для полноты картины покажи триггера, которые пишут в tbl_subscriber, tbl и tbl_log.
...
Рейтинг: 0 / 0
Помогите советом, репликация
    #40098684
demon1992
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
hvlad,

Под модификацией данных я имел ввиду операции: вставка удаление обновление. Не прав?
Служба может работать с неограниченным кол-ом удаленных сторон.
Для каждой из сторон, определенной в конфигурации, на службе стартует свой тред, один для приема сообщений, другой для отправки.
Тред который принимает сообщения, запускает log_set, который отправляет - log_get.
База, о которой я начал вести речь в данном топике, работает с несколькими подписчиками. Так вот когда от одного из подписчиков приходят новые данные, стартует log_set, в нем es для уже конечных таблиц. На таблицах триггер, в котором есть логика в том числе на передачу данных принятых от одного подписчика другому, чтобы данные во всех базах были одинаковыми.
Получается, принял данные для одного, сформировал данные на отправку для другого = вставка данных в журнал реплики.

Сорри если плохо объяснил.
...
Рейтинг: 0 / 0
Помогите советом, репликация
    #40098688
demon1992
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry Sibiryakov,

Ничего особенного там нет, поверь на слово.
А насчет индексов - объяснишь как обойтись без?
...
Рейтинг: 0 / 0
Помогите советом, репликация
    #40098694
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
demon1992
Код: sql
1.
ALTER TABLE tbl ADD CONSTRAINT FK_tbl_SBSCR FOREIGN KEY (ID_SBSCR) REFERENCES tbl_subscriber (ID);


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

demon1992
Код: sql
1.
2.
CREATE INDEX idx1 ON tbl (ID_SBSCR, STATE);
CREATE INDEX idx2 ON tbl (ID_SBSCR, IS_SEND, STATE);


Эти индексы просто дублируют друг друга, да ещё и с самым низкоселективным сегментом в конце.

demon1992
Код: plsql
1.
2.
3.
  update tbl_subscriber
  set ID_LOG_LATEST = :ID_LOG_LATEST
  where ID = :ID_SUBSCR;


Этим запросом ты заблокировал запись в родительской таблице, поставив красный свет большинству "модификаций".

demon1992
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
  for select id_log,
             log_unit 
      from tbl T2
      left join tbl_log T1 on T1.ID = T2.ID_LOG
      where T2.ID_SBSCR = :ID_SUBSCR and
            T2.STATE = 0
      order by T2.ID_LOG + 0 asc
      into :id, :log_unit


Здесь у тебя совершенно ненужный левый джоин и выборка не первичного ключа.

demon1992
Код: plsql
1.
2.
3.
4.
5.
      update tbl
      set IS_SEND = 1,
          DT_SEND = localtimestamp
      where ID_LOG = :ID and
            ID_SBSCR = :ID_SUBSCR;


Здесь update по этому непервичному ключу, что (вероятно) приводит к многочисленным изменениям многих записей, которые ты не ожидаешь.

demon1992
Код: plsql
1.
      suspend;


Здесь прелестные грабли на случай если вызывающий код прервёт фетч на середине делающие поле is_send бесполезным.

demon1992
Ничего особенного там нет, поверь на слово.

Не верю.
...
Рейтинг: 0 / 0
Помогите советом, репликация
    #40098701
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
demon1992А насчет индексов - объяснишь как обойтись без?

Внешний ключ не нужен. Подписчики не мелькают достаточно быстро чтобы их
приходилось жёстко контролировать.
Поле state не нужно. Обработанные записи удаляй или выкидывай в отдельную
таблицу. То же и с id_send.
Поле ID_LOG_LATEST не нужно. Оно только создаёт проблему с транзакциями,
закоммиченными не по порядку.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Помогите советом, репликация
    #40098708
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
demon1992
Под модификацией данных я имел ввиду операции: вставка удаление обновление. Не прав?
Если бы ты рядом не писал про вставку - не было бы путаницы.

demon1992
Для каждой из сторон, определенной в конфигурации, на службе стартует свой тред, один для приема сообщений, другой для отправки.
Тред который принимает сообщения, запускает log_set, который отправляет - log_get.
Я так понимаю, что у каждого потока свой ID_SBSCR.

demon1992
Так вот когда от одного из подписчиков приходят новые данные
Подписчик обычно получает данные, а не является их источником. Снова путаешь меня.

demon1992
стартует log_set, в нем es для уже конечных таблиц. На таблицах триггер, в котором есть логика в том числе на передачу данных принятых от одного подписчика другому, чтобы данные во всех базах были одинаковыми.
Т.е. при принятии данных от подписчика N, триггеры пишут в лог данные для подписчика M ?
Ты до сих пор не видишь источника конкуренции за записи для одного и того же подписчика от разных потоков (коннектов) ?
...
Рейтинг: 0 / 0
Помогите советом, репликация
    #40098710
demon1992
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
hvlad
Я так понимаю, что у каждого потока свой ID_SBSCR.

Да
hvlad
Подписчик обычно получает данные, а не является их источником. Снова путаешь меня.

Издателя, прошу прощения.
hvlad
при принятии данных от подписчика N, триггеры пишут в лог данные для подписчика M ?

Ага
hvlad
Ты до сих пор не видишь источника конкуренции за записи для одного и того же подписчика от разных потоков (коннектов) ?

Если честно то нет, не думал что вставка новых записей может что-то блокировать.
...
Рейтинг: 0 / 0
Помогите советом, репликация
    #40098711
demon1992
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry Sibiryakov,

Насчет двух составных индексов согласен, что можно оставить один. fk на ид_подаисчика тоже можно убрать.
Насчет остального нет.

Но дело не в составных индексах, тормоза были и при одном.
...
Рейтинг: 0 / 0
Помогите советом, репликация
    #40098712
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hvladТы до сих пор не видишь источника конкуренции за записи для одного и того же
подписчика от разных потоков (коннектов) ?

Напомни: апдейт неключевого поля мастер-таблицы блокирует операции вставки в
подчинённую?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Помогите советом, репликация
    #40098719
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov
hvladТы до сих пор не видишь источника конкуренции за записи для одного и того же
подписчика от разных потоков (коннектов) ?

Напомни: апдейт неключевого поля мастер-таблицы блокирует операции вставки в
подчинённую?Не блокирует, но только после ожидания.
...
Рейтинг: 0 / 0
Помогите советом, репликация
    #40099007
demon1992
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
hvlad, Dimitry Sibiryakov,

Спасибо за ответы, теперь понял где была блокировка.
Чрезмерно благодарен вам.
...
Рейтинг: 0 / 0
13 сообщений из 38, страница 2 из 2
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Помогите советом, репликация
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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