我们遇到了 CDC 问题,即捕获作业失败并且不会自行重启。这是在 DEV 环境中,所以没有害处,但有没有人看到这些错误或知道 CDC 到底出了什么问题?
SQL 2014 EE 12.0.5540 - 带有 SSISDB 的 2 节点 AG
过程或函数 sp_batchinsert_1663605265 指定的参数过多。更多信息查询sys.dm_cdc_errors动态管理视图
日志扫描进程未能从日志序列号 (LSN) {00002d0d:0000f11f:0002} 构建复制命令。备份发布数据库并联系客户支持服务。想要查询更多的信息
日志扫描进程在处理日志记录时失败。参考当前会话中以前的错误以确定原因并纠正任何相关问题。更多信息查询sys.dm_cdc_errors动态管理视图
我们尝试使用sp_cdc_drop_jobabd删除并重新创建捕获作业sp_cdc_add_job。我们还尝试故障转移到另一个节点以及服务器/服务重新启动。似乎没有什么能让 CDC 自行重启。
我们在周五通过 AG 滚动补丁应用了 CU4,因此我们处于最新最好的状态。在我们修补并故障转移后,这个问题立即出现。
添加日志查询结果
好的,所以我有一个我们在 SSRS 报告中使用的非存储过程查询。这个查询非常慢(过去两个小时我已经运行了这个查询的原始版本,但仍未完成),为了改进它,我从头开始重写它,我想出了以下内容:
现在这里是无聊的单词问题部分:
我们希望为TOP 5每个销售代表提取一份客户列表,但从该列表中排除所有TOP 10客户。(因此,如果 John Doe 有客户 A、B、C、D 和 E,而客户 C 是前 10 名之一,则只提取 A、B、D 和 E。)
为此,第一个查询使用了IN (... NOT IN ( ) ),所以我认为是嵌套IN的问题,为了重写它,我做了一个OUTER APPLY真正打破一切的查询。
无论如何,我修复了所有这些并运行了查询,但仍然需要 10-15 秒,我认为这是参数嗅探。为了进行调查,我在 SSMS 中运行了查询,添加了OPTION (RECOMPILE)(查看会生成什么查询计划),并得到以下内容:
可以在 Brent Ozar 的“粘贴计划”中查看此处。生成这个的查询是:
DECLARE @Top10Temp TABLE (Id INT)
INSERT INTO @Top10Temp
SELECT TOP 10 Id
FROM Object1
WHERE Column2 = @ReportId
AND Column3 …Run Code Online (Sandbox Code Playgroud) sql-server optimization execution-plan sql-server-2014 parameter-sniffing
我们在 SQL Server 2014 SP2 CU5(3 个节点)中有一个 AOAG。有一个读取提交的快照隔离级别为ON的数据库。我们有一个压缩的大表。我们在这个表上的一些更大的查询是在辅助中执行的。
然后在主节点上有一个夜间作业来重新组织几个表上的索引。当它遇到上述表的聚集索引时,我们会收到以下错误:
访问数据库 'yyyy' 中的表 'xxxx' 中的版本化行时事务中止。未找到请求的版本化行,因为尝试创建版本的操作不允许可读的辅助访问。
在某些时候,大查询正在执行带有提示的读取READUNCOMMITTED。我认为这是这个错误的原因,所以我删除了它们。但是错误仍然存在。
有任何想法吗?
定义:
CREATE TABLE [dbo].[big_table](
[ID] [int] NOT NULL IDENTITY(1, 1),
1 [int] NULL,
2 [datetime] NULL,
3 [int] NULL,
4 [int] NULL CONSTRAINT [DF_ccc_bUnits] DEFAULT ((0)),
5 [money] NULL,
6 [money] NULL,
7 [int] NULL,
8 [int] NULL CONSTRAINT [DF_ccc_MinDays] DEFAULT ((0)),
9 [int] NULL,
10 [int] NULL,
11 …Run Code Online (Sandbox Code Playgroud) sql-server availability-groups sql-server-2014 index-maintenance
我有有一张桌子交易的总线(登机乘客)。给定路线 ID和日期,我需要在另一个表中查找当天正在执行的服务类型。巴士时刻表最多每 6 个月左右更改一次,大多数年份保持不变。
目前调度表的定义如下:
CREATE TABLE [dbo].[Routes](
[ID] [int] NOT NULL,
[RouteID] [int] NOT NULL,
[Type] [varchar](50) NOT NULL,
[StartDate] [datetime] NOT NULL,
PRIMARY KEY CLUSTERED
(
[ID] ASC
));
Run Code Online (Sandbox Code Playgroud)
一个示例可能如下所示:
ID RouteID Type StartDate
-- ------- ------------ ----------
1 301 Standard 2015-01-01
2 301 Discontinued 2016-06-01
3 302 Standard 2015-01-01
4 302 ParaTrans 2017-01-01
Run Code Online (Sandbox Code Playgroud)
所以,如果我有一个2015-04-20的RouteID 301交易,我想取回“标准”,但如果交易是从2018-01-20 开始,它应该返回“停止”。对于2015-01-01之前的交易,它应该返回 NULL(或“”,或任何可能与有效答案冲突的结果,即“标准”、“Paratrans”或“停止”)。 …
我今天遇到了一个查询,它做了一些我以前从未见过的事情。它做了这样的事情:
SELECT
MIN(+ - schema_id) AS [WhatInTheWorld?],
MIN(schema_id) AS MinimumID,
MAX(+ - schema_id) AS [Uhhh],
MAX(schema_id) AS MaxID
FROM sys.objects
Run Code Online (Sandbox Code Playgroud)
这给出了以下结果:
WhatInTheWorld? MinimumID Uhhh MaxID
-4 1 -1 4
Run Code Online (Sandbox Code Playgroud)
“+”和“-”究竟是做什么的?
我的数据库中有一些自动生成的 _WA_Sys_ 统计信息,它们有一段时间没有更新(与同一个表中的其他统计信息相比)
经验法则似乎是在大于 500 行的表中,统计信息在 20% + 500 行数据更改时更新。
但是,我可以看到使用以下查询
SELECT t.name,
i.name,
i.rowcnt,
i.rowmodctr,
p.last_updated
FROM sys.sysindexes i
JOIN sys.tables t
ON i.id = t.object_id
JOIN sys.stats s
ON s.object_id = t.object_id AND i.name = s.name
CROSS APPLY sys.dm_db_stats_properties(s.object_id,s.stats_id) p
WHERE rowmodctr > 0
ORDER BY i.rowmodctr DESC
Run Code Online (Sandbox Code Playgroud)
有一个表包含许多过时的 _WA_Sys_ 统计信息(并且 rowmodctr 高于 20% + 500)
如果对表运行查询并在 WHERE 子句中添加与过时 _WA_Sys_ 统计信息关联的列之一并检查统计信息的更新日期,我可以看到它已更新。
如果我再次使用 WHERE 子句运行相同的查询,则统计信息不会更新
似乎 _WA_Sys 统计信息在运行查询时更新,将使用它们并且它们已过时?
当 SQL Server 服务启动时,我需要在我的服务器上的 IIS 中回收一个 AppPool。
我采取的路线是有一个启动存储过程,它运行具有 Powershell 作业步骤的代理作业。
我已经从互联网上创建/抓取了一个 Powershell 脚本来回收应用程序池:
# Load IIS module:
Import-Module WebAdministration
# Set a name of the site we want to recycle the pool for:
$site = "Default Web Site"
# Get pool name by the site name:
$pool = (Get-Item "IIS:\Sites\$site"| Select-Object applicationPool).applicationPool
# Recycle the application pool:
Restart-WebAppPool $pool
Run Code Online (Sandbox Code Playgroud)
这适用于操作系统级别,但仅当 Powershell 以管理员身份运行时才有效(即使我在 Admin 组中登录到 Windows 的帐户也是如此)
果然,如果我使用包含上述代码的 Powershell 步骤在代理中创建作业,则在执行时会出现错误
作业步骤在 PowerShell 脚本的第 6 行收到错误。对应的行是'$pool = (Get-Item "IIS:\Sites\$site"| Select-Object applicationPool).applicationPool'。更正脚本并重新安排作业。PowerShell 返回的错误信息是:'无法检索 …
我使用 .NET 在 SQL Server 2014 上执行 SQL 操作,这里是使用的代码:
using(SqlConnection conn = new SqlConnection(connectionString)){
//https://stackoverflow.com/questions/1880471/capture-stored-procedure-print-output-in-net
conn.InfoMessage += new SqlInfoMessageEventHandler(logSqlMessages);
conn.Open();
using(SqlCommand stmt = new SqlCommand{
Connection = conn,
CommandText = sql,
CommandTimeout = 30000 // The time in seconds to wait for the command to execute. The default is 30 seconds.
//,CommandType = CommandType.StoredProcedure
})
{
affectedRecords = stmt.ExecuteNonQuery();
} // using stmt
} // using conn
Run Code Online (Sandbox Code Playgroud)
当我查看 Active Monitor 时,有数十行引用相同的操作。它们都具有相同的session_id,其中一些具有正在运行的任务状态,并且大多数处于暂停状态。其中一些具有 LastWaitTime CXPACKET,大多数具有PAGEIOLATCH_SH.
我还在 SQL …
sql-server optimization ado.net activity-monitor sql-server-2014
我有一个包含查找表的外键的父表(简化示例):
CREATE TABLE [dbo].[Parent] (
[Id] [uniqueidentifier] NOT NULL,
[LookupId] [uniqueidentifier] NULL
)
CREATE TABLE [dbo].[Lookup] (
[Id] [uniqueidentifier] NOT NULL,
[Name] [nvarchar](64) NOT NULL
)
Run Code Online (Sandbox Code Playgroud)
在这种情况下,该Parent表有超过 1000 万行,而该Lookup表大约有 5000 行。真正的Parent实现有几个这样的对其他表的外键引用,并且这些列中的每一个都可能包含 NULL。
两个示例表的Id列都具有唯一的聚集索引,Parent具有 的非聚集索引LookupId和Lookup的非聚集索引Name。
我正在运行一个分页查询,我想在结果中包含查找值:-
SELECT
P.Id,
L.Name
FROM Parent P
LEFT JOIN Lookup L ON P.LookupId = L.Id
ORDER BY P.Id
OFFSET 500000 ROWS FETCH NEXT 50 ROWS ONLY
Run Code Online (Sandbox Code Playgroud)
这运行得很快,按 排序也是如此P.LookupId。 …
用户(Windows 登录)刚刚抱怨他被拒绝执行程序。我去检查并确认他有执行它的权限。我没有改变任何东西(现在我是唯一一个拥有管理员权限的人,如果需要的话),在两次尝试失败后,他尝试第三次运行 SP 并且成功了。
我将 XE 配置为捕获错误消息,它捕获了错误代码 229 的两倍:
对象“storedProcedureName”、数据库“databaseName”、架构“schemaName”的 EXECUTE 权限被拒绝。
是否存在预期这种行为的任何情况?
Microsoft SQL Server 2014 (SP3-CU-GDR) (KB4535288) - 12.0.6372.1 (X64)
sql-server-2014 ×10
sql-server ×8
optimization ×2
ado.net ×1
errors ×1
permissions ×1
powershell ×1
statistics ×1