|
Дубли строк
|
|||
---|---|---|---|
#18+
здравствуйте, работаю в компании по обслуживанию колл-центров. столкнулся с такой проблемой: У меня есть БД c: 1. таблицы: [DialerDetail], [Main] 2. процедура InsertScriptCall(вызывается при сохранении результата со скрипта(сайта)) и InsertDialerCall(вызывается при сохранении результатов звонков с дайлера) Процедура "InsertScriptCall" - сохраняет результат в таблицу [Main] Процедура "InsertDialerCall" - вытягивает данные с таблицы [DialerDetail], сводит данные и переносит в таблицу [Main]. В этих процедурах идет проверка на уникальность записей в таблице [Main] допустим по ключам RCD и RCKD. Если есть такие ключи, то происходит Update записи, если не находи, то происходит Insert Сложившееся проблема: Эти две процедуры могут вызваться одновременно и в итоге могут создаться дублирующие строчки с одинаковым RCD и RCKD. Я это заметил, когда увидел дубли и у них Дата создания отличается в пару долисекунд. Создание уникального индекса RCD и RCKD не вариант, так как есть ситуация, где надо создать еще одну строчку с теми же RCD и RCKD. Какие варианты мы рассматривали: 1. Прописать: SET TRANSACTION ISOLATION LEVEL SERIALIZABLE BEGIN TRANSACTION COMMIT TRANSACTION SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED В итоге получили много deadlock 2. пробовали еще вместо Update и Insert написать Merge, но появляется много зависших сессий. 3. думали создать еще одну таблицу для сохранения результатов процедуры "InsertScriptCall", например [ScriptResult]. и потом делать Job, которая по очереди перетягивает данные с таблицы [ScriptResult] и [DialerDetail] все в таблицу [Main] и тогда не будет дублей по одновременной вставке. Буду рад, если поможете с советом ... |
|||
:
Нравится:
Не нравится:
|
|||
25.04.2019, 14:30 |
|
Дубли строк
|
|||
---|---|---|---|
#18+
ybuivovkесть ситуация, где надо создать еще одну строчку с теми же RCD и RCKD. Ну и забей. За всё надо платить, в том числе и за денормализацию. Если на твоей СУБД хранимые агрегаты толком не работают - никак их не заставишь. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
25.04.2019, 14:35 |
|
Дубли строк
|
|||
---|---|---|---|
#18+
ybuivovkКакие варианты мы рассматривали: 1. Прописать: SET TRANSACTION ISOLATION LEVEL SERIALIZABLE BEGIN TRANSACTION COMMIT TRANSACTION SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED Это слишком мощная штука, т.к. действует на все ресурсы транзакции. Если Вам нужно выстроить очередь для конкретно вставки звонков - организуйте именно для этого участка подобие семафора (это может быть, например, служебная запись в служебной таблице, обновляемая перед проверкой, или СУБД-специфичные средства). ... |
|||
:
Нравится:
Не нравится:
|
|||
25.04.2019, 15:20 |
|
|
start [/forum/topic.php?fid=32&fpage=5&tid=1539939]: |
0ms |
get settings: |
10ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
44ms |
get topic data: |
14ms |
get forum data: |
3ms |
get page messages: |
48ms |
get tp. blocked users: |
2ms |
others: | 246ms |
total: | 390ms |
0 / 0 |