当 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) 如果我有一个类型为binary或 的列varbinary,我将数据想象为一个位序列。例如,对我来说,01001(作为基数 2 的数字)可能是列中的有效值是有意义的binary(5)。
为什么以这种方式插入和显示二进制数据并不简单?
例如,为什么 SSMS 将二进制数据转换为十六进制,而不是显示一系列 1 和 0(在我看来,这更容易推理)?
在发生死锁异常时重试 SQL 查询是否总是安全的?这会导致意外行为或执行操作两次吗?我认为死锁异常总是意味着回滚,即使查询不在显式定义的事务中运行。
我今天正在考虑类似的事情,但找不到这条信息。
当 SQL Server 请求内存而操作系统无法提供内存时,我们会得到RESOURCE_SEMAPHORE等待类型。
但我找不到类似的信息:
假设查询要求 3GB。但只能提供2,查询是否仍然运行缓慢,或者一直在那里等待?
RESOURCE_SEMAPHORE意味着查询处于“停止”状态只是等待内存?
待处理的内存授予应该始终为 0,对吗?这意味着查询正在请求多少内存但仍在等待,对吧?
我正在阅读Microsoft 的《内存授予:神秘的 SQL Server 内存消费者与许多名字》,但它没有解释这一点,它只是解释了什么是内存授予。
我想使用备份文件夹中的备份文件恢复我的数据库。
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) 我在 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
我真的对这里的 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 上意外未启用 SQL 代理,并且 3 周内没有运行任何作业,包括没有备份(完整、差异或日志)。SQL 代理现已启用。数据库的完整备份已运行。现在日志备份正在运行,并且已经运行了一个多小时(通常在完整备份运行后需要几秒钟)。
有什么潜在的问题需要考虑吗?日志文件变得非常大,大约 200 GB。
我遇到了与自动故障转移相关的异常行为,因此在关闭 SQL Server 服务的情况下自动故障转移不起作用。集群磁盘似乎仍然连接到故障节点,但我无法找出导致此行为的最终问题。如果您能帮助我理解这个问题,我将非常感谢您。
出于测试目的,我在域控制器上创建了 iSCSI 目标,并连接了 2 个启动器:
以下是有关我的集群的详细信息:
以下是有关我的 SQL Server 服务的详细信息:
以下是有关集群磁盘的详细信息(我只添加了其中一个磁盘的详细信息,因为两个磁盘是相同的):
现在,当我关闭 SQL Server 服务时,不会发生服务的自动故障转移:
我测试了自动故障转移成功运行的其他场景:
在上述所有场景中,资源均成功故障转移到另一个节点。
您能否帮我弄清楚当我关闭活动节点上的 SQL Server 服务时自动故障转移出了什么问题?
sql-server clustering failover sql-server-2014 failover-cluster-instance
我试图理解为什么 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)