AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / dba / Perguntas / 13190
Accepted
Andreas Ågren
Andreas Ågren
Asked: 2012-02-17 06:03:00 +0800 CST2012-02-17 06:03:00 +0800 CST 2012-02-17 06:03:00 +0800 CST

Que efeito o nível de isolamento serializável tem nas instruções DDL?

  • 772

Estou usando o Red Gate SQL Compare para criar um script de lançamento com base nas diferenças entre o SVN e um banco de dados. Isso resulta em um script contendo várias alterações de tabela e procedimento e funciona bem. No entanto, uma coisa me intriga, é usar o nível de isolamento de transação serializável.

Eu sei o que isso faz com dml-statements, mas não tenho certeza do que isso significa para ddl. Alguém pode me esclarecer, talvez com um exemplo?

sql-server sql-server-2008
  • 2 2 respostas
  • 1419 Views

2 respostas

  • Voted
  1. Paul White
    2017-08-11T01:01:27+08:002017-08-11T01:01:27+08:00

    Eu sei o que isso faz com dml-statements, mas não tenho certeza do que isso significa para ddl.

    De um modo geral, não muito.

    DDL abrange uma grande variedade de operações (muitas das quais têm seus próprios comportamentos especiais), mas a maioria das DDL terá um Sch-Mbloqueio de modificação de esquema ( ) no objeto subjacente, seja durante o comando ou em um estágio crítico (por exemplo, em o fim da maioria das construções de índice online). Este é o tipo de bloqueio mais restritivo, impedindo qualquer tipo de acesso concorrente, em qualquer nível de isolamento.

    Mesmo onde Sch-Mnão é levado, o motor tem o cuidado de dar as travas certas nos momentos adequados para garantir que o resultado final seja correto . Por exemplo, não é possível construir um índice que não reflita exatamente os dados subjacentes.

    Todos os itens acima se aplicam independentemente de qualquer nível de isolamento de sessão especificado pelo usuário.


    No que diz respeito às alterações nos metadados (ou seja, as estruturas do sistema subjacentes a exibições como ), enquanto o SQL Server garante alterações corretas automaticamente, o acesso do usuário é totalmente suportado e garantido para ser honrado no nível de isolamento sys.tablesde bloqueio padrão .READ COMMITTED

    Citando de Metadata Access, Isolation Levels e Lock Hints (ênfase adicionada):

    O SQL Server não garante que as dicas de bloqueio serão atendidas em consultas que acessam metadados por meio de exibições de catálogo, exibições de compatibilidade, exibições de esquema de informações e funções internas emissoras de metadados.

    Internamente, o SQL Server Database Engine respeita apenas o READ COMMITTEDnível de isolamento para acesso a metadados. Se uma transação tiver um nível de isolamento que seja, por exemplo,SERIALIZABLEe dentro da transação, uma tentativa de acessar metadados usando exibições de catálogo ou funções internas emissoras de metadados, essas consultas serão executadas até serem concluídas comoREAD COMMITTED. No entanto, sob isolamento de instantâneo, o acesso aos metadados pode falhar devido a operações DDL simultâneas. Isso ocorre porque os metadados não têm controle de versão. Portanto, acessar o seguinte no isolamento de instantâneo pode falhar:

    • Visualizações do catálogo
    • Exibições de compatibilidade
    • Visualizações do Esquema de Informações
    • Funções internas emissoras de metadados
    • sp_helpgrupo de procedimentos armazenados
    • Procedimentos de catálogo do SQL Server Native Client
    • Visualizações e funções de gerenciamento dinâmico

    Da mesma página:

    A tabela a seguir fornece um resumo do acesso a metadados em vários níveis de isolamento.

    Suporte de nível de isolamento para acesso a metadados

    Apesar de não ser garantido ou suportado, pode ser importante acessar metadados (por exemplo, exibições de catálogo, DMVs) READ UNCOMMITTEDisoladamente para evitar problemas de bloqueio. A maioria das ferramentas e scripts de diagnóstico faz uso intenso de READ UNCOMMITTEDisolamento (geralmente usando a NOLOCKdica sinônima, mas com nome enganoso). Para obter um exemplo, consulte Consultas de diagnóstico de Glenn Berry .

    Como um exemplo de READ UNCOMMITTEDacesso não honrado, consulte As funções de metadados devem seguir a mesma semântica de isolamento que as consultas de metadados em Conectar e Maus hábitos: usando (determinadas) funções "auxiliares" de metadados por Aaron Bertrand.

    Acessar metadados em um isolamento maior do que a leitura confirmada não é honrado - as informações serão lidas com READ COMMITTEDsemântica de isolamento.


    Se eu tivesse que adivinhar, diria que a ferramenta de comparação na pergunta define o isolamento SERIALIZABLEpara cobrir qualquer DML no script gerado.

    • 5
  2. Best Answer
    JNK
    2012-02-17T06:06:55+08:002012-02-17T06:06:55+08:00

    Acredito que isso significará a mesma coisa para DDL e para DML. O artigo do msdn sobre o assunto, na verdade, fornece uma ideia bastante clara na SERIALIZABLEseção:

    Esta opção tem o mesmo efeito que definir HOLDLOCK em todas as tabelas em todas as instruções SELECT em uma transação.

    Basicamente, enquanto sua transação estiver em execução, nenhum DDL poderá ser executado em nenhum dos objetos aos quais você faz referência direta ou indiretamente.

    • 4

relate perguntas

  • Quais são as principais causas de deadlocks e podem ser evitadas?

  • Quanto "Padding" coloco em meus índices?

  • Existe um processo do tipo "práticas recomendadas" para os desenvolvedores seguirem para alterações no banco de dados?

  • Como determinar se um Índice é necessário ou necessário

  • Downgrade do SQL Server 2008 para 2005

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Como ver a lista de bancos de dados no Oracle?

    • 8 respostas
  • Marko Smith

    Quão grande deve ser o mysql innodb_buffer_pool_size?

    • 4 respostas
  • Marko Smith

    Listar todas as colunas de uma tabela especificada

    • 5 respostas
  • Marko Smith

    restaurar a tabela do arquivo .frm e .ibd?

    • 10 respostas
  • Marko Smith

    Como usar o sqlplus para se conectar a um banco de dados Oracle localizado em outro host sem modificar meu próprio tnsnames.ora

    • 4 respostas
  • Marko Smith

    Como você mysqldump tabela (s) específica (s)?

    • 4 respostas
  • Marko Smith

    Como selecionar a primeira linha de cada grupo?

    • 6 respostas
  • Marko Smith

    Listar os privilégios do banco de dados usando o psql

    • 10 respostas
  • Marko Smith

    Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Como faço para listar todos os bancos de dados e tabelas usando o psql?

    • 7 respostas
  • Martin Hope
    Mike Walsh Por que o log de transações continua crescendo ou fica sem espaço? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland Listar todas as colunas de uma tabela especificada 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney O MySQL pode realizar consultas razoavelmente em bilhões de linhas? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx Como posso monitorar o andamento de uma importação de um arquivo .sql grande? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison Como você mysqldump tabela (s) específica (s)? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    pedrosanta Listar os privilégios do banco de dados usando o psql 2011-08-04 11:01:21 +0800 CST
  • Martin Hope
    Jonas Como posso cronometrar consultas SQL usando psql? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas Como faço para listar todos os bancos de dados e tabelas usando o psql? 2011-02-18 00:45:49 +0800 CST
  • Martin Hope
    bernd_k Quando devo usar uma restrição exclusiva em vez de um índice exclusivo? 2011-01-05 02:32:27 +0800 CST

Hot tag

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve