寻求专家就短期封锁提供建议,我们现在已经看到了近一周的时间。
DB 是 15 TB,而我们有很多阻塞的这个表 B - 几乎有 300 个是 2 TB。
在使用 sp_whoisactive 时,我看到查询在 3-4 秒的较短部分内被阻塞,有些在 9-10 秒内被阻塞,但由于这些查询几乎一整天都在连接超过 2-3 千个,这会导致应用程序中出现大量错误。
故障排除:
以下是一些指标:
结果根据 david …
在为 SQL 服务器进行常规操作系统修补后,我们遇到了一个奇怪的问题。
根据最佳实践,我们在被动上应用补丁并进行节点故障转移以使当前被动、主动,反之亦然以完成修补。
通常节点故障转移是无缝的并且在一分钟内完成。但是最近我们遇到了一个问题,在节点故障转移后需要 4 分钟才能使 SQL 联机:
我正在检查日志和事件,但找不到原因:以下是迄今为止的调查结果:
注意:SQL 服务器在 VM 上运行
请协助我还应该检查什么才能找到根本原因?
编辑 - 我尝试分析集群日志,可以看到 sql 离线已启动,但我不确定它在内部花了至少 4 分钟的时间来实际关闭 sql 并将其恢复。4 分钟后,sql 错误日志将数据库的所有条目都调高了大约 10 秒。所以看起来 DB 可能没有参与这里来减慢进程。
编辑 - 当前检查时的一些 VLF 信息
我如何通过更改以下脚本来在启用/未启用 Always ON 的环境中运行。在 Kin 提供了一些非常有用的建议之后,下面似乎正在起作用。但是,当我需要跨 300-400 个 SQL 服务器进行部署时,此代码肯定不会处于最佳状态,而有些总是在其他服务器上没有。
请帮我修改/检查实例是否启用了AG并成功执行
更新根据@Kin 的要求
SET NOCOUNT ON
DECLARE @user_to_be_added sysname
SET @user_to_be_added = 'Domain\user'
DECLARE @sqltext nvarchar(max) = N''
if (select serverproperty('IsHadrEnabled')) = 0
BEGIN
-- change to your user to be added .. make sure that the login is already existing
SELECT @sqltext += char(10)+ 'use '+quotename(name)+';'+char(10)+ 'CREATE USER '+quotename(@user_to_be_added)+' FOR LOGIN '+quotename(@user_to_be_added)
FROM sys.databases where state_desc ='ONLINE' AND databaseproperty(name,'isReadOnly') = 0
SELECT @sqltext
END
Else
BEGIN
SELECT @sqltext …Run Code Online (Sandbox Code Playgroud) sql-server availability-groups sql-server-2014 sql-server-2016
需要一些帮助来理解UPDATE以下语句之一的缓慢:-
UPDATE TOP (100) xyz
SET xyz.flag = 1
OUTPUT inserted.Rcode, inserted.EDR, inserted.id, abc.EID,abc.CID,abc.ENID,abc.Cdate
FROM dbo.table1 xyz WITH (UPDLOCK, READPAST)
INNER JOIN dbo.table2 abc WITH (NOLOCK)
on xyz.id=abc.id
WHERE xyz.flag = 0
Run Code Online (Sandbox Code Playgroud)
表1有大约。50 万行,表 2 大约有。500 万行
哈希匹配不同流运算符显示黄色警报,消息为:
操作员使用 Tempdb 溢出数据,以溢出级别 4 和 1 个溢出线程执行”
构建残差:
database.dbo.table2.id as abc.id = database.dbo.table2.id as abc.id
我截了屏。不幸的是,由于安全原因,我不能提供更多,甚至不能提供匿名计划。从我的工作站我无法访问互联网,所以我无法让计划浏览器在那里运行。
通常,对于较小的行子集,它在几秒钟内,就像我们刚刚匹配 10K 行或其他东西一样。但是随着数据量的增加,这似乎是一个临界点,应用程序无法承受 1 分钟的运行时间。从 SSMS 我得到 30 秒,但从应用程序我们有平均。约 50 秒 RCSI 处于测试阶段。
我的好计划没有显示 Hash Match Flow Distinct 运算符,如我的屏幕截图所示,而其余计划保持不变。好的一个在 3 秒左右完成。正如所见,该操作员花费了近 16 秒。我们可以通过适当的索引或查询重写来消除它吗? …
sql-server execution-plan update sql-server-2014 query-performance
我试图搜索这个并且能够找到很少但找不到确切的方法来编写数据库的数据库级别权限。
我正在迁移这个数据库,我可以使用创建其登录名sp_help_revlogin,但不会复制用户权限。
我可以使用以下查询提取权限:
SELECT
ISNULL(OBJECT_NAME(major_id),'') [Objects], USER_NAME(grantee_principal_id) as [UserName], permission_name as [PermissionName]
FROM
sys.database_permissions p
WHERE grantee_principal_id>0
ORDER BY
OBJECT_NAME(major_id), USER_NAME(grantee_principal_id), permission_name
Run Code Online (Sandbox Code Playgroud)
但是我需要像 rev login 这样的东西来生成一个脚本,你可以执行来获取权限映射。
我尝试过 DBAtools,但我无法使用,因为它失败并出现错误
无法找到类型 [DbaInstanceParameter]
我有 50 多个登录名和大约 20 个要复制的角色。
使用 Demo from here重现我的问题,更改表结构如下,并将演示分区函数修改为 datetime
CREATE TABLE [dbo].[DemoPartitionedTable](
[DemoID] [int] IDENTITY(1,1) NOT NULL,
[SomeData] [sysname] NOT NULL,
[CaptureDate] [datetime] NULL,
CONSTRAINT [PK_DemoPartitionedTable] UNIQUE NONCLUSTERED
(
[DemoID] ASC,
[CaptureDate] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON)
)
GO
Run Code Online (Sandbox Code Playgroud)
用户运行如下查询(查询 1)
SELECT [DemoID], [SomeData], [CaptureDate] FROM
[dbo].[DemoPartitionedTable] WHERE (1=1) and (1=1) and
CONVERT(varchar(10),CaptureDate,112) between 20190912 and 20190912
Run Code Online (Sandbox Code Playgroud)
计划是https://www.brentozar.com/pastetheplan/?id=r1veZhovH
大约需要 4 小时才能返回 500 万行
如果我使用如下分区键来改进上面的代码(查询 2)
SELECT [DemoID], [SomeData], [CaptureDate] FROM …Run Code Online (Sandbox Code Playgroud) performance sql-server partitioning sql-server-2012 query-performance performance-tuning
sql-server ×6
blocking ×1
clustering ×1
failover ×1
partitioning ×1
performance ×1
permissions ×1
scripting ×1
update ×1
waits ×1