Gerenciamento de bloqueio transacional. Definir a configuração para bloqueios gerenciados O modo de bloqueio automático não é permitido em uma transação

Os principais motivos para mudar para bloqueios gerenciados são:

  • O principal motivo é a recomendação de 1C: Especialista com base em indicações ou 1C: MCC
  • Problemas com o trabalho do usuário simultâneo ()
  • Usando Oracle, PostgreSQL e.

Custo do trabalho:

A essência dos bloqueios gerenciados

Ao operar no modo automático de controle de bloqueio 1C: a empresa define um alto grau de isolamento de dados em uma transação no nível de DBMS. Isso permite que você exclua completamente a possibilidade de receber dados inconsistentes ou incorretos sem nenhum esforço especial por parte dos desenvolvedores de aplicativos.

É confortável e a abordagem certa no Pequena quantidade usuários ativos. O preço da facilidade de desenvolvimento é uma certa quantidade de bloqueios redundantes no nível do DBMS. Esses bloqueios estão associados tanto às peculiaridades da implementação dos mecanismos de bloqueio no próprio SGBD, quanto ao fato de que o SGBD não pode levar em consideração (e não levar em consideração) o significado físico e a estrutura de 1C: Objetos de metadados corporativos.

Ao trabalhar com alta contenção de recursos (um grande número de usuários), em algum momento, o efeito de redundância de bloqueios torna-se perceptível em termos de desempenho em modo paralelo.

Depois que a configuração é alternada para o modo controlado, a plataforma é ativada funcionalidade adicional O "gerenciador de bloqueio" e o controle sobre a integridade dos dados agora são realizados não no SGBD, mas no servidor 1C. Isso aumenta a carga no hardware do servidor 1C (processadores mais rápidos e mais memória são necessários) e, na verdade, introduz até mesmo uma ligeira desaceleração (alguns por cento), no entanto, melhora significativamente a situação com bloqueios (menos bloqueios devido a bloqueios em um objeto , e não em uma combinação de tabelas, menos área de bloqueio e, em alguns casos, menos vida útil de bloqueios de leitura, ou seja, não até o final da transação). Isso melhora o paralelismo geral.


Novas configurações da empresa 1C são implementadas imediatamente em modo controlado.

  • Pergunta: É possível fazer uma auditoria primeiro e depois transferir para o UB?

Resposta: É possível, a auditoria servirá como uma justificativa adicional para a conveniência de transferência para bloqueios gerenciados, bem como avaliar a contribuição dos bloqueios automáticos para a desaceleração geral e se esforços adicionais são necessários além da transferência.

  • Pergunta: Para transferir para UB, que tipo de acesso você precisa fornecer - RDP, TeamViewer? Ou posso enviar um arquivo de configuração?

Resposta: Tentamos não limitar uma tecnologia específica acesso remoto, encaixa qualquer tecnologia de acesso remoto... Se não importa para você, o RDP é mais prático.
Podemos realizar uma otimização no arquivo de configuração enviado, mas não poderemos depurar alguns dados reais e você terá que testar com mais cuidado. Se realizarmos a otimização em uma cópia do banco de dados, podemos testá-la exaustivamente antes de enviarmos o resultado do trabalho.

  • Pergunta: Temos 10 programadores em tempo integral que mudam algo na configuração todos os dias. O armazenamento de configuração compartilhada é usado. " Como a interação será organizada durante a transferência para o UB? Ou todos os programadores deveriam sair de férias?

Resposta: Como regra, nossas alterações são feitas em alguns dias. O restante do tempo é gasto testando as mudanças realizadas, inclusive do ponto de vista da lógica exigida determinada pelo negócio e não por considerações técnicas. Nós podemos fazer mudanças em arquivo separado configuração cf, e então seu programador irá adicioná-lo ao repositório. Você não tem que mandar ninguém de férias... Em outras opções de interação, você só precisa concordar sobre quais objetos seus desenvolvedores planejam apreender, para que possamos construir um plano de trabalho que seja conveniente para ambas as partes. Como regra, seus desenvolvedores não precisam capturar toda a configuração ou nos dar a "roda" por um dia.

