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
    • 最新
    • 标签
主页 / user-247290

adam.g's questions

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
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
adam.g
Asked: 2023-10-06 20:18:17 +0800 CST

AG 中没有侦听器的故障转移

  • 5

我们的 SQL Server 版本为 SQL Server 2016 和 SQL Server 2019。我们已经检查是否可以在没有侦听器的情况下在 SQL Server 2019 上进行故障转移,但我无法在 SQL Server 2016 上测试它。您知道这是否也可能吗?

sql-server
  • 1 个回答
  • 40 Views
Martin Hope
adam.g
Asked: 2023-09-22 17:51:38 +0800 CST

我们什么时候可以缩小 SQL Server 的 Azure 虚拟机规模?

  • 6

目前我们的生产 SQL Server 是Standard_D96ds_v5Azure VM 机器。
我们收到请求检查是否可以将服务器规模缩小到Standard_D48ds_v5.

将考虑采取哪些措施来确认我们可以缩小服务器规模?

sql-server
  • 2 个回答
  • 64 Views
Martin Hope
adam.g
Asked: 2023-09-12 21:52:07 +0800 CST

查询存储中的“执行计数”是什么?

  • 8
赏金将在 6 天后到期。此问题的答案有资格获得+50声誉奖励。 adam.g想要奖励现有的答案。

我们正在使用 SQL Server 2016。我们在 2023 年 9 月 11 日的查询持续时间方面遇到一些问题。想在 QueryStore 上检查它,我在 2023 年 9 月 11 日 05:00 PM 执行的查询存储上看到:

在此输入图像描述

2023 年 9 月 11 日,我们的执行次数要多得多(2023 年 9 月 8 日,执行次数约为 1150 VS 800)。我在 2023 年 9 月 12 日运行相同的查询存储检查,发现昨天的执行计数比我昨天检查的要少得多。

你知道为什么我们会有这样的差异吗?更重要的是,我仍然看到 2023 年 9 月 11 日的执行计数仍在减少。

在此输入图像描述

添加了查询存储设置。在此输入图像描述

查询执行 2023-09-14 9:52 AM:

在此输入图像描述

查询执行 2023-09-14 10:53 AM: 在此输入图像描述

查询执行 2023-09-14 12:36 PM:甚至 2023-09-11 也已更改...在此输入图像描述

sql-server
  • 1 个回答
  • 8 Views
Martin Hope
adam.g
Asked: 2023-08-28 23:28:53 +0800 CST

我可以为包含禁用更改跟踪/截断/分区开关的动态 SQL 执行事务吗

  • 5

我想创建交易,它将:

  1. 如果存在则禁用更改跟踪。
  2. 表的 TRUNCATE 分区。
  3. 将分区从不同的表切换到主表。
  4. ENABLE 更改跟踪 IF 之前被禁用。

想要创建带有参数的脚本,所以我将使用动态 SQL。主意:

/* OPS parameters */
DECLARE @schemaName sysname = 'dbo';
DECLARE @tableName sysname = 'TABLE';
DECLARE @partition INT = 90;  

/* DEV parameters */
DECLARE @tableNameSRP sysname = CONCAT(@tableName, '_SRP');
DECLARE @tableNameWithSchema sysname = CONCAT(QUOTENAME(@schemaName), '.', QUOTENAME(@tableName));
DECLARE @tableNameWithSchemaSRP sysname = CONCAT(QUOTENAME(@schemaName), '.', QUOTENAME(@tableNameSRP));
DECLARE @isCtReEnabled BIT = 0;
DECLARE @isDebug BIT = 1;


SET TRAN ISOLATION LEVEL READ UNCOMMITTED;
SET XACT_ABORT ON;
BEGIN TRAN;
BEGIN TRY
    IF EXISTS (
        SELECT
            1
        FROM sys.change_tracking_tables
        WHERE object_id = OBJECT_ID(@tableNameWithSchema)
    )
    BEGIN

        SET @statement = N'ALTER TABLE ' + @tableNameWithSchema + N' DISABLE CHANGE_TRACKING;';
        IF (@isDebug = 0)
        BEGIN
            EXEC sp_executesql @stmt = @statement;
        END;
        IF (@isDebug = 1)
        BEGIN
            RAISERROR('[INFO] SQL: %s', 0, 1, @statement) WITH NOWAIT;
        END;
        SET @isCtReEnabled = 1;
    END;

    SET @statement
        = N'TRUNCATE TABLE ' + @tableNameWithSchema + N' WITH (PARTITIONS (' + CAST(@partition AS NVARCHAR(5)) + N')) 
