Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Принудительный ordered scan по временной таблице
|
|||
|---|---|---|---|
|
#18+
Владислав Колосовinvm - хорошим будет тот способ, который не использует сортировки и хинты, т.к. они не являются обычной практикой.Хорошим будет способ, который обеспечивает наиболее эффективное решение, а не наиболее соответствующий догмам. И вы так и не ответили в чем профит перекладывания во временную таблицы в данном конкретном случае. TaPaKсдаюсь.При параллельной вставке updlock+holdlock гарантирует отсутствие дубликатов. Либо отсутствие ругани о нарушении уникальности, если есть уникальный индекс Либо отсутствие предупреждения, если есть уникальный индекс с IGNORE_DUP_KEY = ON msLexRange локи накладываются на предыдущую записьНа следующую. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.10.2019, 13:58 |
|
||
|
Принудительный ordered scan по временной таблице
|
|||
|---|---|---|---|
|
#18+
invm msLexRange локи накладываются на предыдущую записьНа следующую. точно, все время путаю. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.10.2019, 14:03 |
|
||
|
Принудительный ordered scan по временной таблице
|
|||
|---|---|---|---|
|
#18+
invm, я же писал - в чем профит. Не нужна неочевидная стороннему разработчику сортировка в запросе и не требуется поддерживать сортировку в новых запросах. Кроме того, можно не перекладывать, а удалить лишнее. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.10.2019, 14:03 |
|
||
|
Принудительный ordered scan по временной таблице
|
|||
|---|---|---|---|
|
#18+
invmВладислав Колосовinvm - хорошим будет тот способ, который не использует сортировки и хинты, т.к. они не являются обычной практикой.Хорошим будет способ, который обеспечивает наиболее эффективное решение, а не наиболее соответствующий догмам. И вы так и не ответили в чем профит перекладывания во временную таблицы в данном конкретном случае. TaPaKсдаюсь.При параллельной вставке updlock+holdlock гарантирует отсутствие дубликатов. Либо отсутствие ругани о нарушении уникальности, если есть уникальный индекс Либо отсутствие предупреждения, если есть уникальный индекс с IGNORE_DUP_KEY = ON msLexRange локи накладываются на предыдущую записьНа следующую. почему не накладывать это на получатель? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.10.2019, 14:05 |
|
||
|
Принудительный ordered scan по временной таблице
|
|||
|---|---|---|---|
|
#18+
Владислав Колосовя же писал - в чем профит. Не нужна неочевидная стороннему разработчику сортировка в запросе и не требуется поддерживать сортировку в новых запросах. Кроме того, можно не перекладывать, а удалить лишнее. Слишком много слов, давайте вы на примере покажите как без not exists вы решаете следующую задачу есть таблица Код: sql 1. нужно реализовать процедуру Код: sql 1. принимающую на вход список id и добавляющую в dbo.dict, те что отсутствуют. процедура вызывается во много потоков, входящие id в разных потоках могут совпадать. для простоты (что бы не генерить дополнительных сущностей), список id будет # таблица Код: sql 1. создаваемая и заполняемая вне этой процедуры ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.10.2019, 14:12 |
|
||
|
Принудительный ordered scan по временной таблице
|
|||
|---|---|---|---|
|
#18+
TaPaKinvmпропущено... Хорошим будет способ, который обеспечивает наиболее эффективное решение, а не наиболее соответствующий догмам. И вы так и не ответили в чем профит перекладывания во временную таблицы в данном конкретном случае. пропущено... При параллельной вставке updlock+holdlock гарантирует отсутствие дубликатов. Либо отсутствие ругани о нарушении уникальности, если есть уникальный индекс Либо отсутствие предупреждения, если есть уникальный индекс с IGNORE_DUP_KEY = ON пропущено... На следующую. почему не накладывать это на получатель? потому что между exists (или left join) и insert проходит достаточно времени, чтобы другой поток вставил отсутствующие записи ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.10.2019, 14:14 |
|
||
|
Принудительный ordered scan по временной таблице
|
|||
|---|---|---|---|
|
#18+
msLexTaPaKпропущено... почему не накладывать это на получатель? потому что между exists (или left join) и insert проходит достаточно времени, чтобы другой поток вставил отсутствующие записи т.е. две транзакции в serializable на получателе смогут вот в тот фокус про достаточно времени? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.10.2019, 14:37 |
|
||
|
Принудительный ordered scan по временной таблице
|
|||
|---|---|---|---|
|
#18+
TaPaKт.е. две транзакции в serializable на получателе смогут вот в тот фокус про достаточно времени? конечно, можете проверить ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.10.2019, 14:41 |
|
||
|
Принудительный ordered scan по временной таблице
|
|||
|---|---|---|---|
|
#18+
msLexTaPaKт.е. две транзакции в serializable на получателе смогут вот в тот фокус про достаточно времени? конечно, можете проверить а разве не сразу получение всех блокировок, а потом выполнение? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.10.2019, 14:50 |
|
||
|
Принудительный ordered scan по временной таблице
|
|||
|---|---|---|---|
|
#18+
msLexTaPaKт.е. две транзакции в serializable на получателе смогут вот в тот фокус про достаточно времени? конечно, можете проверить вот вам простой репро создаем таблицу справочник Код: sql 1. и в двух (уже достаточно) потоках запускаем конкурентную вставку с serializable на получателе Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. переносим хинты ниже и снова запускаем в двух сессиях Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.10.2019, 14:53 |
|
||
|
Принудительный ordered scan по временной таблице
|
|||
|---|---|---|---|
|
#18+
TaPaKа разве не сразу получение всех блокировок, а потом выполнение? нет, конечно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.10.2019, 14:59 |
|
||
|
Принудительный ordered scan по временной таблице
|
|||
|---|---|---|---|
|
#18+
Если требуется исключить повторяющиеся - то почему бы не повесить уникальный констрейнт на таблицу ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.10.2019, 15:03 |
|
||
|
Принудительный ordered scan по временной таблице
|
|||
|---|---|---|---|
|
#18+
Cristiano_Rivaldo, Ничего лочить не надо будет. И дублей гарантированно не будет... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.10.2019, 15:04 |
|
||
|
Принудительный ordered scan по временной таблице
|
|||
|---|---|---|---|
|
#18+
Cristiano_RivaldoЕсли требуется исключить повторяющиеся - то почему бы не повесить уникальный констрейнт на таблицу ? и откатывать всю транзакцию, при его нарушении? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.10.2019, 15:04 |
|
||
|
Принудительный ordered scan по временной таблице
|
|||
|---|---|---|---|
|
#18+
msLex, Нужно написать грамотный блок обработки ошибок ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.10.2019, 15:05 |
|
||
|
Принудительный ordered scan по временной таблице
|
|||
|---|---|---|---|
|
#18+
Владислав Колосовя же писал - в чем профит. Не нужна неочевидная стороннему разработчику сортировка в запросеДля заботы о стронних разработчиках придумали комментарии. Владислав Колосовне требуется поддерживать сортировку в новых запросах.Зачем ее там поддерживать? Владислав КолосовКроме того, можно не перекладывать, а удалить лишнее.Задача - добавить из источника строки, отсутствующие в целевой таблице. Что тут лишнее, которое можно удалить? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.10.2019, 15:06 |
|
||
|
Принудительный ordered scan по временной таблице
|
|||
|---|---|---|---|
|
#18+
Cristiano_RivaldomsLex, Нужно написать грамотный блок обработки ошибок до блока ошибок, вставка в таблицу уже откатится если вставлять одну запись, вроде и не так жалко (хотя это уже двойная вставка в лог) а если за раз нужно вставить отсутствующие из 10000 входящих записей и вставка упадет из-за 1-й последней записи? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.10.2019, 15:09 |
|
||
|
Принудительный ordered scan по временной таблице
|
|||
|---|---|---|---|
|
#18+
msLex, при многопоточности должны быть очереди в любом проявлении - блокировки страниц или блокировки уровня приложения. Позвольте мне воздержаться от написания примера, мозг и так взрывается :) Ищу решение для каскадного удаления. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.10.2019, 15:13 |
|
||
|
Принудительный ordered scan по временной таблице
|
|||
|---|---|---|---|
|
#18+
invm, Зачем ее там поддерживать? Вот в этом и вопрос - разве одновременной выполнение другого запроса к этой же таблице не будет потенциальным источником взаимоблокировок? В нем ведь последовательность наложения блокировок не будет упорядоченной. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.10.2019, 15:16 |
|
||
|
Принудительный ordered scan по временной таблице
|
|||
|---|---|---|---|
|
#18+
msLex, Да вы правы, спасибо. В последнее время на такое просто вешаем игнор и фиг с ним ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.10.2019, 15:16 |
|
||
|
Принудительный ordered scan по временной таблице
|
|||
|---|---|---|---|
|
#18+
msLex, Да - от ошибки нарушения уникальности никуда не денешься... Но есть практики,которые позволяют заинсертить большое количество данных в максимально короткое время. Чем быстрее завершится insert - тем меньше шансов на дубли. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.10.2019, 15:16 |
|
||
|
Принудительный ordered scan по временной таблице
|
|||
|---|---|---|---|
|
#18+
invmЗадача - добавить из источника строки, отсутствующие в целевой таблице. Что тут лишнее, которое можно удалить? Поясню. Во временной таблице находится набор потенциально избыточных данных, это следует из запроса ниже, который фильтрует эти избыточные данные. Если избыточные данные удалить из временной таблице перед вставкой и исключить из запроса фильтр, то проблема взаимоблокировок не появится. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.10.2019, 15:19 |
|
||
|
Принудительный ordered scan по временной таблице
|
|||
|---|---|---|---|
|
#18+
Владислав КолосовmsLex, при многопоточности должны быть очереди в любом проявлении - блокировки страниц или блокировки уровня приложения. т.е. блокировки уровня ключей вас не устраивают, а страницами пожалуйста Владислав КолосовПозвольте мне воздержаться от написания примера, мозг и так взрывается :) Я не в коем случае не заставляя вас, просто хотелось понять на примере простого кода о чем вы говорите. Мне до сих пор не понятно как вы решаете проблему многопоточной конкурентной вставки в уникальный ключ. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.10.2019, 15:21 |
|
||
|
Принудительный ordered scan по временной таблице
|
|||
|---|---|---|---|
|
#18+
Cristiano_RivaldomsLex, Да - от ошибки нарушения уникальности никуда не денешься... денешься. один из вариантов показан выше ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.10.2019, 15:22 |
|
||
|
|

start [/forum/topic.php?fid=46&msg=39879906&tid=1687086]: |
0ms |
get settings: |
10ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
282ms |
get topic data: |
14ms |
get forum data: |
4ms |
get page messages: |
80ms |
get tp. blocked users: |
2ms |
| others: | 251ms |
| total: | 663ms |

| 0 / 0 |
