powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Очередь-таблица для репликации, как оптимальней сделать?
21 сообщений из 21, страница 1 из 1
Очередь-таблица для репликации, как оптимальней сделать?
    #39904559
Фотография МуМу
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть следующая проблема, существует репликатор который помощью триггеров данные пишет в таблицу очередь. Из этой очереди необходимо данные читать и из нее необходимо удалять причем весьма интенсивно(по транзакционно). Возникают проблемы фрагментацией данных, которые приводят к повышенной нагрузке.(ребилд индекс в силу отдельных проблем не вариант). Вот возникла идея писать триггерами с помощью View. А сама view будет представлением на таблицу Очередь(N) , где N будет итерационный расти. То есть это будет Очередь1,Очередь2,Очередь3 и т.п. Фактически раз в минуту или чаще будет Alter view на новую таблицу ОчередьN.
В этом случае конечно данные могут быть записаны в разные таблицы Очередь(N) из одной длинной транзакции, но это не является проблемой(только возникают сложности администрирования). По идее блокировка на схеме должна быть минимальная. Но зато решается вопрос с фрагментацией(и снижаются издержки на логирование, сохранение истории очереди). Какие при таком подходе могут быть проблемы?
...
Рейтинг: 0 / 0
Очередь-таблица для репликации, как оптимальней сделать?
    #39904576
Фотография Yasha123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
слушайте, а вы точно русский человек?
ведь читать же невозможно.
не только этот пост, а просто все подряд
...
Рейтинг: 0 / 0
Очередь-таблица для репликации, как оптимальней сделать?
    #39904581
Фотография МуМу
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну извините, иногда тороплюсь, сильно не заморачиваюсь.
У нас все таки технический а не филологический форум. Рыбак рыбака - поймет:)
...
Рейтинг: 0 / 0
Очередь-таблица для репликации, как оптимальней сделать?
    #39904632
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МуМу,

как Вы узнали, что проблема состоит в фрагментации таблицы?
...
Рейтинг: 0 / 0
Очередь-таблица для репликации, как оптимальней сделать?
    #39904692
Фотография МуМу
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Делаешь ребилд индексов, все становится нормально - количество логических чтений резко усеньшается.Планы одинаковые(там две таблицы джойнятся). Записей не так много а логических чтений со временем становится все больше. Ребилд индексов приводит к блокировкам т.к. интенсивность вставки удалений очень большая.
...
Рейтинг: 0 / 0
Очередь-таблица для репликации, как оптимальней сделать?
    #39904714
Гавриленко Сергей Алексеевич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Для очередей неплохо (как я слышал) подходит Service Broker, ну и всякие специализированные решения (Kafka и т.п.).
На скуле очередь городится довольно неудобно из-за того, что весьма проблематично одновременно организовывать партиционирование и по дате (или другому монотонно возрастающему полю) для очистки и обработки, и по равномерному ключу (для масштабирования).

В любом случае, обработка с удалением -- будет медленно (куча записей в лог, ghost-пейджи в начале таблицы). Только транкейт, только хардкор.

МуМуВот возникла идея писать триггерами с помощью View.Это как минимум промежуточная материализация (в inserted) всего, что заливается в очередь. По мне -- весьма накладно.

МуМуПо идее блокировка на схеме должна быть минимальная.И тем не менее, может стать проблемой, если нет момента, когда никто не льет в очередь данные. Тем более, я не уверен, что можно сделать alter view с блокировкой wait_on_low_priority, как при многих других DDL-операциях. Короче, возможно придется еще как-то городить сериализатор заливальщиков, если таблицы надо нарезать чаще, чем есть возможность заблокировать представление.
...
Рейтинг: 0 / 0
Очередь-таблица для репликации, как оптимальней сделать?
    #39904720
Гавриленко Сергей Алексеевич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МуМу
Делаешь ребилд индексов, все становится нормально - количество логических чтений резко усеньшается.Планы одинаковые(там две таблицы джойнятся). Записей не так много а логических чтений со временем становится все больше. Ребилд индексов приводит к блокировкам т.к. интенсивность вставки удалений очень большая.
Похоже на проблему с ghost-пейджами. Проверяется обычным select top 1 from очередь order by порядок обработки. Если при этом дохрена логических чтений, это оно. Иногда лечится, если удалять c paglock, иногда нет.
...
Рейтинг: 0 / 0
Очередь-таблица для репликации, как оптимальней сделать?
    #39904750
Фотография МуМу
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот думаю проверить издержки на view, мне кажется относительно общих затрат ничтожные должны быть. Как проверить правильно не подскажешь? Ну типа инсерт в таблицу, и инсерт в таблицу через view ну и сравнить логические чтения?
...
Рейтинг: 0 / 0
Очередь-таблица для репликации, как оптимальней сделать?
    #39904762
Гавриленко Сергей Алексеевич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МуМу,

Хотя бы. А еще лучше смоделировать пиковую нагрузку и посмотреть, сколько записей в секунду оно тянет, а сколько уже нет. Чтобы через год-другой не пришлось опятьт все переделывать.
...
Рейтинг: 0 / 0
Очередь-таблица для репликации, как оптимальней сделать?
    #39904811
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МуМу
существует репликатор который помощью триггеров данные пишет в таблицу очередь.

