我在 SQL Server 2016 SP1 Standard 上设置了 AlwaysOn AG。然后我创建了一个 AG 并添加了一个带有自动种子(同步模式)的数据库。我使用 SSMS 2017 来创建我的 AG 并添加数据库。一切正常。
但是,当我检查等待统计信息时,我在主服务器上获得了 VDI_CLIENT_OTHER (80%) 类型的等待,平均资源时间为 42 秒。经过一番研究,我发现等待是由执行命令 VDI_CLIENT_WORKER 的 4 个会话生成的。据我了解,等待意味着在播种新 AG 时线程正在等待工作。但我不明白的是为什么我有那些等待,因为我的 AG 准备好了,为什么我有 4 个执行 VDI_CLIENT_WORKER 命令的会话?我发现每个调度程序都有一个 VDI_CLIENT_WORKER
有人可以尝试解释 VDI_CLIENT_WORKER-command 的作用以及如何解决许多 VDI_CLIENT_OTHER 等待的问题吗?
我有一个带有 where 子句的动态构建查询,如下所示:
where column in ('a', 'a', 'a', 'b')
实际数据要长很多,有很多重复项,如上面的示例中a重复了 3 次。
对于WHERE使用IN具有大量值(其中许多是重复值)的非常大的子句,是否存在潜在的性能影响?
performance sql-server t-sql sql-server-2016 query-performance
检查我们昨天的生产日志,我们发现在大约 5 分钟的时间内,一大堆非常简单的查询超时。对服务器日志的进一步调查显示磁盘活动激增,这使我得出结论,当时正在数据库上运行自动 CHECKPOINT。
这是我真的不想在高峰时段发生的事情。所以我想每天在非高峰时间安排一个每日检查点。
这是一个好主意吗?馊主意?浪费时间?如果不是这样,那又是什么?
我们的客户坚持要求我们现在加密他们所有的 SQL Server 静态数据,其中必须包括 tempdb。我想我有以下选择——
感谢任何建议(仅适用于 SQL Server 2016标准版)
我想知道在特定数据库中创建的对称密钥是否存储在主文件组中?
或者它们存储在用户无法与之交互的某些特殊文件组中?
例如,如果我对文件组(主要或次要)执行部分备份,我可以确定备份不包含对称密钥吗?
我正在尝试更新使用子句谓词中的IN运算符的查询,以比较潜在的性能改进并更好地了解当两者互换时幕后发生的事情。这是我的理解,在实践中,查询优化器对待,并以同样的方式时,它可以。WHEREEXISTSEXISTSIN
我注意到当使用IN运算符运行查询时,它返回所需的结果集。但是,当我用EXISTS等效项替换它时,它会从我要过滤的主表中提取所有值。它忽略传递给EXISTS (SELECT ...并返回所有可能的不同值的提供的输入值。
用例相对简单:查询接受一个管道分隔的@Series字符串,最多可以包含 4 个值,例如S1|S2|S3|S4或S2|S4。在这里,我string_split将输入到一个表中的变量@SeriesSplit,以确定相应的内部[SeriesId]的[Series]。然后过滤返回的结果集以排除[Series]未通过的结果。
为了说明,这里有一个类似的表定义:
DROP TABLE IF EXISTS [dbo].[Document]
IF OBJECT_ID('[dbo].[Document]', 'U') IS NULL
BEGIN
CREATE TABLE [dbo].[Document] (
[DocumentId] bigint IDENTITY(1,1) NOT NULL
,[DocumentSeriesId] [tinyint] NOT NULL
,CONSTRAINT [PK_Document] PRIMARY KEY CLUSTERED ([DocumentId] ASC)
,INDEX [IX_Document_SeriesId] NONCLUSTERED ([DocumentSeriesId] ASC)
);
END;
GO
Run Code Online (Sandbox Code Playgroud)
用虚拟数据填充测试表。
SET IDENTITY_INSERT [dbo].[Document] ON; …Run Code Online (Sandbox Code Playgroud) performance sql-server execution-plan sql-server-2016 query-performance
我有一个关于 SQL Server 2016 安装的问题。
我们安装了 2017/09/19 制作的试用版
根据我在数据库中执行的脚本,到期日期是 2018/03/18 但我们仍然可以毫无问题地使用它。
使用此数据库的 Sharepoint 站点不会给出任何错误或警告图例,说明它已过期或某些功能不再可用。我还可以从 MSQLServer Management Studio 进入并执行脚本、创建新数据库等。
怎样才能准确知道保质期?
SELECT
@@SERVERNAME as SERVERNAME,
CREATE_DATE as INSTALALTIONDATE,
SERVERPROPERTY('EDITION') as Version,
DATEADD(DD, 180, CREATE_DATE) AS "EXPIRY DATE"
FROM SYS.SERVER_PRINCIPALS
WHERE SID = 0X010100000000000512000000
SERVERNAME INSTALLATIONDATE Version EXPIRY DATE
SAHARCVSPS02 2017-09-19 13:15:20.967 Enterprise Evaluation Edition (64-bit) 2018-03-18 13:15:20.967
Run Code Online (Sandbox Code Playgroud) 我们有一台新的 Windows 2016 服务器,我必须安装 SQL Server 2016 标准版。安装和配置 SQL 服务器后,我会将现有的生产数据库移动到新的数据库服务器。
我可以远程桌面访问服务器以安装 SQL 服务器,但不确定是否需要域服务帐户?我的印象是 SQL 服务器在安装过程中分配的默认服务就足够了。
问题 1:
DB Admin 团队将远程桌面连接到该服务器并使用 SSMS 连接到 SQL 服务器,而不是从他们的本地 SSMS。在这种情况下,我是否必须拥有域服务帐户?
问题2:
DB支持的应用程序将有几百个用户通过网络连接?在这种情况下,默认服务帐户就足够了,还是我必须拥有域服务帐户?
我是数据库管理领域的新手,所以我仍然在为几个概念苦苦挣扎。
因此,我们的数据团队寻求帮助以解决他们遇到的问题。我最终将其追踪到了一些真正超出范围的数据 (1/1/0001) 和他们使用的 DATEDIFF 函数。虽然我已经解决了他们的问题,但实际上我并不知道 0 在他们使用时会变成什么。
我最初认为它更接近整数溢出而不是真正的转换错误,但事实并非如此。我在带有 DATEDIFF_BIG 和相同错误的 SQL 2016 框中尝试了它。我有一个样本供你们在下面一起玩,以及哪些有效,哪些无效。
/** Setup The Sample */
DECLARE @TestValue DATETIME2(7)
SET @TestValue = '0001-01-01 10:30:00.0000000'
/** Conversion Error
Msg 242, Level 16, State 3, Line 10
The conversion of a datetime2 data type to a datetime data type resulted in an out-of-range value.
*/
SELECT DATEDIFF(MINUTE, 0, @TestValue)
--Also does not work, same error.
SELECT DATEDIFF_BIG(MINUTE, 0, @TestValue)
/** Works */
SELECT DATEDIFF(MINUTE, '1/1/1900', @TestValue)
/** Works */
SELECT …Run Code Online (Sandbox Code Playgroud) 我有一个带有订单/位置列的 SQL Server 2016 表。此列是一个 INT,用于指示表中行的首选顺序/位置以供演示。
如何在不使用游标的情况下在位置 1 插入一行?(即新行的位置为 1,现有行 - 假设在插入之前顺序正确 - 必须“向下移动”)
order/position 列不是 NULL 并强制为 UNIQUE。我也不想使用“钝力”技术,例如将所有行的顺序/位置值设置为一些“从未使用”的值,然后只对所有行执行重新排序。
sql-server-2016 ×10
sql-server ×9
performance ×2
t-sql ×2
datetime ×1
datetime2 ×1
encryption ×1
filegroups ×1
users ×1