ALTER TABLE '        + @tableNameWithSchemaSRP + N' SWITCH PARTITION ' + CAST(@partition AS NVARCHAR(5)) + N' TO ' + @tableNameWithSchema + N' PARTITION '
          + CAST(@partition AS NVARCHAR(5));
    IF (@isDebug = 0)
    BEGIN
        EXEC sp_executesql @stmt = @statement;
    END;
    IF (@isDebug = 1)
    BEGIN
        RAISERROR('[INFO] SQL: %s', 0, 1, @statement) WITH NOWAIT;
    END;

    IF (@isCtReEnabled = 1)
    BEGIN
        SET @statement = N'ALTER TABLE ' + @tableNameWithSchema + N' ENABLE CHANGE_TRACKING;';
        IF (@isDebug = 0)
        BEGIN
            EXEC sp_executesql @stmt = @statement;
        END;
        IF (@isDebug = 1)
        BEGIN
            RAISERROR('[INFO] SQL: %s', 0, 1, @statement) WITH NOWAIT;
        END;
    END;
    COMMIT;

END TRY
BEGIN CATCH
    SET @errorMessage = ERROR_MESSAGE();
    RAISERROR('ERROR MESSAGE: %s', 0, 1, @errorMessage) WITH NOWAIT;
    IF @@TRANCOUNT > 0
        ROLLBACK TRANSACTION;
END CATCH;

我的问题:

  1. 启用/禁用更改跟踪、截断和分区切换等操作是否可以在一个事务中进行?(想要执行全部或不执行)
  2. 在这种情况下动态sql有问题吗?
t-sql
  • 1 个回答
  • 21 Views
Martin Hope
adam.g
Asked: 2023-08-27 20:02:20 +0800 CST

我们可以用 UNION ALL 来交换逻辑或吗?

  • 5

我看到有人交换了下面的代码:

SELECT
    PK1
    , PK2
    , PK3
    , PK4
    , C
    , B
    , SUM(NUMERIC_1)
    , SUM(NUMERIC_2)
    , MAX(NUMERIC_3)
    , SUM(NUMERIC_4)
FROM MATDOC_EXTRACT
WHERE A = ''
      AND (
          (
              (
              B = ''
              OR B = 'K'
          )
              AND (
                  C = '01'
                  OR C = '02'
                  OR C = '07'
                  OR C = '08'
              )
          )
          OR (
              B = ''
              AND (
                  C = '03'
                  OR C = '04'
              )
          )
      )
GROUP BY PK1
         , PK2
         , PK3
         , PK4
         , C
         , B;

对于这个

SELECT
    PK1
    , PK2
    , PK3
    , PK4
    , C
    , B
    , SUM(NUMERIC_1)
    , SUM(NUMERIC_2)
    , MAX(NUMERIC_3)
    , SUM(NUMERIC_4)
FROM sap.MATDOC_EXTRACT
WHERE A = N''
      AND B = N''
      AND C IN (N'01', N'02', N'07', N'08', N'03', N'04')
GROUP BY PK1
         , PK2
         , PK3
         , PK4
         , C
         , B
UNION ALL
SELECT
    PK1
    , PK2
    , PK3
    , PK4
    , C
    , B
    , SUM(NUMERIC_1)
    , SUM(NUMERIC_2)
    , MAX(NUMERIC_3)
    , SUM(NUMERIC_4)
FROM sap.MATDOC_EXTRACT
WHERE A = N''
      AND B = N'K'
      AND C IN (N'01', N'02', N'07', N'08')
GROUP BY PK1
         , PK2
         , PK3
         , PK4
         , C
         , B;

他们平等吗?

sql-server
  • 1 个回答
  • 23 Views
Martin Hope
adam.g
Asked: 2023-01-26 06:11:04 +0800 CST

必须为 SQL 用户设置什么权限才能在数据库中配置更改跟踪?

  • 5

我正在构建应用程序,该应用程序必须具有配置(禁用/启用)特定数据库表上的更改跟踪的选项。我正在通过 SQL 用户连接到数据库。需要为 SQL 用户添加哪些数据库权限以禁用/启用对表的更改跟踪和运行以下查询的选项:

SELECT DISTINCT
       sct1.name                                             AS CT_schema
       , sot1.name                                           AS CT_table
       , ps1.row_count                                       AS CT_rows
       , sct2.name                                           AS tracked_schema
       , sot2.name                                           AS tracked_name
       , CHANGE_TRACKING_MIN_VALID_VERSION(sot2.object_id)   AS min_valid_version
       , itt.create_date                                     AS change_tracking_table_creation_date
       , CAST(ps1.reserved_page_count * 8. / 1024 AS BIGINT) AS CT_reserved_MB
       , CAST(ps2.reserved_page_count * 8. / 1024 AS BIGINT) AS tracked_base_table_MB
       , ps2.row_count                                       AS tracked_rows
FROM sys.internal_tables            it
JOIN sys.objects                    sot1
  ON it.object_id = sot1.object_id
JOIN sys.schemas                    AS sct1
  ON sot1.schema_id = sct1.schema_id
JOIN sys.dm_db_partition_stats      ps1
  ON it.object_id = ps1.object_id
     AND ps1.index_id IN (0, 1)
LEFT JOIN sys.objects               sot2
       ON it.parent_object_id = sot2.object_id
LEFT JOIN sys.schemas               AS sct2
       ON sot2.schema_id = sct2.schema_id
