我在同一个域中有两个 SQL Server 2016 标准版服务器。ServerA有两个链接服务器连接设置到ServerB。
第一个链接服务器连接使用专用的远程SQL 登录安全上下文。那个一直是并且仍然工作正常。
第二个连接使用“登录的当前安全上下文”,它是ServerA 上的Windows 身份验证 (AD) 登录。直到今天,这也运行良好。
今天突然间,连接到 ServerA 然后尝试运行使用第二个链接服务器连接的查询的每个人最终都会遇到以下错误:
链接服务器“LinkedServerName”的 OLE DB 访问接口“SQLNCLI11”返回消息“无法生成 SSPI 上下文”。消息 -2146893044,级别 16,状态 1,第 0 行 SQL Server 网络接口:登录尝试失败
此外,用户目前可以直接连接到 ServerA 和 ServerB,甚至可以直接对 ServerB 上的对象执行查询,但是当他们尝试通过 ServerA 上的链接服务器运行引用 ServerB 上相同对象的查询时,这是唯一一次他们得到上述错误,目前。
这是我们目前看到的SPN和日志(抱歉所有混淆):
ServerB 成功的 SPN 注册 SQL 日志:
ServerB 成功的 SPN 注册 SQL 日志:
ServerA 注册的 SPN:
我知道这个问题可能已经回答了很多次了,但我需要一个更好的方法来解决它,或者向我的老板证明这是一种正常行为,或者我忽略了一些东西。
我不是 DBA,我是一名开发人员,就像我以前的工作一样,我必须担任 DBA Mantle,因为我们现场没有正式的 DBA,或者没有人想认真对待这件事。
我有三个 SQL Server 实例,一个使用 SQL 2008 R2,两个使用 SQL 2016。全部来自生产环境。
SQL 2008 R2 来自我们的主系统,它托管在 Hyper-V 中的虚拟服务器中,并且是专用数据库服务器。该服务器上没有分配其他应用程序,它是一个纯数据库服务器。
问题是服务器配置了 30 GB 的 RAM,而 SQL Server 配置为使用从最小 4 GB 到最大 22 GB。
如果我重新启动,显然服务器内存使用量在服务器性能管理器上趋于平缓,从使用的内存中释放内存到配置的最小值。
我需要帮助理解这种情况,因为所有文档都指向一个无可辩驳的事实,即这在 SQL Server 中是正常的,我已经对此进行了记录,但是我的老板和同事表示这不是数据库的正常行为。如果我做数字,我认为服务器正在请求更多内存。他们说这不是 SQL Server 的正常行为,而且我们忽略了一些东西(工作和其他东西)。为了监控或尝试确定服务器行为,我开始每两个小时发送一次数据库健康报告,以尝试检查发生了什么。对于他们来说,预期的行为是 SQL Server RAM 应该在性能图中上升和下降,而不是一直保持在顶部,据我了解,这是预期行为或 SQL Server 的设计。
但是在不同的时间点,作业上升到执行,并且它们正常完成,一些长时间运行的事务正在运行,但是当我在生成报告后为它们运行查询时,它们消失了。
有什么我忽略的吗?这是正常的吗?有没有办法在不重启实例的情况下释放内存?我已经尝试了很多解决方案
我已经设置了一个测试来对 SQL 服务器中的 xml 性能进行基准测试。
测试设置
表和索引设计
CREATE TABLE [dbo].[xml_Test]
(
[ID] [int] IDENTITY(1,1) NOT NULL,
[GUID] [varchar](50) NULL,
[JSON_Data] [varchar](max) NULL,
[XML_Data] [xml] NULL,
CONSTRAINT [PK_xml_Test] PRIMARY KEY CLUSTERED ([ID] ASC)
);
ALTER TABLE [dbo].[xml_Test] ADD CONSTRAINT [DF_xml_Test_GUID] DEFAULT (newid()) FOR [GUID];
ALTER TABLE [dbo].[xml_Test] ADD CONSTRAINT [PK_xml_Test] PRIMARY KEY CLUSTERED ([ID] ASC);
CREATE PRIMARY XML INDEX [PK_xml] ON [dbo].[xml_Test]
( [XML_Data]);
CREATE XML INDEX [IX_xml_Path] ON [dbo].[xml_Test] …Run Code Online (Sandbox Code Playgroud) 我一直在构建存储过程,但找不到任何关于 SQL Server 优化器如何处理 #temp 表的文档。
如果我有 4 个连接到一个 #temp 表,其中该 #temp 表是在存储过程执行期间创建的,并且 #temp 表可能包含零到多个记录,如何估计?
估计和join中的一些表一样大,因为在CREATE/ALTER的时候没有统计?估计很小?估计和其他#temporary表一样吗?
请注意,这是假设在执行时没有重新编译并且使用原始的。
我正在努力诊断 TSQL 中遗留查询的问题。查询中返回的列之一是:
CASE WHEN PaidDate >= '2021-01-01' AND PaidDate <=+'2021-10-31' THEN WO ELSE 0 END AS dYTDWO,
Run Code Online (Sandbox Code Playgroud)
我以前没有见过“<=+”作为条件,并且在网上找不到任何对此的参考。
谁能对此做出解释?SSMS 对此非常满意,并且查询得以执行。
谢谢。
我有一个包含以下内容的示例数据文件,并使用 UTF8 编码保存。
\noab~opqr\n\xc3\xb6ab~\xc3\xb6pqr\n\xc3\xb6ab~\xc3\xb6pqr\nRun Code Online (Sandbox Code Playgroud)\n该文件的格式是固定宽度,第 1 至第 3 列各分配 1 个字符,第 4 列保留 5 个字符。
\n我创建了一个 XML 格式文件,如下所示
\n<?xml version = "1.0"?> \n<BCPFORMAT xmlns="http://schemas.microsoft.com/sqlserver/2004/bulkload/format" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> \n <RECORD> \n <FIELD xsi:type="CharFixed" ID="Col1" LENGTH="1"/> \n <FIELD xsi:type="CharFixed" ID="Col2" LENGTH="1"/> \n <FIELD xsi:type="CharFixed" ID="Col3" LENGTH="1"/> \n <FIELD xsi:type="CharFixed" ID="Col4" LENGTH="5"/> \n <FIELD xsi:type="CharTerm" ID="LINE_BREAK" TERMINATOR="\\n"/> \n </RECORD> \n <ROW> \n <COLUMN SOURCE="Col1" NAME="Col1" xsi:type="SQLNVARCHAR"/> \n <COLUMN SOURCE="Col2" NAME="Col2" xsi:type="SQLNVARCHAR"/> \n <COLUMN SOURCE="Col3" NAME="Col3" xsi:type="SQLNVARCHAR"/> \n <COLUMN SOURCE="Col4" NAME="Col4" xsi:type="SQLNVARCHAR"/> …Run Code Online (Sandbox Code Playgroud) 我正在 SQL Server 2019 CU14 上进行测试。考虑针对兼容级别为 130 或 140 的 SQL Server 数据库创建的以下表值函数:
-- requires database compat 130 or 140 to see the issue
CREATE OR ALTER FUNCTION [dbo].[TVF_BUG_REPRO_2] (@O DateTime, @Z varchar(50))
RETURNS TABLE
WITH SCHEMABINDING
AS
RETURN
SELECT
CAST(
CASE
WHEN SZ.Zone1 > '' THEN (@O at time zone SZ.Zone1) at time zone 'Pacific Standard Time'
WHEN LEN(@Z) > 3 THEN (@O at time zone @Z) at time zone 'Pacific Standard Time'
ELSE @O
END AS DATETIME
) …Run Code Online (Sandbox Code Playgroud) 我有以下 SQL 时间序列表:
CREATE TABLE [dbo].[SensorData](
[DateTimeUtc] [datetime2](2) NOT NULL,
[SensorId] [int] NOT NULL,
[Key] [varchar](20) NOT NULL,
[Value] [decimal](19, 4) NULL,
CONSTRAINT [PK_SensorData] PRIMARY KEY CLUSTERED
(
[SensorId] ASC,
[Key] ASC,
[DateTimeUtc] ASC
)WITH (STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, OPTIMIZE_FOR_SEQUENTIAL_KEY =
ON, Data_Compression=PAGE) ON PS_Daily(DateTimeUtc))
Run Code Online (Sandbox Code Playgroud)
现在基于这个索引,每个单独的查询都需要在查询where过滤器中包含以下参数:
CREATE TABLE [dbo].[SensorData](
[DateTimeUtc] [datetime2](2) NOT NULL,
[SensorId] [int] NOT NULL,
[Key] [varchar](20) NOT NULL,
[Value] [decimal](19, 4) NULL,
CONSTRAINT [PK_SensorData] PRIMARY KEY CLUSTERED
(
[SensorId] ASC,
[Key] ASC,
[DateTimeUtc] ASC
)WITH …Run Code Online (Sandbox Code Playgroud) 问题陈述我刚刚在示例 WideWorldImporters 数据库上
运行。dbcc checkdb当我运行此命令时,我收到了 (4) 个有关统计数据损坏的错误,我不记得过去曾见过这些错误。虽然这只是一个示例数据库,但我很好奇,因为我不想在真实的数据库中看到类似的错误。
SSMS 和 Windows 版本
SSMS:18.10 (15.0.18390.0) / Windows 10:版本 21H1(操作系统内部版本 19043.1526)
SQL Server 开发人员版本
Microsoft SQL Server 2019 (RTM-CU13) (KB5005679) - 15.0.4178.1 (X64) 2021 年 9 月 23 日 16:47:49 版权所有 (C) 2019 Microsoft Corporation Developer Edition(64 位),适用于 Windows 10 Pro 10.0 (内部版本 19043:)
SSMS 中发出的命令:
dbcc checkdb ([WideWorldImporters]) with all_errormsgs, data_purity, extended_logical_checks , no_infomsgs;
go
Run Code Online (Sandbox Code Playgroud)
错误信息
消息 9122,级别 16,状态 201,第 10 行
统计信息“sys.TT_OrderIDList_22AA2996.PK__TT_Order__C3905BAE80B57D6F”已损坏。
消息 9122,级别 16,状态 201,第 10 行 …
当我在 SQL Server 中使用大对象 (LOB) 数据类型的变量时,整个变量是否始终保存在内存中?即使是2GB大小?
sql-server ×10
index-tuning ×2
memory ×2
t-sql ×2
blob ×1
case ×1
dbcc-checkdb ×1
encoding ×1
errors ×1
logon ×1
openrowset ×1
performance ×1
xml ×1