小编Zan*_*ane的帖子

ISO 周与 SQL Server 周

好的,所以我有一份报告进行了本周与上周的比较,我们的客户注意到他们的数据是“时髦的”。经过进一步调查,我们发现它没有按照 ISO 标准正确运行数周。我将此脚本作为测试用例运行。

SET DATEFIRST 1
SELECT DATEPART(WEEK, '3/26/13')
    , DATEPART(WEEK, '3/27/12')
    , DATEPART(WEEK, '3/20/12')
    , DATEPART(WEEK, '1/2/12')
SELECT DATEPART(ISO_WEEK, '3/26/13')
    , DATEPART(ISO_WEEK, '3/27/12')
    , DATEPART(ISO_WEEK, '3/20/12')
    , DATEPART(ISO_WEEK, '1/2/12')
Run Code Online (Sandbox Code Playgroud)

运行时我得到了这些结果。

结果集

我认为这很奇怪,所以我做了更多的挖掘,发现 SQL Server 将 1 月 1 日计算为一年的第一周,而 ISO 将 1 月的第一个星期日计算为一年的第一周。

这个问题最终有两个方面。问题1 这是为什么?问题 2 有什么方法可以改变这一点,这样我就不必修改我的所有代码以ISO_Week在任何地方使用?

sql-server-2008 sql-server

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

批量插入时间变化很大

所以我有一个简单的批量插入过程来从我们的临时表中获取数据并将其移动到我们的数据集市中。

该过程是一个简单的数据流任务,默认设置为“每批行数”,选项为“tablock”和“无检查约束”。

桌子相当大。587,162,986 数据大小为 201GB,索引空间为 49GB。表的聚集索引是。

CREATE CLUSTERED INDEX ImageData ON dbo.ImageData
(
    DOC_ID ASC,
    ACCT_NUM ASC,
    MasterID ASC
)
Run Code Online (Sandbox Code Playgroud)

主键是:

ALTER TABLE dbo.ImageData 
ADD CONSTRAINT ImageData 
PRIMARY KEY NONCLUSTERED 
(
    ImageID ASC,
    DT_CRTE_DOC ASC
)
Run Code Online (Sandbox Code Playgroud)

现在我们遇到了一个问题,BULK INSERT通过 SSIS 运行速度非常慢。1 小时插入一百万行。填充表的查询已经排序,并且要填充的查询运行时间不到一分钟。

当进程运行时,我可以看到等待 BULK insert 的查询需要 5 到 20 秒,并显示等待类型为PAGEIOLATCH_EX. 该过程一次只能处理INSERT大约一千行。

昨天在我的 UAT 环境中测试这个过程时,我遇到了同样的问题。我运行了几次这个过程并试图确定这个缓慢插入的根本原因是什么。然后突然间它在不到 5 分钟的时间内开始运行。所以我又跑了几次,结果都是一样的。此外,等待 5 秒或更长时间的批量插入的数量从数百个下降到大约 4 个。

现在这令人困惑,因为我们的活动并没有大幅下降。

持续时间内的 CPU 低。

中央处理器

当它变慢时,磁盘上的等待似乎更少。

等待

在进程运行不到 5 分钟的时间范围内,磁盘延迟实际上会增加。

潜伏

在此过程运行不佳期间,IO 低得多。

输入输出

我已经检查过并且没有文件增长,因为文件只有 70% 已满。日志文件还有 50% 的时间要处理。数据库处于简单恢复模式。DB …

sql-server ssis sql-server-2012

14
推荐指数
1
解决办法
1647
查看次数

无法在 BIDS 中使用模糊查找

我的一位同事在 BIDS 方面遇到了问题。他正在做一个简单的模糊查找,并且只查看两行(用于测试目的)。奇怪的是,当他尝试执行命令行时,提示出现然后消失,然后包挂起。

所以我让他把包裹寄给我并决定自己运行它并发现完全相同的事情发生了?

执行提示

它基本上会永远这样坐着。没有错误信息或任何东西。它给我的最后一条消息是这样的。

[SSIS.Pipeline] Information: Execute phase is beginning.

现在这可能更适合放在超级用户或其他人身上,因为我预感到问题出在哪里。我们的计算机被锁定到令人沮丧的程度。我遇到了几个问题,安装失败和软件无法正常工作。

如果您对正在发生的事情或如何解决它有任何想法,请告诉我。

更新:尝试安装此补丁无济于事。不适用于 32 位或 64 位或作为管理员。

也跟着输出,最后是这样。 SSIS package "Package1 (1) (1).dtsx" finished: Canceled.

ssis

