Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Заблокировать таблицу от удаления до конца транзакции
|
|||
|---|---|---|---|
|
#18+
Код: sql 1. 2. 3. 4. это ошибка? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.04.2018, 11:18 |
|
||
|
Заблокировать таблицу от удаления до конца транзакции
|
|||
|---|---|---|---|
|
#18+
Konst_Oneэто ошибка? чукча не читатель? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.04.2018, 11:20 |
|
||
|
Заблокировать таблицу от удаления до конца транзакции
|
|||
|---|---|---|---|
|
#18+
ну и вообще авторThe ability to specify the HOLDLOCK, SERIALIZABLE, READCOMMITTED, REPEATABLEREAD, or UPDLOCK hints on tables that are targets of INSERT statements will be removed in a future version of SQL Server. These hints do not affect the performance of INSERT statements. Avoid using them in new development work, and plan to modify applications that currently use them. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.04.2018, 11:27 |
|
||
|
Заблокировать таблицу от удаления до конца транзакции
|
|||
|---|---|---|---|
|
#18+
TaPaKKonst_Oneэто ошибка? чукча не читатель? я выделил пробел для ТС, если что. а вы читайте дальше синтаксис неправильный (я только про это, дальше сами занимайтесь маразмом в рамках данной задачи) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.04.2018, 11:31 |
|
||
|
Заблокировать таблицу от удаления до конца транзакции
|
|||
|---|---|---|---|
|
#18+
Konst_OneTaPaKпропущено... чукча не читатель? я выделил пробел для ТС, если что. а вы читайте дальше синтаксис неправильный (я только про это, дальше сами занимайтесь маразмом в рамках данной задачи) т.е. то что INDEX в хинет на insert вообще не опция(о чём и приведена ошибка), вас конечно не смущает ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.04.2018, 11:35 |
|
||
|
Заблокировать таблицу от удаления до конца транзакции
|
|||
|---|---|---|---|
|
#18+
TaPaKKonst_Oneпропущено... я выделил пробел для ТС, если что. а вы читайте дальше синтаксис неправильный (я только про это, дальше сами занимайтесь маразмом в рамках данной задачи) т.е. то что INDEX в хинет на insert вообще не опция(о чём и приведена ошибка), вас конечно не смущает так про это уже до меня сказали. или вы адвокат? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.04.2018, 11:51 |
|
||
|
Заблокировать таблицу от удаления до конца транзакции
|
|||
|---|---|---|---|
|
#18+
Konst_Oneэто ошибка? Это опечатка, без пробела тоже не работает. Да, необходимо уточнить, что если в 2х параллельных транзакциях записи в таблицах #tbEventToGroup не пересекаются по EventId, то они не должны блокировать друг друга. Konst_Oneпо EventId уникальный индекс? Нет, уникальный индекс только по tbEventCalculationList.Id Вообще эта таблица в разработке, и я могу повесить на EventId кластерный индекс, если это поможет решить задачу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.04.2018, 11:52 |
|
||
|
Заблокировать таблицу от удаления до конца транзакции
|
|||
|---|---|---|---|
|
#18+
Шамиль Фаридович, Кластерный индекс не делает поле уникальным. Если нет уникальности значения, то надо что бы все сесии знали что же за значения вы вставляете. А вообще бред какой-то, если первая сессия вставляет EventId1 и EventId2, вторая сессия встав EventId3, EventId1 втроую выбрасываем и теряем EventId3? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.04.2018, 11:58 |
|
||
|
Заблокировать таблицу от удаления до конца транзакции
|
|||
|---|---|---|---|
|
#18+
TaPaK если первая сессия вставляет EventId1 и EventId2, вторая сессия встав EventId3, EventId1 втроую выбрасываем и теряем EventId3? Почему выбрасываем? вторая сессия просто ждет, пока закончится первая. В то же самое время 3ья сессия с EventId4, EventId5 должна спокойно параллельно выполняться. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.04.2018, 12:04 |
|
||
|
Заблокировать таблицу от удаления до конца транзакции
|
|||
|---|---|---|---|
|
#18+
Шамиль Фаридович, авторвторая сессия просто ждет, пока закончится первая.зачем? в чём перформанс то? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.04.2018, 12:05 |
|
||
|
Заблокировать таблицу от удаления до конца транзакции
|
|||
|---|---|---|---|
|
#18+
Хотя честно говоря, со второй сессией все так просто. В #tbEventToGroup не зря есть поле DataFormingDate. Если на момент получения блокировки окажется, что в tbEventCalculationList самая последняя запись с EventId1 имеет DataFormingDate >= #tbEventToGroup.DataFormingDate, то строка с EventId1 будет удалена из #tbEventToGroup и данные по EventId1 во второй сессии сохраняться не будут. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.04.2018, 12:09 |
|
||
|
Заблокировать таблицу от удаления до конца транзакции
|
|||
|---|---|---|---|
|
#18+
TaPaKШамиль Фаридович, авторвторая сессия просто ждет, пока закончится первая.зачем? в чём перформанс то? Тут дело не производительности, а в целостности данных. Если разрешить конкурентам параллельно сохранять данные по одним и тем же EventId, то они моментально ее порушат. А еще могут потереть свежие данные старыми. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.04.2018, 12:13 |
|
||
|
Заблокировать таблицу от удаления до конца транзакции
|
|||
|---|---|---|---|
|
#18+
Шамиль ФаридовичTaPaKШамиль Фаридович, пропущено... зачем? в чём перформанс то? Тут дело не производительности, а в целостности данных. Если разрешить конкурентам параллельно сохранять данные по одним и тем же EventId, то они моментально ее порушат. А еще могут потереть свежие данные старыми. у вас какая-то странная/не правильная/отвратительная архитектура. Запретите параллельную вставку и не мучайте народ реализацией костыля ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.04.2018, 12:19 |
|
||
|
Заблокировать таблицу от удаления до конца транзакции
|
|||
|---|---|---|---|
|
#18+
TaPaK, стадия 1. Отрицание (или запрет). Даже не буду обсуждать требования заказчика. Лучше вернемся к сабжу, расширю постановку. Есть некая процедура по расчету стоимостей/группировке ивентов (примерный макет в первом сообщении - важно отметить, что в ней есть 2 больших блока - расчет данных во временных таблицах и их сохранение, обернутое в транзакцию). Ивент туда может передаться как 1, так и пол таблицы tbEvent (в ней сейчас 6M записей). Естественно, что те вызовы, в которые передали меньшее количество ивентов будут отрабатывать быстрее. Более того, маленькие вызовы чаще всего обладают более актуальными данными, и большой вызов, когда наконец допрется до начала транзакции, не должен перетирать пересчитанные за время его выполнения ивенты своими потерявшими актуальность данными. Для этого я хочу сделать таблицу tbEventCalculationList, в которую каждая транзакция будет класть список пересчитанных ей ивентов. И в начале транзакции пытаться вставить в эту таблицу ивенты из #tbEventToGroup за исключением тех, что потеряли актуальность и защитить этот диапазон от конкурентов. Пока я не придумал, как это реализовать. Есть альтернативный вариант Б: таблица tbEventCalculationState, куда скопируются все строки из tbEvent(и будут далее синхронизироваться), а каждая процедура по расчету будет просто менять DataFormingDate у соответствующих ивентов. Здесь вроде все просто, вешаешь holdlock и никто твои ивенты до конца транзакции не пересчитает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.04.2018, 12:44 |
|
||
|
Заблокировать таблицу от удаления до конца транзакции
|
|||
|---|---|---|---|
|
#18+
Шамиль ФаридовичБолее того, маленькие вызовы чаще всего обладают более актуальными данными, и большой вызов, когда наконец допрется до начала транзакции, не должен перетирать пересчитанные за время его выполнения ивенты своими потерявшими актуальность данными.Читайте про уровень изоляции SNAPSHOT и как там реализована защита от подобных случаев. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.04.2018, 12:59 |
|
||
|
Заблокировать таблицу от удаления до конца транзакции
|
|||
|---|---|---|---|
|
#18+
Шамиль Фаридович, А почему последовательно не хотите обрабатывать? Отправляйте все запросы в сервис брокер и выбирайте из очереди по одному. Если уж транзакции не устраивают. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.04.2018, 13:02 |
|
||
|
|

start [/forum/topic.php?fid=46&msg=39626021&tid=1689980]: |
0ms |
get settings: |
7ms |
get forum list: |
11ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
52ms |
get topic data: |
9ms |
get forum data: |
3ms |
get page messages: |
39ms |
get tp. blocked users: |
1ms |
| others: | 243ms |
| total: | 371ms |

| 0 / 0 |
