|
Guid как id для многомилионной таблицы (тормоза)
|
|||
---|---|---|---|
#18+
medoed zeon11 medoed, Про логику синхронизации не пояснили, но судя по по приведённому Вами запросу с DELETE в этой логике не всё оптимально. Т.е. по всей видимости сначала "набиваем под завязку" данными таблицу, а потом из таблицы "вычёркиваем" то, что не пригодилось. Закономерно при таком подходе с ростом количества записей механизм будет проседать по производительности всё сильнее и сильнее, и замена GUID на любой другой идентификатор только даст временную отсрочку. Может быть есть возможность пересмотреть алгоритм синхронизации? Скорее вы правы. План и то что в нём не нравится прилагаю. Переписать есть возможность - а как бы вы сделали? Во время вставки в первую таблицу , триггер на ней прикрутить, который будет данные синхронизировать во второй? Но мне кажется это тоже не самый гут вариант. я бы подумал насчет тригера но простого вставлять ид-ки УДАЛЕННЫХ записей в ОТДЕЛЬНУЮ ТАБЛИЦУ DEL_IDS - А ЕЕ уже юзать для удаления - она ж по идее будет небольшая - и удаление возможно будет быстрее Если я правильно понял по I/U проблем нет - но в принципе если пишется то можно lastupdate тоже по тригеру (I/U) писать (или вставлять в исх) - и выщемить Дельту по этой дате ps Я видел подход с тригером для удаленных записей вообще универсальный была одна таблица id , <table_name> и для каждой таблицы в OLTP был сделан тригер к-й писал и эта таблица закачивалась и юзалась для удаления старых записей потом в DWH. Имхо вполне рабочий и разумный подход. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.03.2021, 11:38 |
|
Guid как id для многомилионной таблицы (тормоза)
|
|||
---|---|---|---|
#18+
Гулин Федор medoed пропущено... Скорее вы правы. План и то что в нём не нравится прилагаю. Переписать есть возможность - а как бы вы сделали? Во время вставки в первую таблицу , триггер на ней прикрутить, который будет данные синхронизировать во второй? Но мне кажется это тоже не самый гут вариант. я бы подумал насчет тригера но простого вставлять ид-ки УДАЛЕННЫХ записей в ОТДЕЛЬНУЮ ТАБЛИЦУ DEL_IDS - А ЕЕ уже юзать для удаления - она ж по идее будет небольшая - и удаление возможно будет быстрее Если я правильно понял по I/U проблем нет - но в принципе если пишется то можно lastupdate тоже по тригеру (I/U) писать (или вставлять в исх) - и выщемить Дельту по этой дате ps Я видел подход с тригером для удаленных записей вообще универсальный была одна таблица id , <table_name> и для каждой таблицы в OLTP был сделан тригер к-й писал и эта таблица закачивалась и юзалась для удаления старых записей потом в DWH. Имхо вполне рабочий и разумный подход. Видел системы на триггерах, организованные подобным способом - давали жуткие блокировки они. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.03.2021, 11:47 |
|
Guid как id для многомилионной таблицы (тормоза)
|
|||
---|---|---|---|
#18+
medoed Видел системы на триггерах, организованные подобным способом - давали жуткие блокировки они. вообще-то фраза ни о чем ... |
|||
:
Нравится:
Не нравится:
|
|||
17.03.2021, 12:56 |
|
Guid как id для многомилионной таблицы (тормоза)
|
|||
---|---|---|---|
#18+
medoed Владислав Колосов, С утра разовая вставка порядка 50 к записей. Ну и днём могут прилетать небольшие изменения(каждые 15 минут) по 100-500 записей. Вопрос с таким объёмом можно решить при помощи триггера. но пока не ясно, что представляет из себя синхронизация при совпадении ключей в источнике и получателе, в каких случаях происходит удаление строк на получателе? ... |
|||
:
Нравится:
Не нравится:
|
|||
17.03.2021, 16:27 |
|
Guid как id для многомилионной таблицы (тормоза)
|
|||
---|---|---|---|
#18+
Ролг Хупин medoed Видел системы на триггерах, организованные подобным способом - давали жуткие блокировки они. вообще-то фраза ни о чем Напомнило фильм о Калиостро. - Видел я их Италию на карте. Сапог - сапогом... ... |
|||
:
Нравится:
Не нравится:
|
|||
17.03.2021, 20:11 |
|
Guid как id для многомилионной таблицы (тормоза)
|
|||
---|---|---|---|
#18+
medoed 1) Внешняя система заливает данные по проводкам в первичную таблицу как есть, при этом в виде guid каждой строки генерится рандомно и уникально набор символов, близкий по смыслу к GUID. По этому полю построен индекс (некластерный). Первичная таблица не чистится перед заливкой? Можете показать пример запроса, который выполняет внешняя система? medoed 2) Есть уже реальная таблица в витрине с таким же именем и почти такой же структурой, которая синхронизируется с таблицей из пункта 1) ... |
|||
:
Нравится:
Не нравится:
|
|||
17.03.2021, 22:34 |
|
|
start [/forum/topic.php?fid=46&gotonew=1&tid=1684940]: |
0ms |
get settings: |
10ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
64ms |
get topic data: |
9ms |
get first new msg: |
7ms |
get forum data: |
2ms |
get page messages: |
49ms |
get tp. blocked users: |
1ms |
others: | 310ms |
total: | 475ms |
0 / 0 |