11
推荐指数
1
解决办法
674
查看次数

作业未按计划运行

所以我有一个基本的 SQL 代理作业,它运行一个 Robocopy 脚本来将所有文件从一个文件夹移动到另一个文件夹。

工作是一个非常基本的设置。 启用

有一个非常基本的时间表。

日程

然而它还没有运行。我不是说成功运行,也不是说完全运行。是否有任何原因可能是这种情况?

有关其他信息,我还将编写该作业的脚本。

USE [msdb]
GO

/****** Object:  Job [MoveMantisFilesToArchive]    Script Date: 12/23/2015 10:21:52 AM ******/
BEGIN TRANSACTION
DECLARE @ReturnCode INT
SELECT @ReturnCode = 0
/****** Object:  JobCategory [[Uncategorized (Local)]]]    Script Date: 12/23/2015 10:21:52 AM ******/
IF NOT EXISTS (SELECT name FROM msdb.dbo.syscategories WHERE name=N'[Uncategorized (Local)]' AND category_class=1)
BEGIN
EXEC @ReturnCode = msdb.dbo.sp_add_category @class=N'JOB', @type=N'LOCAL', @name=N'[Uncategorized (Local)]'
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback

END

DECLARE @jobId BINARY(16)
EXEC @ReturnCode = …
Run Code Online (Sandbox Code Playgroud)

sql-server sql-server-2012

11
推荐指数
1
解决办法
8267
查看次数

OLE DB Sybase 连接失败

我有一个连接到我们在 SQL Server 2008R2 数据库中暂存的 Sybase 数据库。我可以连接数据库并且连接测试正常。我正在使用带有 Sybase 驱动程序的 OLE DB 源。

连接管理器

我什至可以预览数据。注意我已经缩小了这个数据集,所以看不到数据,但它仍然表明源确实返回了行。

预览数据集

但是,当我执行包时,它会导致失败。

失败

[来源1 ] 错误:SSIS 错误代码 DTS_E_CANNOTACQUIRECONNECTIONFROMCONNECTIONMANAGER。对连接管理器“MyDataSource”的 AcquireConnection 方法调用失败,错误代码为 0xC0202009。在此之前可能会发布错误消息,其中包含有关 AcquireConnection 方法调用失败原因的更多信息。

关于为什么会发生这种情况的任何想法?

更新 添加其他错误消息,尽管它们与有用的相反。[SSIS.Pipeline] 错误:组件“源”(1) 验证失败并返回错误代码 0xC020801C。[SSIS.Pipeline] 错误:一个或多个组件验证失败。错误:任务验证期间出现错误。

更新 几次尝试后,sybase 帐户被锁定。一定与密码有关。

sql-server sybase ssis

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

我应该禁用超线程吗

背景我最近一直在研究一些相当高的 CXPacket 等待时间,这让我使用 SQL Sentry 非常密切地监视处理器活动。

结果我注意到的一件事是我们在上下文切换中出现了巨大的峰值下面是一个 5 分钟的示例,但这种模式在一天中非常普遍。

语境

正如你所看到的,它非常有规律地飙升。现在我对此的理解将使我相信这将是 CPU 压力的结果。然而在那段时间里几乎没有超过 60%。

处理器

经过一些研究,这让我相信这是超线程的结果。我知道我之前已经阅读过超线程的一些危险。然而,那是很久以前写的。

使长话短说。超线程可能是上下文切换峰值的罪魁祸首吗?上下文切换是否可能对我的并行查询产生负面影响?我应该在我的环境中禁用超线程吗?

更新虽然我的环境中正在发生这种特定的事情,但其核心问题更为普遍。高级上下文切换对并行查询的影响有多大?超线程会导致此类问题吗?

最终,我在互联网上发现的大部分内容都表明超线程和 SQL Server 不是好朋友,但大多数信息都非常过时。

我的系统有很多配置问题,所以我将在这里解决这些问题,以便可以排除它们。我们在操作系统和生物级别都有性能的电源设置。我们的 Maxdop 设置为 8,并行的成本阈值为 25。我们有 32 个逻辑内核和 16 个物理内核。这也是大部分数据仓库加载场景。

sql-server sql-server-2012 windows-server

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

收到“由于作业已在运行而拒绝运行作业的请求” 当没有作业正在运行时?

