| 
    
        
     
     | 
    
  | 
Уровни изоляции и блокировки в MSSQL | ☑ | ||
|---|---|---|---|---|
| 
    0
    
        paxan    
     04.10.19 
            ✎
    13:35 
 | 
         
        Здравствуйте. Разбираюсь с управляемыми блокировками в 1с 8.3 Чем больше читаю, тем больше запутался) Просьба пояснить - уровни изоляции и виды блокировок на стороне сервера SQL это разные ведь вещи? Как-то на итс про это слишком упрощенно написано, а статьи в инете кишат ошибками даже в терминах, что еще больше запутывает. Может кто подскажет где лучше про это почитать? Уровень изоляции - он от чего зависит и кто его устанавливает?     
         | 
|||
| 
    1
    
        ДенисЧ    
     04.10.19 
            ✎
    13:39 
 | 
         
        Да, это разные вещи.     
         | 
|||
| 
    2
    
        ДенисЧ    
     04.10.19 
            ✎
    13:40 
 | 
         
        Уровень изоляции устанавливается в свойствах базы и может меняться в запросе.     
         | 
|||
| 
    3
    
        unenu    
     04.10.19 
            ✎
    13:46 
 | 
||||
| 
    4
    
        H A D G E H O G s    
     04.10.19 
            ✎
    13:58 
 | 
         
        (0) Уровни изоляции и блокировки - это разные, но связанные вещи.     
         | 
|||
| 
    5
    
        Trier    
     04.10.19 
            ✎
    14:10 
 | 
         
        (0) Управляемые блокировки - это блокировки на стороне 1С, управляемые менеджером блокировок. В случае, если срабатывает эта блокировка, запрос до СУБД даже не доходит.
 
        Отдельно есть СУБД, где уровень изоляции напрямую зависит от платформы 1С. Так, в платформе 8.3 без совместимости с 8.2. MSSQL работает с уровнем изоляции read commited snapshot. В зависимости от установленного уровня изоляции транзакций накладываются различные блокировки - например в указанном выше случае запросы в транзакции 1С не накладывают блокировки на СУБД.  | 
|||
| 
    6
    
        paxan    
     04.10.19 
            ✎
    16:13 
 | 
         
        А какие данные будут читаться в запросе, который выполняется в транзакции (1с 8.3), если при этом явно не установлены никакие управляемые блокировки? Попадут только завершенные транзакции или будет грязное чтение?     
         | 
|||
| 
    7
    
        paxan    
     04.10.19 
            ✎
    16:19 
 | 
         
        (2) Можно чуть подробней про то, что означает "уровень изоляции может менять в запросе"? Я не знаток особый SQL..  Я правильно понимаю, что запрос отправляемый с 1с в СУБД кроме указания что собственно мы хотим получить также передает это самый уровень изоляции который мы хотим поставить. Это имеется ввиду?     
         | 
|||
| 
    8
    
        H A D G E H O G s    
     04.10.19 
            ✎
    16:47 
 | 
         
        (6) Только завершенные     
         | 
|||
| 
    9
    
        ДенисЧ    
     04.10.19 
            ✎
    16:57 
 | 
         
        (7) " Можно чуть подробней про то, что означает "уровень изоляции может менять в запросе"?"
 
        SELECT * FROM MyTable (NOLOCK) - поменяли уровень изоляции для данного запроса.  | 
|||
| 
    10
    
        ДенисЧ    
     04.10.19 
            ✎
    16:57 
 | 
         
        (6) Грязного не будет.     
         | 
|||
| 
    11
    
        paxan    
     04.10.19 
            ✎
    17:22 
 | 
         
        Спасибо за всем за ответы! Прочитал про уровни изоляции на спецфорумах по скулю, в частности про уровень "READ COMMITTED", с которым кая я понял и работает 8.3. Становится потихоньку понятно почему при использовании этого уровня и нужны управляемые блокировки на стороне 1с. 
 
        Как я понял при этом уровне изоляции читаются уже завершенные транзакции, т.е грязного чтения то не будет, но блокировка на запись снимается СРАЗУ после выполнения запроса пусть он и в транзакции, и это самое главное (а не до конца транзакции как при авто), поэтому далее в продолжении транзакции мы не можем гарантировать неповторяемого чтения и возможны фантомы, если со стороны 1с не поставить "забор" в виде дополнительных управляемых блокировок, чтобы если сработала упр. блокировка на стороне 1с запрос до СУБД не доходил. Просьба поправить, если не так )  | 
|||
| 
    12
    
        paxan    
     04.10.19 
            ✎
    17:33 
 | 
         
        Добавлю, что по сути "уровень изоляции" это описание того, что со стороны СУБД разрешено с данными, прочитанными/записанными в запросе и как именно (сразу после выполнения запроса или до окончания транзакции).     
         | 
|||
| 
    13
    
        Sapiens_bru    
     04.10.19 
            ✎
    17:51 
 | 
         
        (11) Да, ты прав. 
 
        Но и Read Commited это не плохо. В автоматическом режиме блокировок вместо него был Repetable Read, который как-раз не отпускал S блокировку до конца транзакции. Но это порождало дополнительные блокировки. Например считал ты в транзакции остатки товаров и ещё зачем-то считал цены номенклатуры по этим товарам - repetable read поставит S блокировки на ВСЕ таблицы что были в запросах в транзакции. Часто ошибаются, думая что блокировки это ключевое слово ДЛЯ ИЗМЕНЕНИЯ, но это не так. ДЛЯ ИЗМЕНЕНИЯ ставит на считанные таблицы U блокировку вместо S. Переход на управляемые блокировки дал возможность блокировать именно то что надо, избегая блокировок лишних таблиц.  | 
|||
| 
    14
    
        H A D G E H O G s    
     04.10.19 
            ✎
    17:57 
 | 
         
        (13) "Переход на управляемые блокировки дал возможность блокировать именно то что надо, избегая блокировок лишних таблиц."
 
        Расскажи это Фузиновцам.  | 
|||
| 
    15
    
        Cyberhawk    
     04.10.19 
            ✎
    18:20 
 | 
         
        (5) "например в указанном выше случае запросы в транзакции 1С не накладывают блокировки на СУБД" // Ошибаешься     
         | 
|||
| 
    16
    
        Cyberhawk    
     04.10.19 
            ✎
    18:21 
 | 
         
        +(15) Хотя... лень накатила     
         | 
|||
| 
    17
    
        rphosts    
     04.10.19 
            ✎
    18:23 
 | 
         
        (14) у тебя просто на них аллергия. И да, у них нет реально крупных внедрений, похоже, поэтому нет смысла думать о многом.     
         | 
|||
| 
    18
    
        rsv    
     04.10.19 
            ✎
    20:59 
 | 
         
        (0) "Спасибо за всем за ответы! Прочитал про уровни изоляции на спецфорумах по скулю, в частности про уровень "READ COMMITTED", с которым кая я понял и работает 8.3 "
 
        Поставте в свойствах базы режим автоматический - и будет другая история. Уровни изоляции - это уровни согласованности данных . А способы достижения этих уровней - либо блокировки либо версии.  | 
|||
| 
    19
    
        Bro    
     04.10.19 
            ✎
    21:02 
 | 
         
        (14) фузионцы знают такую штуку как версионники.     
         | 
|||
| 
    20
    
        Bro    
     04.10.19 
            ✎
    21:04 
 | 
         
        (17) спросите у tada про крупные внедрения. Он нас не любит, но думаю даже при этом отрицать не будет     
         | 
|||
| 
    21
    
        rsv    
     04.10.19 
            ✎
    21:04 
 | 
         
        как достигаются  требования ansi блокировками или версиями .... главное чтобы достигались.     
         | 
|||
| 
    22
    
        Bro    
     04.10.19 
            ✎
    21:05 
 | 
         
        (18) А еше postgresql поставьте при этом. Совсем весело будет.     
         | 
|||
| 
    23
    
        rsv    
     04.10.19 
            ✎
    21:09 
 | 
         
        (22) без разницы  какая субд - поставили автомат в свойствах   значит поедет serializable . как будет обеспечивать это субд без разницы.     
         | 
|||
| 
    24
    
        Bro    
     04.10.19 
            ✎
    21:09 
 | 
         
        (21) версиями читатель не блокирует писателя. Что на порядок повышает масштабируемость.     
         | 
|||
| 
    25
    
        Bro    
     04.10.19 
            ✎
    21:11 
 | 
         
        (23) вы документацию вообще читали. В версионниках 1с таблицы блокирует целиком. То есть их логику serializable не использует. Хотя может что то изменилось в этом плане.     
         | 
|||
| 
    26
    
        rsv    
     04.10.19 
            ✎
    21:12 
 | 
         
        поставили управляемые в свойствах - поехал READ COMMITTED плюс стал доступным прикладной механизм 1С управляемые блокировки     
         | 
|||
| 
    27
    
        Bro    
     04.10.19 
            ✎
    21:20 
 | 
         
        (26) и? Вы же написали как это будет обеспечивать СУБД без разницы. Когда вы ставите автоматические блокировки, никакой serializable в версионниках не включается.     
         | 
 | Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |