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 / 问题

问题[sql-server-2019](dba)

Martin Hope
adam.g
Asked: 2025-04-18 21:28:11 +0800 CST

SNAPSHOT ISOLATION 如何工作?

  • 7

我找不到有关其SNAPSHOT ISOLATION功能的详细信息。我在 SQL Server 2019 上测试了以下查询(禁用了 ADR):

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;

正如评论中所述,我在 中插入了一行,dbo.MARA_CT而在第二个 中WAITFOR DELAY,我在 中插入了一条记录dbo.Album。根据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.

我的查询得到的结果如下:

  1. dbo.MARA_CT 包含在第一个 WAITFOR DELAY‘00:00:20’期间插入的记录。
  2. dbo.Album 不包含在第二个 WAITFOR DELAY‘00:00:20’期间插入的记录。

在我看来,查询中任何表的“首次接触”都会为整个事务创建一个“快照”,而不是捕获事务开始时数据库的状态。关于SNAPSHOT ISOLATION,我还有其他问题:

  1. SNAPSHOT ISOLATION 会存储数据库中所有行从事务开始的所有版本,还是仅存储查询中使用的表的版本?这是如何工作的?

  2. 如果启用了 RCSI,并且我们随后启用了 SNAPSHOT ISOLATION,SQL Server 是否会在 tempdb 中存储任何新值/版本?

  3. 在我的案例中,使用数据库快照的目的SNAPSHOT ISOLATION是测试新版本的过程和视图(新模式)。即使涉及的表不断进行插入、更新和删除操作,新旧过程都需要返回相同数量的记录并使用相同的数据。我曾考虑使用数据库快照,但现在发现它SNAPSHOT ISOLATION可能更有优势,因为数据库上已经启用了 RCSI。

sql-server-2019
  • 1 个回答
  • 142 Views
Martin Hope
SE1986
Asked: 2025-03-05 18:37:58 +0800 CST

SQL Server 查询存储因 FILESTREAM 垃圾收集错误而进入错误状态

  • 8

我在 SQL Server 2019 实例上有一个数据库,该数据库已启用查询存储,并且已运行多年

突然,查询存储状态返回

SELECT actual_state_desc FROM sys.database_query_store_options

去了

错误

所以我重新启用了它

ALTER DATABASE [BOB] SET QUERY_STORE (OPERATION_MODE = READ_WRITE)

一切正常。然而,几个小时后,同样的事情发生了,我在同一时间在 SQL Server 日志中注意到以下消息

内部 FILESTREAM 错误:无法访问垃圾收集表。

看起来这两者是有关联的,尽管我不确定具体是如何关联的。

我们的数据库没有任何文件流文件:

SELECT  COUNT(*)
FROM    sys.database_files
WHERE   type_desc = 'FILESTREAM'

返回 0

我再次重新启用了查询存储,但想了解这里发生了什么,以防止将来再次发生这种情况。

有人能告诉我发生了什么事以及如何解决吗?

sql-server-2019
  • 1 个回答
  • 46 Views
Martin Hope
Don
Asked: 2024-09-17 07:29:47 +0800 CST

SQL .bak 文件是否被压缩而没有明确说明要压缩?

  • 9
该问题已从 Stack Overflow迁移,因为它可以在数据库管理员 Stack Exchange 上找到答案。 已于 22 小时前迁移 。

我使用以下脚本制作生产数据库的 .bak 文件并将其保存到测试服务器,如果需要,可以在该服务器上恢复。该脚本未说明要压缩文件。运行 SQL Server 2019 Enterprise。

BACKUP DATABASE [PINK] 
    TO DISK = N'\\TestServer\Transfer\PINK.bak' 
    WITH NOFORMAT, INIT,  NAME = N'PINK', SKIP, NOREWIND, NOUNLOAD, STATS = 10, CHECKSUM
GO

DECLARE @backupSetId AS int

SELECT @backupSetId = position 
FROM msdb..backupset 
WHERE database_name = N'PINK' 
  AND backup_set_id = (SELECT MAX(backup_set_id) 
                       FROM msdb..backupset 
                       WHERE database_name = N'PINK')

