小编Jef*_*ias的帖子

无法查询模式绑定视图的基础表

我使用备份还原技术和一组传输后操作(如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 statistics materialized-view upgrade datetime

8
推荐指数
1
解决办法
311
查看次数

从 SQL Server 2005 迁移到 2012 后的性能问题

上周五,我将 SQL Server 实例从 2005 Enterprise Edition 迁移到安装了 SQL Server 2012 Enterprise Edition 的全新 Windows Server 2012 服务器。从那时起,用户开始抱怨应用程序的性能。

以下是有关服务器的一些信息:

  • VMWare 5.5 上的虚拟服务器
  • 4 个 vCPU 和 24 Gb RAM。在之前的配置中,10 Gb 是必要的,但 tempdb 数据库比我设置的要小(几乎 6Gb)
  • 我现在已将最大内存目标设置为 22 Gb,并且 tempdb 完全在缓冲池中
  • 迁移后(使用数据库镜像执行),我运行了更新统计、索引重建和其他维护命令

我不知道在哪里可以找到答案。如果除 SQL Server 实例之外的所有内容都相同(VM、磁盘等),那么对我来说,问题出在 SQL Server 配置中,但在哪里呢?我尝试了一些更改,但似乎没有一个有用。

你有什么想法?

来自评论的附加信息

  • 我运行了 sp_Blitz,它给了我一些信息,但 SQL 2005 没有什么新东西(例如存储速度慢)
  • 内存消耗 (20Gb + ) 主要是由于 tempdb (6Gb),其余大部分由应用程序数据库占用
  • PLE 流,有时会下降到 150。在一天开始时,大部分数据都在缓存之外
  • 之前服务器上的最大内存设置为 10Gb
  • 我们使用 Idera 诊断管理器
  • 最大服务器内存设置为它在前一个服务器上的值的两倍。
  • 页面寿命至少每天两次低于 150

sp_BlitzIndex 分析

我开始使用 sp_BlitzIndex 进行分析,除了编写糟糕的代码外,它还显示了这一点:

  • 主动索引:总锁等待时间 > 5 …

performance sql-server configuration

6
推荐指数
1
解决办法
494
查看次数

在 PowerShell 中使用 @ExpertMode = 1 运行 sp_AskBrent

我正在尝试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运行时,我们注意到三件事:

  1. 它将每个数据输出到shell
  2. $check 一片空白
  3. 它以以下错误结束:

    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_AskBrentExpertMode数据存储到表中并随后从这些表中选择的参数,但我想确保无法在 PowerShell 中立即恢复所有内容。

sql-server powershell sqlcmd sp-askbrent

6
推荐指数
2
解决办法
1107
查看次数