Mecanismo bloqueios transacionais usado para acesso de usuário simultâneo ao DBMS.
Uma transação é um tipo de operação indissolúvel durante a qual o estado da base muda. Este é o quantum mínimo de mudanças: você não pode fazer uma meia transação; se a transação não for concluída, o banco de dados será revertido para o estado inicial.
Como uma transação captura uma matriz de dados, surge uma nuance em relação ao acesso a essa matriz: por exemplo, uma transação altera os dados, enquanto outra tenta lê-los. O resultado da leitura pode estar incorreto, porque não liga mudanças recentes... Portanto, o isolamento da transação funciona no nível do DBMS. Os seguintes níveis de isolamento são possíveis:

  • Leia sem compromisso- enquanto uma transação altera a matriz, outra não pode alterá-la, mas pode ler. Nível de isolamento mais baixo.
  • Leia confirmada- enquanto uma transação altera a matriz, a outra não pode alterar nem lê-la
  • Leitura repetível- enquanto uma transação lê a matriz, outra não pode alterá-la, mas pode ler
  • Serializável- enquanto uma transação lê o array, a outra não pode alterar nem lê-lo. Todas as operações são sequenciais. Nível máximo de isolamento.

Se a configuração 1C: Enterprise estiver definida modo de bloqueio automático, então o nível de isolamento da transação é selecionado pelo DBMS. No caso do MS SQL, será Leitura repetível ou Níveis serializáveis, ou seja, o isolamento dos dados está próximo do máximo. Isso resolve problemas com a correção dos dados, mas pode levar ao aparecimento de bloqueios no nível do DBMS durante o trabalho intensivo do usuário. Portanto, 1C: Enterprise tem sua própria funcionalidade para trabalhar com bloqueios, que é ativada ao habilitar o modo de bloqueios gerenciados. Nesse caso, o nível de isolamento da transação do MS SQL será confirmado por leitura. A própria plataforma isolará os dados sem depender do DBMS.

A ativação do modo de bloqueio gerenciado ocorre nas propriedades de configuração:

Além disso, o modo de bloqueio pode ser definido para objetos de configuração específicos:

Se a configuração como um todo estiver definida Modo automático bloqueios, todas as transações em todos os registros funcionarão no modo automático, independentemente do modo definido para o objeto de configuração. Se gerenciado - então da mesma forma, todas as transações serão gerenciadas. Se a configuração for definida como Automática e Controlada, o modo de cada objeto será determinado por suas configurações.

Há um ponto para os modos Automático e Controlado. Uma única transação para o usuário pode representar várias transações do ponto de vista da plataforma. Por exemplo, navegar interativamente por um documento no registro torna dois uma transação é um registro do próprio documento e, dentro dessa transação, é um registro de um conjunto de linhas por registro. Dependendo do modo de controle dos bloqueios do próprio documento e do registro movido por ele, quatro situações são possíveis:

  1. Modo de documento Automático, modo de registro Automático ->
  2. Modo de documento Gerenciado, modo de registro Gerenciado -> escrever por registro no modo controlado
  3. Modo de documento Automático, modo de registro Guiado -> gravação por registro no modo automático
  4. Modo de documento gerenciado, modo de registro Automático -> exceção (erro)

Questão 06.59 do exame 1C: Profissional na plataforma. Ao postar um documento em um registro, se o documento tiver um modo de gerenciamento de bloqueios transacionais automáticos e o registro tiver um modo controlado (nas propriedades de configuração, a opção "Automático e gerenciado" é usada), então tal lançamento resultará em :

A resposta correta é a segunda, determinamos pela primeira transação, se é automática, então tudo é automático.

Questão 06.60 do exame 1C: Profissional por plataforma. Ao postar um documento em um registro, se o documento tiver um modo de gerenciamento de bloqueios transacionais controlado e o registro for automático (a opção "Automático e controlado" é usada nas propriedades de configuração), tal condução resultará em:

  1. para uma situação de erro
  2. toda a transação será realizada automaticamente
  3. toda a transação será executada de forma controlada

A primeira resposta correta é determinada pela primeira transação, se controlada, então um erro.

Questão 06.61 do exame 1C: Profissional na plataforma. Ao postar um documento em qualquer cadastro, se o documento possuir um modo de gerenciamento de travas transacionais automático e o cadastro possuir um controlado (nas propriedades de configuração se utiliza a opção "Controlado"), tal conduta resultará em:

  1. para uma situação de erro
  2. toda a transação será realizada automaticamente
  3. toda a transação será executada de forma controlada

Mecanismo de gerenciamento de bloqueio de dados em uma transação, permite o bloqueio de dados mutáveis ​​não por meio do sistema de gerenciamento de banco de dados utilizado, mas por meio da plataforma. Esse gerenciamento de bloqueio de dados não é executado em termos de dados DBMS, mas em termos de domínio. Isso permite que bloqueios mais precisos sejam aplicados e aumenta a simultaneidade do usuário.

