我使用备份还原技术和一组传输后操作(如DBCC UPDATEUSAGE
或)将数据库从 SQL Server 2008R2 迁移到 SQL Server 2019(均为企业版)UPDATE STATISTICS XXX
。
在统计更新时,我收到以下错误:
Msg 402, Level 16, State 1, Procedure ZZZZ, Line 5 [Batch Start Line 0]
The data types datetime and time are incompatible in the add operator.
Msg 4413, Level 16, State 1, Line 1
Could not use view or function 'ZZZZ' because of binding errors.
Run Code Online (Sandbox Code Playgroud)
我知道该消息非常明确(在 2008R2 上语法正确的视图在 2019 年不再适用)。我不明白为什么定义的视图WITH SCHEMABINDING
无效会阻止更新基础表上的统计信息。
此外,在使用WHERE
子句查询基础表时,我收到相同的错误消息,除非我使用以下提示强制执行 FULLSCAN:
OPTION(TABLE HINT( $mytable, FORCESCAN ))
Run Code Online (Sandbox Code Playgroud)
我知道如果 DDL …
上周五,我将 SQL Server 实例从 2005 Enterprise Edition 迁移到安装了 SQL Server 2012 Enterprise Edition 的全新 Windows Server 2012 服务器。从那时起,用户开始抱怨应用程序的性能。
以下是有关服务器的一些信息:
我不知道在哪里可以找到答案。如果除 SQL Server 实例之外的所有内容都相同(VM、磁盘等),那么对我来说,问题出在 SQL Server 配置中,但在哪里呢?我尝试了一些更改,但似乎没有一个有用。
你有什么想法?
sp_BlitzIndex
分析我开始使用 sp_BlitzIndex 进行分析,除了编写糟糕的代码外,它还显示了这一点:
主动索引:总锁等待时间 > 5 …
我正在尝试sp_AskBrent
使用 PowerShell运行Invoke-SQLCmd
并在变量中捕获其输出:
$query = "EXEC SAIDBA.monitoring.sp_AskBrent @Seconds=10;"
$check = Invoke-Sqlcmd -ServerInstance $ServerInstance -Query $query
-ErrorAction Stop -ConnectionTimeout 3
Run Code Online (Sandbox Code Playgroud)
使用ExpertMode = 0运行时,没问题。
但是当使用ExpertMode = 1运行时,我们注意到三件事:
$check
一片空白 它以以下错误结束:
Invoke-Sqlcmd:SQL PowerShell 中不允许出现重复的列名。要重复列,请使用 Column_Name AS New_Name 格式的重复列的列别名。
在行:1 字符:18
- $check = Invoke-Sqlcmd -ServerInstance $ServerInstance -Query $query -Er ...
- CategoryInfo: SyntaxError: (:) [Invoke-Sqlcmd], SqlPowerShellSqlExecutionException
- FullQualifiedErrorId : DuplicateColumnNameErrorMessage, Microsoft.SqlServer.Management.PowerShell.GetScriptCommand
我认为有一种解决方法可以提供sp_AskBrent
将ExpertMode数据存储到表中并随后从这些表中选择的参数,但我想确保无法在 PowerShell 中立即恢复所有内容。
sql-server ×3
datetime ×1
performance ×1
powershell ×1
sp-askbrent ×1
sqlcmd ×1
statistics ×1
upgrade ×1