Этой таблице никакие индексы не нужны. В особенности - кластерные. Удали их.
...
Рейтинг: 0 / 0
Очередь-таблица для репликации, как оптимальней сделать?
    #39904828
Фотография МуМу
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Изначально планировалось без индексов но возникала одна из проблем с вычиткой, а точнее с уровнем изоляции(завтра спрошу у архитекторов). Нужно максимально оперативно вычитывать и затем удалять закомиченные данные при этом влиять на систему по минимуму(посредством блокировок).
...
Рейтинг: 0 / 0
Очередь-таблица для репликации, как оптимальней сделать?
    #39904839
Фотография МуМу
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть еще мысли подумать можно ли для этого InMеmory(со схемой без потери данных) таблицу прикрутить, хотя сомневаюсь. А вообще прихожу к выводу что лучше писать в таблицу данные изменений посредством чтения из лога транзакций, например используя Changedata capture , тогда подобные проблемы вообще как класс возникать не будут.
Хотя предложенный вариант с view пока выглядит как самый простой для текущей реализации.
...
Рейтинг: 0 / 0
Очередь-таблица для репликации, как оптимальней сделать?
    #39904882
Гавриленко Сергей Алексеевич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov
МуМу
существует репликатор который помощью триггеров данные пишет в таблицу очередь.

Этой таблице никакие индексы не нужны. В особенности - кластерные. Удали их.
Ровно наоборот. В сценарии обработки очереди по чекпоинтам нужен seek на начальную точку выборки, иначе на каждой итерации будет сканироваться вся таблица. В сценарии с удалением, в начале кучи будет образовываться ghost-страницы, которые будуд при каждом delete top или select top вычитываться. Есдинственный сценарий, когда индексы не нужны, это когда таблица обрабатывается сразу челиклм, и сразу же очищается/удаляется.
...
Рейтинг: 0 / 0
Очередь-таблица для репликации, как оптимальней сделать?
    #39904935
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МуМу,

Секционируйте таблицу по номеру транзакции.
Тогда после обработки, удалить транзакцию из очереди можно будет переключением секции в служебную таблицу, которую затем усечь. Либо, если позволит версия, сразу truncate with partitions. Соответственно, фантомных строк не будет.
...
Рейтинг: 0 / 0
Очередь-таблица для репликации, как оптимальней сделать?
    #39904988
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МуМу
Из этой очереди необходимо данные читать и из нее необходимо удалять причем весьма интенсивно(по транзакционно).
...
зато решается вопрос с фрагментацией
...
Делаешь ребилд индексов, все становится нормально
А вот помнится мы говорили про InMemory :-) Как раз тот самый случай...
МуМу
Есть еще мысли подумать можно ли для этого InMеmory(со схемой без потери данных) таблицу прикрутить, хотя сомневаюсь.
Я бы это попробовал.
...
Рейтинг: 0 / 0
Очередь-таблица для репликации, как оптимальней сделать?
    #39904996
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МуМу
Из этой очереди необходимо данные читать и из нее необходимо удалять причем весьма интенсивно(по транзакционно).
Ещё вариант - не удалять, а апдэйтить флажок "обработано". А удалять потом, типа раз в сутки, даже можно секциями, если действительно много данных.
Тогда точно не будет фрагментации, и всяких этих ghost-пейджей.
...
Рейтинг: 0 / 0
Очередь-таблица для репликации, как оптимальней сделать?
    #39905000
Гавриленко Сергей Алексеевич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexeyvg,

Тогду нужен еще фильтрованый индекс по этому флагу. Плюс апдейт тоже не бесплатный.
...
Рейтинг: 0 / 0
Очередь-таблица для репликации, как оптимальней сделать?
    #39905008
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Читал в рекомендациях, для того, чтобы писатели не толпились нужна куча. Если нужен ключ, то его надо создавать некластерным. Четвертым вариантом была указана InMemory таблица.
...
Рейтинг: 0 / 0
Очередь-таблица для репликации, как оптимальней сделать?
    #39905013
Фотография МуМу
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Насчет секционирования не думал, не пробовал. Проверю! ну и с inMemory, тоже ,только там тоже вопрос издержек(транзакции могут быть длинные, хотя вроде блокировочное пространство не будет использоваться)
...
Рейтинг: 0 / 0
Очередь-таблица для репликации, как оптимальней сделать?
    #39905029
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гавриленко Сергей Алексеевич
Есдинственный сценарий, когда индексы не нужны, это когда таблица обрабатывается сразу челиклм, и сразу же очищается/удаляется.

Ну так репликаторы с CDC на триггерах обычно так и работают.
...
Рейтинг: 0 / 0
Очередь-таблица для репликации, как оптимальней сделать?
    #39905087
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гавриленко Сергей Алексеевич
alexeyvg,

Тогду нужен еще фильтрованый индекс по этому флагу. Плюс апдейт тоже не бесплатный.
Конечно.
Но всё таки не будет фрагментации, и вот этой проблемы фантомных записей.
Ни в чём не уверен, мои задачи с очередью не дорастали до больших нагрузок, так что сам всё это не пробовал...
...
Рейтинг: 0 / 0
21 сообщений из 21, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Очередь-таблица для репликации, как оптимальней сделать?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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