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 / 346229
Accepted
adam.g
adam.g
Asked: 2025-04-18 21:28:11 +0800 CST2025-04-18 21:28:11 +0800 CST 2025-04-18 21:28:11 +0800 CST

Como o ISOLAMENTO INSTANTÂNEO está funcionando?

  • 772

Não consigo encontrar detalhes sobre como SNAPSHOT ISOLATIONfunciona. Testei a seguinte consulta no SQL Server 2019 (com o ADR desabilitado):

SET TRANSACTION ISOLATION LEVEL SNAPSHOT;
BEGIN TRAN;
WAITFOR DELAY '00:00:20'; -- insert of one record to dbo.MARA_CT in different session
SELECT
    *
FROM dbo.MARA_CT AS mc;
WAITFOR DELAY '00:00:20'; -- insert of one record to dbo.Album in different session
SELECT
    *
FROM dbo.Album AS a;
WAITFOR DELAY '00:00:20';
SELECT
    *
FROM dbo.MARA_CT AS mc;
SELECT
    *
FROM dbo.Album AS a;
COMMIT;

Conforme observado no comentário, inseri uma linha em dbo.MARA_CTe, durante a segunda WAITFOR DELAY, inseri um registro em dbo.Album. De acordo com a documentação da Microsoft:

The term "snapshot" reflects the fact that all queries in the transaction see the same version, or snapshot, of the database, based on the state of the database at the moment in time when the transaction begins.

Os resultados que obtive da minha consulta são os seguintes:

  1. dbo.MARA_CT contém o registro inserido durante o primeiro WAITFOR DELAY '00:00:20'.
  2. dbo.Album não contém o registro inserido durante o segundo WAITFOR DELAY '00:00:20'.

Parece-me que o "primeiro contato" com qualquer tabela na consulta cria um "instantâneo" de toda a transação, em vez de capturar o estado do banco de dados no momento em que a transação começa. Em relação a isso SNAPSHOT ISOLATION, tenho perguntas adicionais:

  1. O ISOLAMENTO DE SNAPSHOT armazena todas as versões desde o início da transação para todas as linhas do banco de dados ou apenas para as tabelas usadas na consulta? Como isso funciona?

  2. Se o RCSI estiver habilitado e posteriormente habilitarmos o ISOLAMENTO DE SNAPSHOT, o SQL Server armazenará novos valores/versões no tempdb?

  3. O objetivo do uso, SNAPSHOT ISOLATIONno meu caso, é testar novas versões de procedimentos e visualizações (novo esquema). Tanto os procedimentos novos quanto os antigos precisam retornar o mesmo número de registros e utilizar os mesmos dados, mesmo que as tabelas envolvidas passem por constantes inserções, atualizações e exclusões. Considerei usar um snapshot do banco de dados, mas agora vejo que SNAPSHOT ISOLATIONpode ser ainda mais vantajoso, já que o RCSI já está habilitado nos bancos de dados.

sql-server-2019
  • 1 1 respostas
  • 142 Views

1 respostas

  • Voted
  1. Best Answer
    Paul White
    2025-04-18T22:03:07+08:002025-04-18T22:03:07+08:00

    Parece-me que o "primeiro toque" de qualquer tabela na consulta cria um "instantâneo" de toda a transação, em vez de capturar o estado do banco de dados no momento em que a transação começa.

    Sim, este é o comportamento documentado . A transação de snapshot torna-se ativa com o primeiro acesso aos dados do usuário.

    1. O ISOLAMENTO DE SNAPSHOT armazena todas as versões desde o início da transação para todas as linhas do banco de dados ou apenas para as tabelas usadas na consulta? Como isso funciona?

    As versões são geradas sempre que a opção de banco de dados RCSI ou SI estiver habilitada. Isso é bastante geral e se aplica a todos os dados do usuário. Não importa se RCSI ou SI está sendo usado.

    Por exemplo, se a sua transação for executada por 5 horas, as versões de todas as tabelas alteradas no banco de dados serão mantidas por 5 horas. O SQL Server precisa fazer isso; ele não tem como saber quais dados (como eram 5 horas atrás) sua transação acessará em seguida.

    1. Se o RCSI estiver habilitado e posteriormente habilitarmos o ISOLAMENTO DE SNAPSHOT, o SQL Server armazenará novos valores/versões no tempdb?

    Não, mas as versões podem ser necessárias por mais tempo.

    1. O objetivo de usar o ISOLAMENTO DE SNAPSHOT no meu caso é testar novas versões de procedimentos e visualizações (novo esquema). Tanto os procedimentos novos quanto os antigos precisam retornar o mesmo número de registros e utilizar os mesmos dados, mesmo que as tabelas envolvidas passem por constantes inserções, atualizações e exclusões. Considerei usar um snapshot do banco de dados, mas agora vejo que o ISOLAMENTO DE SNAPSHOT pode ser ainda mais vantajoso, já que o RCSI já está habilitado nos bancos de dados.

    Não parece ser uma pergunta.

    Consulte o guia Bloqueio de transações e controle de versão de linhas .

    • 4

relate perguntas

  • O período de avaliação do SQL Server expirou

  • Como o novo procedimento armazenado do sistema sys.xp_delete_files é diferente de sys.xp_delete_file?

  • Atualizando do SQL Server 2012 SP1 para o SQL Server 2019

  • O MS SQL Server tem a função generate_series

  • Como você habilita o cache do conjunto de resultados do SQL Server 2019?

Sidebar

Stats

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

    conectar ao servidor PostgreSQL: FATAL: nenhuma entrada pg_hba.conf para o host

    • 12 respostas
  • Marko Smith

    Como fazer a saída do sqlplus aparecer em uma linha?

    • 3 respostas
  • Marko Smith

    Selecione qual tem data máxima ou data mais recente

    • 3 respostas
  • Marko Smith

    Como faço para listar todos os esquemas no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Listar todas as colunas de uma tabela especificada

    • 5 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

    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
    Jin conectar ao servidor PostgreSQL: FATAL: nenhuma entrada pg_hba.conf para o host 2014-12-02 02:54:58 +0800 CST
  • Martin Hope
    Stéphane Como faço para listar todos os esquemas no PostgreSQL? 2013-04-16 11:19:16 +0800 CST
  • 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
    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

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