小编Viv*_*ngh的帖子

运行存储过程时处理器利用率高

我有一个存储过程,它在 12/11 之前运行良好,平均执行时间不到 2 小时。从周二(12/11)开始,存储过程连续运行了3个多小时,不得不手动杀死并重新运行。

  1. 12 月 12 日,我们继续编写了存储过程的脚本。删除当前程序并重新创建它,它运行良好。
  2. 2013 年 12 月 13 日,当程序再次需要很长时间才能执行时,我们尝试了类似的删除和重新创建它的方法,但这次没有奏效。我们必须手动运行存储过程的每一行。
  3. 今天也需要很长时间才能运行。

需要注意的一件事是,无论何时运行该特定存储过程,处理器利用率都会高达 95%。我们有描述相同的 SQLMonitor 工具 -

在此处输入图片说明

为了消除参数嗅探的可能性,我清除了 proc 缓存,DBCC FREEPROCCACHE并在美国东部标准时间上午 5:30 再次通过删除并重新创建它来重新运行该过程。即使在此之后,处理器利用率也会出现峰值。以下是清除 proc 缓存后的当前处理器利用率 -

在此处输入图片说明

以下是存储过程仅供参考 -

CREATE PROCEDURE [dbo].[Build_Base02_Orders] 

AS
BEGIN

    SET NOCOUNT ON;

    declare @Start_Date datetime = getdate();
    declare @Last_Date datetime
    DECLARE @PROMOHIGHDATE INT = (SELECT MAX(FILE_DATE) FROM Stage1_Promotion);

 --Create the Orders from Items

   drop table WinstonBrand_Base.dbo.Orders;


With OrdersBase1 as
(
 Select * from WinstonBrand.dbo.Stage3_Orders Orders
 UNION ALL
 Select * from …
Run Code Online (Sandbox Code Playgroud)

sql-server execution-plan sql-server-2016

5
推荐指数
1
解决办法
157
查看次数

SQL Server 处理器关联性与跟踪标志 8002 ON

我阅读了一篇文章,解释了在 SQL Server 中设置处理器关联性所带来的不良副作用。

我了解到,在大多数情况下,SQL Server 的默认设置效果最好,因为当我们设置处理器关联性时,我们正在使调度程序受 CPU 限制。我这里有几个问题:

  1. 当处理器关联性的默认设置效果最佳时,为什么需要显式设置处理器关联性?

  2. 文章还指出:

    当跟踪标志 8002 打开时,调度程序不再绑定到 CPU。

    是否有理由说跟踪标志 8002ON就像默认Processor affinity配置一样,只是 SQL Server 可用的核心数量较少?

    例如,如果我们将 32 核处理器的处理器亲和性设置为 16 核(跟踪标志 8002 为ON),那么具有与其关联的 SQL 线程的调度程序是否只需16 cores切换?

  3. 设置处理器关联性会限制 SQL Server 计划程序使用某些核心。此设置是否还会限制其他 CPU 密集型进程(例如 .NET 应用程序)的核心使用情况?

    我想说的是,如果对于 32 核 CPU,处理器亲和性设置为 16 核,那么 SQL Server 调度程序只有 16 核可供切换。如果是,那么另一个 CPU 密集型应用程序(例如 .NET 应用程序)又如何呢?.NET 应用程序是否可以在所有 32 个内核之间自由切换,因为它将依赖于 Windows 操作系统而不是SQLOS

这只是我想象的一个假设场景。考虑到生产场景,我非常怀疑人们会在同一台服务器上使用 SSMS 和 CPU 密集型 .NET 应用程序。这将极大地影响性能并导致任何其他进程的 CPU 可用性不足。如果我在这里错了,请纠正我。

sql-server configuration trace-flags

3
推荐指数
1
解决办法
4366
查看次数

SQL Server 突然使用索引扫描而不是查找

我们有一个每天运行的存储过程。在其中一个子查询(执行计划中的查询 20)中,SQL Server 在 2021 年 9 月 24 日之前一直使用索引查找。但突然间,当查询在 2021/09/25 运行时,SQL Server 在同一步骤开始使用索引扫描。

以下是 2021 年 9 月 24 日执行搜寻的计划

2021/09/24查询计划 寻求2021/09/24手术

以下是 2021 年 9 月 25 日 SQL Server 执行索引扫描的计划

2021/09/25查询计划 2021/09/25 扫描操作

EMAIL_SENDS_CCMP_LTD 表是一个相当大的表,下面是该表的空间使用数据

EMAIL_SENDS_CCMP_LTD 统计信息

以下是上面突出显示的存储过程中的查询 -

insert into  TALBOTS_BASE.dbo.EMAIL_ACTIVITIES
(EMAILTYPE,INTSOURCE,EMAIL,ACCTNO,FNAME,LNAME,EMAILDATE,DNEFLAG,SOURCE_CD,CREATE_ID,EMAILPREF,HASH,FILENAME,SEQ,FILEDATE,MODDATE,IPADDRESS,HAV_EMAILDATE)
SELECT 
      'OPEN' AS EMAILTYPE
      ,'CCMP' AS INTSOURCE 
      , a.[P_email] AS EMAIL
      ,'' AS ACCTNO
      ,'' AS [FNAME]
      ,'' AS [LNAME]
      ,CASE WHEN ISNULL(c.Subchannel,'')<>'HWW' 
       THEN
            CASE WHEN ISDATE([click_time])=1 THEN CAST([click_time] AS DATE) ELSE NULL END
      ELSE NULL
      END AS EMAILDATE
      ,'' as …
Run Code Online (Sandbox Code Playgroud)

sql-server-2016 query-performance

2
推荐指数
1
解决办法
1294
查看次数

SQL Server 进行未加密的完整备份

我必须对数据库进行未加密的完整备份,以便将其发送给其他团队,然后他们可以在自己的环境中恢复它。另一个团队有不同的环境和不同的 SQL Server 证书。

我的完整备份服务器设置是进行AES 128加密备份。而且我不打算与其他团队共享解密密钥和证书。我的 SQL Server 版本是 Standard 2014 SP2。

加密完整备份

我见过加密备份,但我还没有遇到过这种情况。有没有人遇到过这种类型的场景。任何帮助将不胜感激。

编辑 -

就我而言,所有 SQL Server 数据库备份都使用自签名证书进行加密。此证书安装在所有服务器上,因此只需管理一个证书。如果证书过期,则需要续订,因为备份将不会使用过期的证书运行。此外,需要加载证书和私钥以恢复使用密钥对创建的备份

安装的证书以及到期日期

这是我不打算与其他团队共享的证书和私钥。因此,需要可以绕过证书加密的仅复制完整备份。有什么办法,我可以通过创建一个不需要加载证书和私钥的备份来解决上述情况。

按照learning-dbadmin 的要求添加查询的输出-

在此处输入图片说明

sql-server backup sql-server-2014

0
推荐指数
1
解决办法
839
查看次数