IF @backupSetId IS NULL
BEGIN
    RAISERROR(N'Verify failed. Backup information for database ''PINK'' not found.', 16, 1) 
END

RESTORE VERIFYONLY 
    FROM DISK = N'\\TestServer\Transfer\PINK.bak' 
    WITH FILE = @backupSetId, NOUNLOAD, NOREWIND
GO

.bak测试服务器上的内存大小根据您在 Explorer 中查看的位置而定,为 162GB 或 154GB :

在此处输入图片描述

.bak为了节省空间,我尝试通过添加COMPRESSION脚本来压缩:

BACKUP DATABASE [PINK] 
    TO DISK = N'\\TestServer\Transfer\PINK.bak' 
    WITH NOFORMAT, INIT, NAME = N'PINK', SKIP, NOREWIND, NOUNLOAD, COMPRESSION, STATS = 10, CHECKSUM
GO

DECLARE @backupSetId AS int

SELECT @backupSetId = position 
FROM msdb..backupset 
WHERE database_name = N'PINK' 
  AND backup_set_id = (SELECT MAX(backup_set_id) 
                       FROM msdb..backupset 
                       WHERE database_name = N'PINK')

IF @backupSetId IS NULL
BEGIN
    RAISERROR(N'Verify failed. Backup information for database ''PINK'' not found.', 16, 1) 
END

RESTORE VERIFYONLY 
    FROM DISK = N'\\TestServer\Transfer\PINK.bak' 
    WITH FILE = @backupSetId, NOUNLOAD, NOREWIND
GO

执行包含的命令后COMMPRESSION,它在测试服务器上的大小相同。我检查了.ndf和.mdf文件,它们总共是 770GB 或 732GB,具体取决于您查看的位置。此外,它还包含大约 23GB 的索引信息。

在此处输入图片描述

.bak尽管我没有声明要这么做,但这是否已经被压缩了?

sql-server-2019
  • 3 个回答
  • 526 Views
Martin Hope
Java
Asked: 2024-08-13 01:40:59 +0800 CST

在 SQL Server 2019 中使用 Powershell 执行 Python

  • 5

过去 3 年多来,我一直在使用 SQL Server 2016 的 SQL Server Agent 以及底层设置和脚本。它运行良好。

在此处输入图片描述

但是,现在,我正在将所有内容迁移到 SQL Server 2019,但相同的命令不起作用。

因此,我想知道是否有任何内容需要修改(就脚本而言),因为我正在使用 SQL Server 2019。

当我使用 SQL Server Agent 运行其他Powershell 脚本(在 Powershell 中执行某些操作)时,它可以工作。

当我现在运行 Powershell 时,收到以下错误消息:

在此处输入图片描述

sql-server-2019
  • 1 个回答
  • 95 Views
Martin Hope
Don
Asked: 2024-07-16 06:30:58 +0800 CST

为什么 PRIMARY 文件组不断增大?

  • 5

运行 SQL Server 2019 Enterprise。我有一个 PRIMARY 文件组,但也在我创建的 Data1 文件组中添加了四个 ndf 文件。正如预期的那样,随着更多数据的添加,我不得不增加 Data1 文件组上的可用空间,但 mdf PRIMARY 文件组的大小保持相对稳定。在过去的几个月里,我不得不增加 PRIMARY 文件组中的空间。它从 5GB 开始,几周前我扩展到 10GB。再次用完空间,刚刚增加到 15GB。Data1 文件组是默认文件组。为什么 PRIMARY 文件组现在突然增长,而它不是默认文件组?每个 Data1 文件都设置为 160GB,因此 PRIMARY 仍然小得多。只是想知道是否有办法确定为什么它在过去停滞不前时会意外增长。

在此处输入图片描述

sql-server-2019
  • 1 个回答
  • 40 Views
Martin Hope
GMassDBA
Asked: 2024-07-03 21:01:17 +0800 CST

分发代理处于重试循环且无消息

  • 5


我有一个 2019 标准版发布者,它充当自己的分销商,在全球拥有 150 多个订阅者。有 4 个发布者,其中只有 2 个是活跃的。数据更改非常有限(每天大约 5 次写入)。订阅者都是 SQL 快速版。

我的主要问题是,一些分发代理经常决定不想正常启动;这意味着,作业在代理执行中陷入重试循环。当我查看复制监视器时,消息提示查看代理作业历史记录。代理作业历史记录指向复制监视器。

对于出现问题的代理,我已经尝试增加历史记录和输出详细程度以及将信息输出到文件,但看起来只有当代理经过初始化阶段时才会启动。

在网上阅读时,我发现了一篇关于桌面堆耗尽的旧文章,但它看起来也是指 2016 年之前的 WS(我正在运行 WS 2019),所以不确定是否真的适用。

进一步谷歌搜索没有找到任何有价值的信息。您是否知道除了向 MS 发送票据之外,调试/排除这些问题的方法,或者一些可以尝试和遵循的资源?


根据要求进行编辑,以下是我能看到的消息的复制粘贴:

复制监视器:错误消息:

  • 代理“PublisherName-PublicationName-SubscriberName-AgentID”在发生错误后重试。已尝试重试 74 次。有关更多详细信息,请参阅“作业”文件夹中的代理作业历史记录。

由于。。。导致的结果

SELECT jh.*FROM msdb.dbo.sysjobhistory jh
INNER JOIN distribution1.dbo.MSdistribution_agents da
   ON da.job_id = jh.job_id
WHERE da.name = ''
ORDER BY jh.instance_id DESC

(仅截取最新版本的截图)

作业历史记录重试循环最新迭代

sql-server-2019
  • 1 个回答
  • 20 Views
Martin Hope
Jeff Bauersfeld
Asked: 2024-06-28 09:23:58 +0800 CST

SQL Server 更新后出现“长异步 API 调用”

  • 6

在最新的 SQL Server 2019 CU、KB5037331 之后,我在我的几个 SqlServer Server 日志中反复收到以下消息:“长异步 API 调用:调度程序的调度公平性可能会受到异步 API 调用意外超过 [8 位大数字] 毫秒的影响。”

我在更新说明中看到以下变化:

“当由于底层存储的性能问题而在 Bufferpool Lazy Writer(ntdll!ZwWriteFile 系统调用)中检测到高 I/O 延迟时,添加以下日志消息:

警告长异步 API 调用:异步 API 调用意外超过 xxx 毫秒可能会影响调度程序的调度公平性。”

问题是,除了基本的 I/O 故障排除之外,我不知道该如何处理这些信息。我需要终止什么才能停止此消息?我如何确定 I/O 问题涉及哪些文件/对象以解决潜在问题?

sql-server-2019
  • 2 个回答
  • 611 Views
Martin Hope
rois
Asked: 2024-02-02 00:20:00 +0800 CST

在辅助副本上运行时,DBCC CHECKDB WITH EXTENDED_LOGICAL_CHECKS 失败

  • 6

创建尽可能简单的数据库:

CREATE DATABASE DatabaseCheck

将此数据库添加到可用性组,其中辅助数据库不可读

在主要运行中:

DBCC CHECKDB ('DatabaseCheck') WITH EXTENDED_LOGICAL_CHECKS

它成功了:

CHECKDB 在数据库“DatabaseCheck”中发现 0 个分配错误和 0 个一致性错误。DBCC 执行已完成。如果 DBCC 打印了错误消息,请联系您的系统管理员。

在辅助服务器上运行相同的 DBCC 命令。即使未发现任何错误,它仍会失败:

CHECKDB 在数据库“DatabaseCheck”中发现 0 个分配错误和 0 个一致性错误。消息 0,级别 11,状态 0,第 1 行 当前命令发生严重错误。结果(如果有)应被丢弃。

  • 删除 WITHEXTENDED_LOGICAL_CHECKS可消除错误
  • 使辅助副本可读可以消除错误
  • 执行故障转移并检查新的主服务器后错误消失。检查新的辅助服务器后再次显示错误。

知道这是怎么回事吗?检查DBCC CHECKDB 文档没有提到 EXTENDED_LOGICAL_CHECKS 在不可读的辅助副本上不受支持。在我看来,这似乎是命令本身的一个错误。