Configuração 1C: Enterprise 8 pode operar em um dos três modos de gerenciamento de bloqueios em uma transação:

  • auto;
  • gerenciado - modo padrão para novas configurações;
  • automático e controlado.

V modo automático o gerenciamento de bloqueio de dados usa os níveis de isolamento de transação serializável e leitura repetível fornecidos pelo sistema de gerenciamento de banco de dados. Esses níveis de isolamento de transação fornecem uma leitura consistente e consistente dos dados e nenhuma ação adicional é necessária do desenvolvedor para gerenciar os bloqueios.

Modo controlado permite aumentar o paralelismo dos usuários no modo cliente-servidor de trabalho devido ao uso de um nível inferior de isolamento das transações do banco de dados (Read Committed). Ao gravar dados em uma transação, os objetos de linguagem incorporados bloqueiam automaticamente os dados necessários. Um desenvolvedor precisa gerenciar bloqueios de dados quando a lógica de negócios requer leitura consistente e consistente de dados em uma transação.

Automático e controlado o modo permite usar a capacidade de gerenciar bloqueios em uma transação apenas para alguns objetos de configuração. Este modo pode ser usado para otimizar a simultaneidade do usuário com objetos de aplicativos individuais (por exemplo, com vários dos documentos mais usados) ou para transferir gradualmente grandes configurações para o modo de gerenciamento de bloqueio de transação.

De forma resumida, as diferenças ao operar no modo de intertravamento automático e no modo de intertravamento controlado são mostradas na tabela a seguir:

Na maioria das vezes, a necessidade de gerenciar bloqueios de dados em uma transação surge no processo de lançamento de documentos, quando você precisa ler e gravar os dados alterados nas mesmas tabelas. Por exemplo, se o saldo for verificado durante o lançamento do documento.

Principalmente para isso, os conjuntos de registros de registros de acumulação e registros contábeis possuem uma propriedade BlockForChange.

Caso necessite controlar os saldos, e posteriormente registrar os movimentos no mesmo registro, esta propriedade deve ser configurada para o conjunto de registros deste registro na propriedade Movimento.

O efeito desta propriedade é o mesmo como se o desenvolvedor instalasse independentemente (escreveu no código) os bloqueios gerenciados 1C: Enterprise 8. A plataforma irá definir automaticamente o bloqueio gerenciado necessário ao gravar este conjunto de registros. Como resultado, outras transações gerenciadas que usam um bloqueio semelhante não poderão começar a ler este registro até que a transação atual termine.

Abaixo está um exemplo de controle "manual" de bloqueios de dados ao ler dados de registro de acumulação. AccountingNomenclature no processamento de postagem de documento Fatura de Vendas... Neste exemplo, bloqueios gerenciados são criados e configurados inteiramente por meio da linguagem incorporada.

O sistema 1C: Enterprise permite que você use dois modos de trabalhar com o banco de dados: o modo de bloqueios automáticos em uma transação e o modo de bloqueios controlados em uma transação.

A diferença fundamental entre esses modos é a seguinte. O modo de bloqueio automático não requer que o desenvolvedor execute nenhuma ação para gerenciar os bloqueios em uma transação para fazer isso. Essas regras são fornecidas pela plataforma 1C: Enterprise por meio do uso de certos níveis de isolamento de transação em um DBMS específico. Este modo de operação é o mais fácil para o desenvolvedor, mas em alguns casos (por exemplo, com trabalho simultâneo intensivo um grande número usuários), o nível de isolamento de transação usado no SGBD não pode fornecer paralelismo suficiente, que se manifesta na forma de um grande número de conflitos de bloqueio quando os usuários trabalham.

Ao operar no modo de fechaduras controladas, o sistema 1C: Enterprise usa muito mais nível baixo isolamento de transações no SGBD, o que pode aumentar significativamente o paralelismo dos usuários soluções aplicadas... No entanto, ao contrário do modo de bloqueio automático, este nível o isolamento de transações não pode mais, por si só, impor todas as regras para trabalhar com dados em uma transação. Portanto, ao trabalhar em um modo controlado, o desenvolvedor deve gerenciar de forma independente os bloqueios configurados na transação.

De forma resumida, as diferenças ao operar no modo de intertravamento automático e no modo de intertravamento controlado são mostradas na tabela a seguir:

Definir o modo de bloqueio na configuração

