标签: sql-server

SQL Server如何将大json上传到列中,性能问题

当 nvarchar(max) 列只有几 MB 数据时,我在表上的单行插入/更新语句上遇到性能不佳的情况。

这是我的表结构:

CREATE TABLE [dbo].[tbl_set_Cart](
    [ID] [int] NOT NULL,
    [AS400_CUSTOMER_COD] [nvarchar](50) NOT NULL,
    [AS400_LISTIN] [int] NOT NULL,
    [VALUE] [nvarchar](max) NOT NULL,
    [DELIVERY_COSTS] [nvarchar](max) NOT NULL,
    [ITEMS_COUNT] [int] NOT NULL,
    [ITEMS] [nvarchar](max) NOT NULL,
    [KIND] [int] NOT NULL,
    [CHECKOUT_INFO] [nvarchar](max) NOT NULL,
    [ISSUES] [nvarchar](max) NOT NULL,
    [LAST_CHECK] [datetime] NOT NULL,
    [USER_ID] [int] NOT NULL,
    [IMPERSONATED_USER_ID] [int] NOT NULL,
    [OVERRIDE_PRICES] [bit] NOT NULL,
    [HAS_ISSUE] [bit] NOT NULL,
    [IS_CONFIRMED] [bit] NOT NULL,
    [IS_COLLECTED] [bit] NOT NULL,
    [_METADATA] [nvarchar](max) NOT …
Run Code Online (Sandbox Code Playgroud)

sql-server update json performance-tuning

1
推荐指数
1
解决办法
1996
查看次数

为什么二进制数据不能插入/显示为 1 和 0?

如果我有一个类型为binary或 的列varbinary,我将数据想象为一个位序列。例如,对我来说,01001(作为基数 2 的数字)可能是列中的有效值是有意义的binary(5)。

为什么以这种方式插入和显示二进制数据并不简单?

例如,为什么 SSMS 将二进制数据转换为十六进制,而不是显示一系列 1 和 0(在我看来,这更容易推理)?

sql-server ssms encoding varbinary

1
推荐指数
1
解决办法
536
查看次数

如果出现死锁异常,我可以重试每个 SQL 查询吗 (MSSQL)

在发生死锁异常时重试 SQL 查询是否总是安全的?这会导致意外行为或执行操作两次吗?我认为死锁异常总是意味着回滚,即使查询不在显式定义的事务中运行。

sql-server deadlock query update

1
推荐指数
1
解决办法
3200
查看次数

即使 SQL Server 无法为查询授予请求的内存,查询是否仍然运行?

我今天正在考虑类似的事情,但找不到这条信息。

当 SQL Server 请求内存而操作系统无法提供内存时,我们会得到RESOURCE_SEMAPHORE等待类型。

但我找不到类似的信息:

  1. 假设查询要求 3GB。但只能提供2,查询是否仍然运行缓慢,或者一直在那里等待?

  2. RESOURCE_SEMAPHORE意味着查询处于“停止”状态只是等待内存?

  3. 待处理的内存授予应该始终为 0,对吗?这意味着查询正在请求多少内存但仍在等待,对吧?

我正在阅读Microsoft 的《内存授予:神秘的 SQL Server 内存消费者与许多名字》,但它没有解释这一点,它只是解释了什么是内存授予。

sql-server memory memory-grant

1
推荐指数
1
解决办法
329
查看次数

SQL Server 如何决定恢复哪个 trn 文件?

我想使用备份文件夹中的备份文件恢复我的数据库。

SQL Server 在 Windows 上运行。

当我想要恢复时,我右键单击数据库并选择“恢复”,然后选择“设备”,SQL Server Management Studio 将打开一个弹出窗口以选择要恢复的文件。

备份的文件夹包含一个bak文件和多个trn文件。

我需要将它们全部选择才能完成恢复(我不能只选择一个bak或一个trn文件进行恢复)。

之后,我看到 SQL 生成的脚本,并且可以看到并非所有文件都.trn包含在脚本中。

我的问题是 SQL Server 如何决定使用哪个 trn 文件,而不使用哪个?

Microsoft SQL Server 2016 (SP2-GDR) (KB4583460) - 13.0.5103.6 (X64)   
Enterprise Edition (64-bit) on Windows 10 Pro 10.0 <X64> (Build 19043: ) (Hypervisor) 
Run Code Online (Sandbox Code Playgroud)

sql-server

1
推荐指数
1
解决办法
281
查看次数

SQL Server 2016 的内存利用率

我在 Windows Server 上运行 SQL Server 2016 企业版,内存为 128 GB。在安装过程中,我为 SQL 服务器分配了 124 GB,因为该服务器仅专用于 SQL,其余的留给操作系统。

现在,当 DML/DDL 查询运行或任何维护计划运行时,每个任务管理器的内存消耗飙升至 97%。但。PLE 保持良好状态(即 > 300 秒)并且未观察到性能问题。一旦作业和查询完成,SQL 在相当长一段时间内不会释放内存,我必须进行内存上限或等待一整天才能释放内存。

除了内存上限之外,还有什么方法可以让 SQL Server 释放内存以及为什么 SQL 无法在所有作业完成后立即释放内存。

sql-server memory sql-server-2016 enterprise-edition performance-tuning

1
推荐指数
1
解决办法
1477
查看次数

SQL 主查询子查询中 WHERE 中使用的值

我真的对这里的 SQL 感到困惑,我有这个示例,其中我在子查询中使用主查询的值,然后使用 XML PATH 在日期之间添加逗号。设置是两张表,其中一张是我想要串在一起的日期。我不确定为什么子查询 where 语句没有重新调整正确的结果。

http://www.sqlfiddle.com/#!5/5443b/2

设置

CREATE TABLE log
    ([logID] [int] NULL, 
     [LogDate] [datetime] NULL
    )
;

CREATE TABLE logdata
    ([logdataID] [int] NULL, 
     [logID] [datetime] NULL
    )
;
    
INSERT INTO log
    ([logID], [LogDate])
VALUES
    (1, 2021-02-01),
    (1, 2021-02-02),
    (1, 2021-02-03),
    (3, 2021-03-12),
    (4, 2021-02-12)
;

INSERT INTO logdata
    ([logdataID], [logID])
VALUES
    (1, 1),
    (2, 2),
    (3, 3)
;
Run Code Online (Sandbox Code Playgroud)

我的尝试:

Select 
logID,
logdataID
LogDate =  (SELECT ',' + CAST(LogDate AS varchar) FROM log WHERE logID =  logID …
Run Code Online (Sandbox Code Playgroud)

sql-server subquery

1
推荐指数
1
解决办法
648
查看次数

SQL Server 备份日志 - 很长时间没有运行,可能会出现什么问题?

重新启动后,SQL Server 上意外未启用 SQL 代理,并且 3 周内没有运行任何作业,包括没有备份(完整、差异或日志)。SQL 代理现已启用。数据库的完整备份已运行。现在日志备份正在运行,并且已经运行了一个多小时(通常在完整备份运行后需要几秒钟)。

有什么潜在的问题需要考虑吗?日志文件变得非常大,大约 200 GB。

sql-server backup transaction-log

1
推荐指数
1
解决办法
692
查看次数

为什么当我关闭 SQL Server 故障转移群集实例中的 SQL 服务时,没有发生自动故障转移?

我遇到了与自动故障转移相关的异常行为,因此在关闭 SQL Server 服务的情况下自动故障转移不起作用。集群磁盘似乎仍然连接到故障节点,但我无法找出导致此行为的最终问题。如果您能帮助我理解这个问题,我将非常感谢您。

出于测试目的,我在域控制器上创建了 iSCSI 目标,并连接了 2 个启动器:

在此输入图像描述

以下是有关我的集群的详细信息:

在此输入图像描述 在此输入图像描述 在此输入图像描述

以下是有关我的 SQL Server 服务的详细信息:

在此输入图像描述 在此输入图像描述 在此输入图像描述

以下是有关集群磁盘的详细信息(我只添加了其中一个磁盘的详细信息,因为两个磁盘是相同的):

在此输入图像描述 在此输入图像描述

现在,当我关闭 SQL Server 服务时,不会发生服务的自动故障转移:

在此输入图像描述

我测试了自动故障转移成功运行的其他场景:

  1. 手动故障转移
  2. 关闭活动节点
  3. 在活动节点上禁用适配器
  4. 在任务管理器中杀死sql server进程
  5. 在任务管理器中杀死sql代理服务进程

在上述所有场景中,资源均成功故障转移到另一个节点。

您能否帮我弄清楚当我关闭活动节点上的 SQL Server 服务时自动故障转移出了什么问题?

sql-server clustering failover sql-server-2014 failover-cluster-instance

1
推荐指数
1
解决办法
721
查看次数

SQL Server - SELECT 语句采用排它锁 - 为什么?

我试图理解为什么 SQL Server (2014) 在死锁场景中放置独占键锁。我已将整个死锁图粘贴在下面。

我很困惑,因为死锁发生在两个 SELECT 语句之间,两者都作为单个 READ COMMITTED 语句运行,而不是在事务内运行(因此同一事务中的其他地方没有发生更新等)。

我相信发生死锁是因为每个进程都在索引上创建一系列键锁,并且由于获取它们的顺序,所以发生了死锁。但是,如果进程仅创建共享锁,则不应出现死锁(根据我的理解)!

所以根本问题是 - 为什么这些 SELECT 语句会获取独占键锁?

我希望这只是我对锁定的误解。任何建议将不胜感激。

    <deadlock>
  <victim-list>
    <victimProcess id="processd7f647848" />
  </victim-list>
  <process-list>
    <process id="processd7f647848" taskpriority="0" logused="25948" waitresource="KEY: 32:72057594051428352 (e2d15ad895e9)" waittime="5014" ownerId="394724294049" transactionname="user_transaction" lasttranstarted="2022-04-06T09:46:18.770" XDES="0x67bf873350" lockMode="S" schedulerid="15" kpid="26196" status="suspended" spid="306" sbid="0" ecid="0" priority="0" trancount="1" lastbatchstarted="2022-04-06T09:46:18.783" lastbatchcompleted="2022-04-06T09:46:18.783" lastattention="1900-01-01T00:00:00.783" clientapp=".Net SqlClient Data Provider" hostname="myhost" hostpid="1500" loginname="myuser" isolationlevel="read committed (2)" xactid="394724294049" currentdb="32" lockTimeout="4294967295" clientoption1="673185824" clientoption2="128056">
      <executionStack>
        <frame procname="MyDatabase.Main.GetMessages" line="154" stmtstart="11934" stmtend="12156" sqlhandle="0x03002000ebd98264d1bfae0066ae000001000000000000000000000000000000000000000000000000000000">
SELECT ID, Message FROM [dbo].[Messages] WHERE MessageType = @Type …
Run Code Online (Sandbox Code Playgroud)

sql-server deadlock locking blocking deadlock-graph

1
推荐指数
1
解决办法
928
查看次数