因此,有一个通过集成服务运行的 ETL 作业,我以 SQL 作业名称 StartStageStore 开头。这个作业的最后一步是开始另一个作业并报告成功。此调用的作业称为 LoopStageStore。LoopStageStore 所做的只是执行一个存储过程,重新启动 StartStageStore 作业,这样我们不断地将源数据拉入我们的系统。这项工作已经运行了几个星期没有失败。直到最后两个晚上,我才开始收到此错误“以用户身份执行:AgentUser。SQLServerAgent 错误:运行作业 Stage/Store AgentUser 的请求被拒绝,因为该作业已根据用户 AgentUser 的请求运行。[SQLSTATE 42000](错误 22022) . 步骤失败。

这应该是不可能的,因为运行 StartStageStore 作业完成并且在 LoopStageStore 启动时不再运行。

舞台商店作业

在这里我们可以看到在 12:19:14 执行的最后一步。循环舞台商店

下一个作业在 12:19:15 失败,表示 StartStageStore 当前正在运行。我已经有一个解决方法,我只是在第二份工作上抛出延迟。我只是想知道是否有人知道为什么会发生这种情况。

BEGIN
WAITFOR DELAY '00:01';
    EXECUTE dbo.LoopStageStore
END; GO
Run Code Online (Sandbox Code Playgroud)

sql-server-2008 sql-server

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

SSIS 验证缓慢。OLTP OLAP 在同一台服务器上运行

我有四台相同的服务器 2 用于生产,另外两台是演示机器/紧急故障切换盒。更强大的机器是一个 16 核 127 gig 的 Ram 托管我们的数据仓库和我们的 OLTP 数据库。功能较弱的盒子是我们用于 ETL 和数据存储的 8 核 98 gig ram 盒子。我遇到的问题是在生产服务器上集成服务需要大量时间来执行包验证。对于在 6 秒内返回的查询,完成包验证需要 40 秒。如您所见,这是一个相当简单的包。 插入更新删除

请记住,这只是我用作示例的包,我的所有包都有相同的问题,尽管有些程度较低。当我运行它时,验证部分平均需要 40 秒。 执行开始

为了更好地测试这一点,我在姊妹机器上运行了完全相同的包,它运行所有与该机器相同的 SQL 作业。只有执行前验证需要 0 秒,查询需要 4 到 6 秒。

为了进一步测试这一点,我对两个 SQL 服务器实例运行了查询。