LEFT JOIN sys.dm_db_partition_stats ps2
       ON sot2.object_id = ps2.object_id
          AND ps2.index_id IN (0, 1)
INNER JOIN sys.internal_tables      itt
        ON itt.name = sot1.name
WHERE it.internal_type IN (209, 210);
t-sql
  • 1 个回答
  • 33 Views
Martin Hope
adam.g
Asked: 2022-12-06 02:19:40 +0800 CST

在 SQL Server 2016 中存储 XML 的最佳选择是什么?

  • 5

在 SQL Server 2016 (13.0.6300.2) 上,我们有一个表有两个 XML 列和大约 1500000 行。表的大小约为 150 GB。压缩此表的最佳选择是什么?我在开发环境中检查 PAGE 压缩,但它只节省了 3%。在 Sql Server 2019 上(计划在不久的将来更新)是否有可能会更好?

sql-server
  • 1 个回答
  • 38 Views
Martin Hope
adam.g
Asked: 2022-02-18 13:07:08 +0800 CST

已终止会话是否出现在查询存储中?

  • 7

是否有任何选项可以查看查询存储中的已终止会话?

我在问,因为我们有一个额外的工具,如果会话运行时间超过 30 分钟(KILL命令),它就会终止会话。

我想检查查询存储中的执行计划是否有已终止的查询。我在查询存储会话/查询中找不到被这个附加应用程序杀死的。

sql-server query-store
  • 2 个回答
  • 385 Views
Martin Hope
adam.g
Asked: 2022-02-12 08:22:13 +0800 CST

查询存储中强制计划的奇怪行为

  • 2

我在查询存储中强制执行计划。计划与每天运行一次的作业中的程序相关联。这项工作的步骤之一就是:

EXEC [schema].[LoadData]

过程 [schema].[LoadData] 看起来像

TRUNCATE TABLE [schema].[Data];
     
    INSERT INTO [schema].[Data]
           ([A1],
           [A2],
          .
          .
          .,
          [A49]
    )                
    SELECT *
        ,CURRENT_TIMESTAMP AS [Insert TimeStamp] 
    FROM [schema].[View]   

其中 view 是一个包含一些 CTE 并使用同义词的视图(连接到来自不同数据库的表)。

在查询存储执行看起来像: 在此处输入图像描述

要测试强制计划是否有效,我按照以下步骤操作:

  1. 在 SSMS 中运行查询 ->EXEC [schema].[LoadData]
  2. 上面的执行被视为不同的查询,因此在查询存储中没有看到任何新的查询 = 7
  3. DBA 只需使用正在运行查询的步骤创建一个新作业 ->EXEC [schema].[LoadData]
  4. 运行上述新创建的工作原因计划 ID = 29800

质疑为什么不强制执行计划?在“强制计划失败计数”列中为 0。

sql-server query-store
  • 1 个回答
  • 143 Views
Martin Hope
adam.g
Asked: 2022-02-11 01:16:59 +0800 CST

如何在 Sql Server 上模拟 MSG = 0 的错误?

  • 2

我需要在 Sql Server 上模拟错误:

“Msg 0, Level 20 A severe error occurred on the current command”

因为我们的开发人员必须在应用程序中处理它。

如何模拟/触发这种错误?(我也可以在我的本地主机上尝试)。

sql-server error-handling
  • 2 个回答
  • 276 Views
Martin Hope
adam.g
Asked: 2022-02-10 07:00:57 +0800 CST

服务器重启后查询存储强制计划是否仍然存在?

  • 3

想问一下,因为找不到这个信息。

服务器重启后查询存储强制计划是否仍然存在?

在哪些情况下,通过查询存储强制执行计划不会保持有效?

sql-server sql-server-2016
  • 1 个回答
  • 261 Views
Martin Hope
adam.g
Asked: 2022-02-09 02:25:49 +0800 CST

如何避免在 .NET 应用程序中从 SQL Server 返回部分数据?

  • 2

我们从客户端获得票证,该票证有时会从查询中获取部分数据。简单的单词查询是视图查询:

SELECT column1, column2, column3, column4, column5, column6 ... column50 
from [dbo].[view]

查看返回大约 300 万条记录。在服务器上,我们有一些规则会在运行 30 分钟后终止查询。在正常情况下,此查询运行大约 5 分钟,但在工作量大的情况下,此查询运行超过 30 分钟。在这种情况下,客户端可能会遇到两种错误:

• 返回的终止查询

“消息 596,级别 21 无法继续执行,因为会话处于终止状态”

这会导致应用程序导入节点失败,因此是“理想”情况,因为它们不依赖于具有部分输入数据集的工作流。

• 一个与杀死进程相关的场景

“消息 0,级别 20 当前命令发生严重错误”

从 ODBC 的角度来看,这看起来与成功运行相同,因此我们以部分数据集结束 - 这是最危险的情况。

你知道如何避免这种问题吗?

sql-server view
  • 2 个回答
  • 215 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