A configuração possui a propriedade Data Lock Control Mode. Cada objeto de configuração do aplicativo também possui uma propriedade Data Lock Control Mode.
O modo de controle de bloqueio de dados para toda a configuração pode ser definido como Automático, Gerenciado (o padrão para uma nova configuração) e Automático e Gerenciado. Os valores Automático e Controlado significam que o modo de bloqueio correspondente será usado para todos os objetos de configuração, independentemente dos valores definidos para cada um dos objetos. O valor Automático e controlado significa que para um objeto de configuração específico será utilizado o modo especificado em sua propriedade Modo de controle de bloqueio de dados: Automático ou Controlado.
Deve-se notar que o modo de controle de bloqueio de dados especificado para o objeto de metadados é definido para aquelas transações que são iniciadas pelo sistema 1C: Enterprise ao trabalhar com os dados deste objeto (por exemplo, ao modificar os dados do objeto).
Se, por exemplo, uma operação de gravação de objeto é realizada em uma transação iniciada pelo desenvolvedor (o método StartTransaction ()), então o modo de controle de bloqueio de dados será determinado pelo valor do parâmetro Modo de bloqueio
o método StartTransaction (), não o valor da propriedade do objeto de metadados Modo de Controle de Bloqueio de Dados.
Por padrão, o Modo de Bloqueio é definido como Modo de Gerenciamento DataLock. Automático, então o
para usar o modo de bloqueio gerenciado em uma transação explícita, você deve especificar o valor deste parâmetro
Modo de gerenciamento DataLock.

Trabalhar com bloqueios gerenciados usando a linguagem incorporada

Para gerenciar bloqueios em uma transação, o objeto de linguagem interno DataLock é usado. Este objeto pode ser instanciado usando o construtor e permite que você descreva os espaços de bloqueio e modos de bloqueio necessários. Para definir todos os bloqueios criados, use o método Lock () do objeto DataLock. Se este método for executado em uma transação (explícita ou implícita), os bloqueios são adquiridos e serão liberados automaticamente ao final da transação. Se o método Lock () for executado fora de uma transação, nenhum bloqueio será adquirido.

As condições são definidas na igualdade do valor do campo com o valor especificado ou na ocorrência do valor do campo no intervalo especificado.
As condições podem ser definidas de duas maneiras:

  • especificando explicitamente o nome e o valor do campo (o método SetValue () do objeto DataLockElement);
  • especificando uma fonte de dados contendo os valores necessários (a propriedade DataSource do objeto DataLockElement).

Para cada elemento de bloqueio, um dos dois modos de bloqueio pode ser definido:

  • compartilhado,
  • excepcional.

A tabela de compatibilidade de bloqueio gerenciado se parece com isto

O bloqueio compartilhado significa que os dados bloqueados não podem ser alterados por outra transação até o final da transação atual.
O modo de bloqueio exclusivo significa que os dados bloqueados não podem ser alterados por outra transação até o final da transação atual, nem podem ser lidos por outra transação que adquira um bloqueio compartilhado nesses dados.

Características de trabalho no modo "Automático e controlado"

Ao operar no modo de controle de intertravamento automático e controlado, há dois pontos a serem considerados:

Independentemente do modo especificado para uma determinada transação, o sistema irá definir o controle apropriado
bloqueio.
O modo de gerenciamento de bloqueio é determinado pela transação de nível mais alto. Em outras palavras, se no momento em que a transação foi iniciada, outra transação foi iniciada, então a transação que está sendo iniciada só pode ser executada no modo que está definido para uma transação já em execução.

Vamos considerar os recursos listados em mais detalhes.

O primeiro recurso é que mesmo se o modo de gerenciamento de bloqueio automático for usado para uma transação, o sistema irá definir adicionalmente os bloqueios gerenciados correspondentes ao gravar dados nesta transação. Isso implica que as transações em execução no modo de bloqueio gerenciado podem entrar em conflito com as transações em execução no modo de gerenciamento de bloqueio automático.

O segundo recurso é que o modo de gerenciamento de bloqueio especificado para o objeto de metadados na configuração ou especificado no início de uma transação explicitamente (como um parâmetro do método StartTransaction ()) é apenas o modo "desejado". O modo de gerenciamento de bloqueio real no qual a transação será executada depende se esta chamada para iniciar uma transação é a primeira ou outra transação já foi iniciada nesta sessão do sistema 1C: Enterprise.

Por exemplo, se você deseja gerenciar bloqueios ao escrever conjuntos de registros de registro, ao postar um documento, o modo de bloqueio controlado deve ser definido para o próprio registro e para o documento, uma vez que a escrita de conjuntos de registros de registro será realizada no transação aberta quando o documento foi escrito.