我在命令输出中注意到的一件事是,它会检查如下统计数据:

已验证统计信息“sys.sysrscols.clst”的完整性。已验证统计信息“sys.sysrowsets.clust”的完整性。已验证统计信息“sys.sysrowsets._WA_Sys_00000002_00000005”的完整性。已验证统计信息“sys.sysrowsets._WA_Sys_00000003_00000005”的完整性。已验证统计信息“sys.sysrowsets._WA_Sys_00000006_00000005”的完整性。已验证统计信息“sys.sysrowsets._WA_Sys_00000004_00000005”的完整性。已验证统计信息“sys.sysrowsets._WA_Sys_00000005_00000005”的完整性。已验证统计信息“sys.sysrowsets._WA_Sys_00000008_00000005”的完整性。

在辅助运行时不存在这些

转载于:

Microsoft SQL Server 2019 (RTM-CU23) (KB5030333) - 15.0.4335.1 (X64) 2023 年 9 月 21 日 17:28:44 版权所有 (C) 2019 Microsoft Corporation 开发人员版(64 位)在 Windows Server 2019 Standard 10.0(内部版本 17763:)上

编辑:

错误日志中唯一的消息是:

Domain\user 执行的 DBCC CHECKDB (DatabaseCheck) 发现 0 个错误并修复了 0 个错误。耗时:0 小时 0 分钟 0 秒。内部数据库快照具有分割点 LSN = 00000034:000001b1:0001 和第一个 LSN = 00000034:000001af:0002。

sys.dm_server_memory_dumps 中没有最近的转储

sql-server-2019
  • 1 个回答
  • 94 Views
Martin Hope
adam.g
Asked: 2023-10-23 17:45:42 +0800 CST

DACPAC 创建是否会在数据库/服务器级别造成任何阻塞?

  • 5

我必须从生产数据库创建 DACPAC。我想通过 Visual Studio 2022(SQL Server 对象资源管理器和“提取 - 数据层应用程序”)来执行此操作。是否可以阻止任何进程/查询或利用更多 CPU/内存来执行此操作?

sql-server-2019
  • 1 个回答
  • 20 Views
Martin Hope
Peter
Asked: 2023-10-11 21:21:11 +0800 CST

将项目添加到 JSON

  • 9

我有以下想要合并的 JSON。在我的 JSON 中,我有“kenmerken”部分,我想在其中添加更多项目。我认为这可以通过使用 JSON_MODIFY 来完成。然而,当我使用下面的语句时,它将替换项目 1、2 和 3。当我在 $.kenmerken 之前包含“append”时,它只会显示新的项目。我怎样才能将它们都包含在 kenmerken 对象中?

DECLARE @FirstJSON NVARCHAR(MAX) = N'
{
    "message id": "B673A8E4-3652-4544-A02D-BA9726BD71ED",
    "volgnummer": 61000233530024,
    "debug": null,
    "kenmerken": {
        "item 1": 1,
        "item 2": 1,
        "item 3": 1
    }
}
';

DECLARE @KenmerkenToAdd NVARCHAR(MAX) = N'
{
    "Item 4": false,
    "Item 5": false
}
';

SET @FirstJSON = JSON_MODIFY(
                               @FirstJSON,
                               ' $.kenmerken',
                               JSON_QUERY(@KenmerkenToAdd)
                            );

SELECT @FirstJSON;

会给:

{
"message id": "B673A8E4-3652-4544-A02D-BA9726BD71ED",
"volgnummer": 61000233530024,
"debug": null,
"kenmerken": {
   "Item 4": false,
   "Item 5": false
   }
}

我想要的地方:

{
    "message id": "B673A8E4-3652-4544-A02D-BA9726BD71ED",
    "volgnummer": 61000233530024,
    "debug": null,
    "kenmerken": {
       "Item 1": 1,
       "Item 2": 1,
       "Item 3": 1,
       "Item 4": false,
       "Item 5": false
       }
    }
sql-server-2019
  • 1 个回答
  • 198 Views

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