SELECT '{' + CAST(Store_Id AS CHAR(36)) + '}' AS Store_Id
      ,'{' + CAST(ItemGroupDetail_Id AS CHAR(36)) + '}' AS ItemGroupDetail_Id
      ,ItemGroupType_Id
      ,'{' + CAST(Concept_Id AS CHAR(36)) + '}' AS Concept_Id
      ,'{' + CAST(Company_Id AS CHAR(36)) + '}' AS Company_Id
      ,'{' + CAST(ItemGroup_Id …
Run Code Online (Sandbox Code Playgroud)

sql-server-2008 sql-server ssis olap

7
推荐指数
1
解决办法
1398
查看次数

数据流任务不产生带有声明语句的行

我有一个 SSIS 包,它正在执行一个简单的SELECT语句,然后加载到一个表中。我已将 sql 语句匿名化,当您查看表名时,该语句应该非常明显。为了这个演示的目的,我还简化了这个包,只做一个行计数。

我遇到的这个问题是查询在 SQL 服务器中生成行,但在 SSIS 中不生成行。查询如下。

DECLARE @CurrentBlahDate DATETIME
SET @CurrentBlahDate = ( SELECT MAX(BlahDate)
                                         FROM   dbo.ThisCoolTable SL
                                                WITH ( NOLOCK )
                                                INNER JOIN dbo.ThatCoolTable SLF
                                                WITH ( NOLOCK ) ON SL.CoolID = SLF.CoolID
                                                              AND SLF.TypeCode IN (
                                                              'ValueA',
                                                              'ValueB' ))
SELECT 
*
FROM dbo.Calendar
WHERE CAST(BaseDate AS DATE) = CAST(@CurrentBlahDate AS DATE)
Run Code Online (Sandbox Code Playgroud)

请忽略 * 因为这只是为了这个演示的目的。实际查询即使没有 *. 在 SQL Server 中执行时,这会按预期从日历表中返回 1 行。但是,当在 SSIS 中针对相同的环境执行时,我没有返回任何行。

安全信息系统

如果我将查询转换为存储过程并在 SSIS 中执行 sproc,我得到的行数为 1。

1行

如果我将查询更改为此。

SELECT 
*
FROM …
Run Code Online (Sandbox Code Playgroud)

sql-server ssis sql-server-2008-r2

7
推荐指数
1
解决办法
1289
查看次数

谓词不会导致预期的扫描

所以我有一个我正在尝试调整的查询,但遇到了一个我无法理解的问题。首先是我正在使用的查询。

SELECT  
    si.LoanNbr AS [LoanNumber],
    fi.[SvcClientNbr] AS ClientID,
    si.LoanMasterID,
    si.LoanSrcCode AS [LoanSourceCode],
    fi.LoanPurpCode,
    fi.[PropState] AS [Property State],
    im.ImagedocumentID AS [Image Document ID],
    -- im.requestID AS [Request ID],
    CONVERT(VARCHAR(10),im.[ImageDate],101) AS ImageDate,
    im.[PageCount],
    im.[SignatureInd]
FROM dbo.NotMybaseTable Si
INNER JOIN dbo.NotMyTableName fi
    ON si.LoanMasterID = fi.LoanMasterID
INNER JOIN [dbo].[ImagedDocument] im
    ON si.loanmasterid = im.loanmasterid
    AND im.[DocTypeCode] = '10112'
WHERE CASE WHEN si.loansrccode = 'CORE' AND  Im.[SignatureInd] IN ('Y') THEN 1
        WHEN si.FundingSysCode = 'LIS' and CASE WHEN si.loansrccode = 'CORE' THEN 0 ELSE …
Run Code Online (Sandbox Code Playgroud)

sql-server sql-server-2012

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

加入到@Table 变量运行效率低下

好的,所以我有一个运行非常缓慢的报告存储过程。客户抱怨报告无法运行,所以我开始调查问题在存储过程中的确切位置,我发现这部分占用了 99.8% 的时间。

DECLARE @xmlTemp TABLE (
  CompanyID  INT,
  StoreID    INT,
  StartDate  DATETIME,
  DateStaID  INT,
  EndDate    DATETIME,
  DateEndID  INT,
  LastUpdate DATETIME)

INSERT INTO @xmlTemp
VALUES      (50,
             2,
             '3/3/2013',
             0,
             '3/3/2013',
             0,
             '3/3/2013')

SELECT DISTINCT T.CompanyID,
                CompanyName,
                Z.StoreID,
                StoreName,
                CashedOutBy,
                TransactionID,
                RegisterID,
                BusinessDate,
                CashedOut,
                Total - Isnull((SELECT Sum(DISTINCT PaymentAmount)
                                FROM   vPullDrawerPayments
                                WHERE  CompanyID = T.CompanyID
                                       AND StoreID = T.StoreID
                                       AND TransactionID = T.TransactionID
                                       AND Isnull(PaymentType, 1) <> 1), 0) AS PaymentAmount,
                'Cash'                                                      AS PaymentDesc,
                CASE
                  WHEN Z.EndDate >= Z.LastUpdate THEN 1 …
Run Code Online (Sandbox Code Playgroud)

sql-server-2008 sql-server stored-procedures view

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

内联选择导致查询性能异常缓慢

我有一个查询,用于填充聚合表以进行报告。该查询来自我工作的公司的另一位开发人员,但我的工作是使其快速运行。到目前为止,我所有的早期尝试都失败了。我已经用这个查询尝试了几件事,这就是我目前所处的位置。我已经减少了大约半小时的加载时间,但我被卡住了,我想我可能只需要重新做整个事情。我希望这里有人能看到我遗漏了什么,并就如何解决这个查询给我一些指示。

SELECT P.CompanyID,
       P.CompanyName,
       P.StoreID,
       P.StoreName,
       P.ReportDate,
       Isnull((SELECT Sum(FT.GrossSales - Isnull(FP.PaymentAmount, 0)) AS PullNet
               FROM   FactSalesTransaction AS FT
                      LEFT JOIN (SELECT TransactionID,
                                        DimStoreID,
                                        DimBusinessDateID,
                                        Sum(PaymentAmount) AS PaymentAmount
                                 FROM   FactSalesPayment
                                 WHERE  DimPaymentTypeID <> 2
                                        AND ModStatusFlg <> 'D'
                                 GROUP  BY TransactionID,
                                           DimStoreID,
                                           DimBusinessDateID) AS FP
                        ON FP.TransactionID = FT.TransactionID
                           AND FP.DimStoreID = FT.DimStoreID
                      INNER JOIN DimCalendar AS C
                        ON FT.DimBusinessDateID = C.DimCalendarID
                           AND FP.DimBusinessDateID = C.DimCalendarID  AND C.CalendarDate >= '12/4/2012'
               WHERE  FT.DimStoreID = P.DimStoreID
                      AND FT.DimBusinessDateID = P.DimBusinessDateID

                      AND FT.ModStatusFlg <> …
Run Code Online (Sandbox Code Playgroud)

sql-server-2008 sql-server

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