AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / dba / 问题 / 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 报告始终使用零空间

  • 772

当我在 Azure SQL 数据库上发现一些奇怪的东西时,我正在学习 RCSI。

DMVsys.dm_tran_version_store_space_usage始终将 0 报告为版本存储使用的空间,即使我之前运行了 CRUD 工作负载。

为了演示这种行为,我创建了一个小测试。

-- 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();

我在 SQL Server 2019 Developer Edition(在 Docker 上)和 Azure SQL 数据库(层 S0、10DTU)上运行了这个脚本,结果如​​下。

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

Azure SQL 数据库

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

SQL Server 2019 似乎表现正确,在工作负载之后立即在版本存储中报告 8 页的数据,然后在一分钟左右后清理。但是,在 Azure SQL 数据库上,使用的空间始终为零!这是正确的行为吗?这是什么意思?

联机丛书报告此 DMV 与 SQL Server 和 Azure SQL 数据库兼容,但还说“以下查询可用于确定 tempdb 中消耗的空间,按SQL Server 实例中每个数据库的版本存储。 ”。据我所知,Azure SQL 数据库在设计上对其父实例的范围确实有限。这可能是根本原因吗?

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

我知道 Azure SQL 数据库默认在 RCSI 下运行,并且它们具有基于您获得的层的固定数量的 tempdb 空间,所以我担心用长时间运行的事务或其他进程来填充它,在版本存储太久。但我无法管理我无法衡量的东西,对吧?

azure-sql-database tempdb
  • 1 1 个回答
  • 165 Views

1 个回答

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

    Azure SQL 数据库使用加速数据库恢复,因此 RCSI 不使用 TempDb 作为版本存储。相反,版本存储在数据库内部以启用“即时事务回滚”,这在故障转移期间尤为重要:

    持久版本存储是一种数据库引擎机制,用于持久存储在数据库本身中生成的行版本,而不是传统的 tempdb 版本存储。PVS 支持资源隔离并提高可读辅助文件的可用性。

    加速数据库恢复

    因此,您应该查看sys.dm_tran_persistent_version_store_stats或查看一般管理加速数据库恢复

    • 4

相关问题

  • Tempdb 自动增长设置

  • 是否可以在 SQL Azure 中创建数百个数据库而不是一个大数据库并冒死锁的风险

  • 在 SQL Azure 中实现加密表

  • 将服务器链接到 SQL Azure 非常慢

  • 如何更改 SQL Azure 上的现有主键?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目

    • 12 个回答
  • Marko Smith

    如何让sqlplus的输出出现在一行中?

    • 3 个回答
  • Marko Smith

    选择具有最大日期或最晚日期的日期

    • 3 个回答
  • Marko Smith

    如何列出 PostgreSQL 中的所有模式?

    • 4 个回答
  • Marko Smith

    列出指定表的所有列

    • 5 个回答
  • Marko Smith

    如何在不修改我自己的 tnsnames.ora 的情况下使用 sqlplus 连接到位于另一台主机上的 Oracle 数据库

    • 4 个回答
  • Marko Smith

    你如何mysqldump特定的表?

    • 4 个回答
  • Marko Smith

    使用 psql 列出数据库权限

    • 10 个回答
  • Marko Smith

    如何从 PostgreSQL 中的选择查询中将值插入表中?

    • 4 个回答
  • Marko Smith

    如何使用 psql 列出所有数据库和表?

    • 7 个回答
  • Martin Hope
    Jin 连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目 2014-12-02 02:54:58 +0800 CST
  • Martin Hope
    Stéphane 如何列出 PostgreSQL 中的所有模式? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh 为什么事务日志不断增长或空间不足? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland 列出指定表的所有列 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney MySQL 能否合理地对数十亿行执行查询? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx 如何监控大型 .sql 文件的导入进度? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison 你如何mysqldump特定的表? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 对 SQL 查询进行计时? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas 如何从 PostgreSQL 中的选择查询中将值插入表中? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 列出所有数据库和表? 2011-02-18 00:45:49 +0800 CST

热门标签

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

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve