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 / 283852
Accepted
Davide De Pretto
Davide De Pretto
Asked: 2021-01-24 16:04:16 +0800 CST2021-01-24 16:04:16 +0800 CST 2021-01-24 16:04:16 +0800 CST

sys.dm_tran_version_store_space_usage relata sempre zero espaço usado

  • 772

Eu estava aprendendo sobre RCSI quando descobri algo estranho no Banco de Dados SQL do Azure.

O DMV sys.dm_tran_version_store_space_usagesempre relata 0 como o espaço usado pelo armazenamento de versão, mesmo se eu executar uma carga de trabalho CRUD antes.

Para demonstrar esse comportamento, criei um pequeno teste.

-- Server info
select @@version as sql_version;

-- Database info
select
    is_read_committed_snapshot_on,
    snapshot_isolation_state_desc
from sys.databases
where database_id = db_id();

-- Just to be sure the current database has its version store empty
select reserved_page_count as pre_workload_space_count
from sys.dm_tran_version_store_space_usage
where database_id = db_id();

-- Test workload
drop table if exists RCSI_TEST;

create table RCSI_TEST (
    id uniqueidentifier default newid()
);
go

insert into RCSI_TEST default values;
go 100

update RCSI_TEST
set id = newid();

delete from RCSI_TEST;

-- Metrics
select reserved_page_count as post_workload_page_count
from sys.dm_tran_version_store_space_usage
where database_id = db_id();

waitfor delay '00:01:30'; -- Just to be sure! ;)

select reserved_page_count as post_cleaning_space_count
from sys.dm_tran_version_store_space_usage
where database_id = db_id();

Executei este script no SQL Server 2019 Developer Edition (no Docker) e em um Banco de Dados SQL do Azure (camada S0, 10DTU) e aqui estão os resultados.

SQL Server 2019

sql_version
Microsoft SQL Server 2019 (RTM-CU8) (KB4577194) - 15.0.4073.23 (X64)Sep 23 2020 16:03:08    Copyright (C) 2019 Microsoft Corporation    Developer Edition (64-bit) on Linux (Ubuntu 18.04.5 LTS) <X64>

is_read_committed_snapshot_on   snapshot_isolation_state_desc
1                               ON

pre_workload_space_count
0

post_workload_page_count
8

post_cleaning_space_count
0

Banco de Dados SQL do Azure

sql_version
Microsoft SQL Azure (RTM) - 12.0.2000.8     Oct  1 2020 18:48:35    Copyright (C) 2019 Microsoft Corporation

is_read_committed_snapshot_on   snapshot_isolation_state_desc
1                               ON

pre_workload_space_count
0

post_workload_page_count
0

post_cleaning_space_count
0

O SQL Server 2019 parece se comportar corretamente, relatando 8 páginas de dados no armazenamento de versão logo após a carga de trabalho e, em seguida, limpo após um minuto ou mais. No Banco de Dados SQL do Azure, no entanto, o espaço usado é sempre zero! Isso é um comportamento correto? O que isso significa?

Books Online relata que esse DMV é compatível com o SQL Server e o Banco de Dados SQL do Azure, mas também diz "A consulta a seguir pode ser usada para determinar o espaço consumido em tempdb, por armazenamento de versão de cada banco de dados em uma instância do SQL Server. " . Tanto quanto sei, os Bancos de Dados SQL do Azure têm um escopo limitado para sua instância pai por design. Essa pode ser a causa raiz?

https://learn.microsoft.com/it-it/sql/relational-databases/system-dynamic-management-views/sys-dm-tran-version-store-space-usage?view=sql-server-ver15

Eu sei que os Bancos de Dados SQL do Azure são executados em RCSI por padrão e também que eles têm uma quantidade fixa de espaço tempdb com base na camada que você obtém, então eu estava preocupado em preencher isso com transações de longa duração ou outros processos mantendo muitos registros no armazenamento de versão por muito tempo. Mas eu não posso gerenciar algo que não posso medir, certo?

azure-sql-database tempdb
  • 1 1 respostas
  • 165 Views

1 respostas

  • Voted
  1. Best Answer
    David Browne - Microsoft
    2021-01-25T09:38:58+08:002021-01-25T09:38:58+08:00

    O Banco de Dados SQL do Azure usa a Recuperação de Banco de Dados Acelerada e, portanto, o RCSI não usa TempDb para o armazenamento de versão. Em vez disso, o armazenamento de versão está dentro do banco de dados para habilitar "Reversão de transação instantânea", o que é especialmente importante durante um failover:

    O armazenamento de versão persistente é um mecanismo de mecanismo de banco de dados para persistir as versões de linha geradas no próprio banco de dados, em vez do armazenamento de versão tempdb tradicional. O PVS permite o isolamento de recursos e melhora a disponibilidade de secundários legíveis.

    Recuperação de banco de dados acelerada

    Portanto, você deve procurar sys.dm_tran_persistent_version_store_statsou ver geralmente Gerenciar recuperação acelerada de banco de dados

    • 4

relate perguntas

  • Configurações de crescimento automático do Tempdb

  • Não há problema em criar centenas de bancos de dados no SQL Azure em vez de um grande e correr o risco de travar

  • Implementando uma tabela criptografada no SQL Azure

  • Servidor vinculado ao SQL Azure muito lento

  • Como posso alterar uma chave primária existente no SQL Azure?

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