小编JNK*_*JNK的帖子

查询计划中异常高的运营商成本的迹象?

我有一个每月的 ETL 过程,太复杂了,在这里解释不了,但基本上我们获取大量客户数据,将其批量加载到各种表中,然后运行一系列构建过程。

总数据量很大,我们每个月增加25-30m记录到最大的表,总共有大约700m记录。每个都有 2m-300m 记录的支持表。该集合的总数据约为 3.5TB。

本月,某些流程所需的时间比平时长得多。一个例子是一个通常在 30 分钟内完成的过程,在我杀死它之前花了大约 40 小时(它仍然没有完成)。

并非所有进程都受到影响,有些进程甚至比平时运行得更快。

显然,根本原因超出了我在这里可以问的范围,但有一些事情困扰着我:

我们有实际的查询计划,以数百万% 显示单个运营商。

像对 的聚簇索引扫描791,358,704%、对 的合并连接75,566,494%等。这发生在多个查询计划中,而这些计划取自sys.dm_exec_query_plan

这些查询计划是否表明了其他一些更大的问题?

我确信问题不是过时的统计数据 - 我们对所有主要表以及最大的表和数据库进行了全扫描,我手动重建了预先调整大小以消除碎片。

performance sql-server-2008 sql-server

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

获取身份值以在 INSTEAD OF 触发器中用作 FK

我有一系列可更新的视图,我们向最终用户公开作为后端流程的界面。

其中一个视图引用了两个表,并且需要一个INSTEAD OFforUPDATEINSERTs的触发器。

表的结构是(大大简化):

Claim
(DataRowID bigint IDENTITY PRIMARY KEY
,<bunch of claim data>)

ClaimExtended
(ClaimDataRowID bigint FOREIGN KEY references dbo.Claim(DataRowID) NOT NULL
,<bunch of other claim data>)
Run Code Online (Sandbox Code Playgroud)

我最初的计划是在触发器中这样做:

CREATE TRIGGER [dbo].[MyTrigger] ON [dbo].[MyView]
INSTEAD OF INSERT
AS

DECLARE @IDLink TABLE
    (RowID int
    ,ClaimDataRowID bigint)

DECLARE @Inserted TABLE
    (RowID int identity (1,1) NOT NULL
    ,<all the columns from the view>)

INSERT INTO
    @Inserted
    (<View columns>)
SELECT
    (<View columns>)
FROM
    Inserted

INSERT INTO
    Claim
    (<Columns>) …
Run Code Online (Sandbox Code Playgroud)

trigger sql-server sql-server-2008-r2 identity output-clause

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

关于如何在 Service Broker 中组织队列的建议

我有一个服务代理应用程序,目前在两台服务器上有 5 或 6 个队列。

一般工作流程是:

服务器A

  • 用户填充一些表
  • 用户触发存储过程,将消息放入标头队列,指示有工作要做
  • Broker 从这个头队列中读取,并创建大量的消息发送到服务器 B

服务器B

  • 消息全部进入 1 个队列
  • 在这个队列中,消息被检查和解绑,有效载荷被运行,并且响应是从我们与之交互的另一组过程/表中收集的
  • 响应消息被创建并发送回服务器 A

服务器A

  • 响应消息进入一个特殊的队列,用于更新用户填充在顶部的表
  • 结束对话消息从发起者队列中读取并用于更新另一个跟踪标题记录进度的表(即处理的 100 条消息中的 50 条)
  • 当我们检测到头记录已被完全处理时,一条新消息被发送到另一个发送通知电子邮件的队列

我曾建议将其中一些队列合并到服务器 A 上,但我不确定最佳做法是什么。其中两个队列的消息处理量相对较高,而电子邮件队列的速度会非常慢。

我们在管理消息类型方面做得(我认为)做得很好,因此理论上我们可以将它们全部放入一个队列中,并且应用程序仍然可以运行。

是否有关于何时维护单独队列以及何时在这种情况下合并的最佳实践?

sql-server sql-server-2008-r2 service-broker queue

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

SSRS 中错误处理的标准或最佳实践

我在 SSRS 中遇到了一个反复出现的问题,其中“坏”报告会发送给客户。问题是我们的报告包含多个子报告,并且一个或多个子报告将无法处理。当子报告无法处理时,报告会发送错误消息代替子报告并且没有实际数据。

我的问题是,如果子报告失败有没有办法阻止报告发送?

理想情况下,我希望外部报告只返回一个错误。有没有办法让 SSRS 报告中的错误状态升级到外部范围?是否有我们可以强制执行的编码标准可以防止这个问题?

我们目前同时使用 SSRS 2008r2 和 SSRS 2016。

sql-server ssrs ssrs-2008-r2 ssrs-2016

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

复合或单字段聚类键

我和我的 DBA 在索引结构上存在分歧。

考虑医疗索赔的数据...

我们有Header包含以下字段的表:

ClaimId (varchar(50)), PaidAmount, MemberID...

对于每个标题,我们都有一个或多个记录,Detail例如:

ClaimId (varchar(50)), LineNumber (smallint), MemberId...

数据结构或重复的效率超出了这个问题的参数。

还有其他的表是领带回个别Detail线路通过ClaimId, LineNumber,我们经常JOIN DetailHeaderClaimId也是如此。

对于Detail表,这对于聚集索引键更可取:

ClaimId

或者

ClaimId, LineNumber

ClaimId单独不是唯一的,但组合ClaimId, LineNumber对于Detail记录来说是唯一的。

我们中的一位人士认为,ClaimId单是一个更好的聚集键,因为它是更窄,并且查找将是多么有效,因为我们需要知道ClaimId我们在查找之前LineNumber

另一种认为,两者的结合更好,因为它消除了额外的需要RowID,并且可以用于JOIN需要LineNumber作为JOIN条件的支持表。

index sql-server-2008 sql-server clustered-index

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

容器过程中的错误处理

我知道并使用了这个问题中的技术

在我的环境中,我们有很多调用子过程的容器过程,这些过程可能会无限调用其他过程。

就我个人而言,我通常TRY/CATCH在每个级别的程序中使用。这有时会导致多个重复的错误消息,但很清楚发生了什么以及在什么过程中。

我有一些同事采取不同的方法。即: - 让每个存储的 proc 发出一个返回码 - 在执行后评估每个存储的 proc 的返回码 - 如果收到错误的返回码,则在最外层的 proc 中引发错误

我相信他们这样做,所以他们可以从示数程序实际行号(而不是让它返回的行号RAISERRORCATCH块)。

对我来说,这似乎更难实现和维护,但我不是 SQL Server 错误处理方面的专家,所以我想我会在这里提出它。

在处理集装箱程序中的错误时,这两种方法是否有任何实质性优势?

sql-server stored-procedures sql-server-2008-r2 error-handling

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

Excel 中的 SSAS Cube - 仅显示具有 KPI 的适用行?

我有一个内置于 SSAS 2008r2 的立方体。我暂时通过excel数据透视表公开它。

我最近向多维数据集添加了一个 KPI,当我在数据透视表界面中显示 KPI 时,它会导致在当前级别显示不适用的维度值。

例如,假设我有客户:

CustomerA
CustomerB
CustomerC
Run Code Online (Sandbox Code Playgroud)

和国家:

NY
VA
TX
Run Code Online (Sandbox Code Playgroud)

当我查看没有 KPI 的数据透视表时,下面CustomerB没有行,NY因为它们在那里没有位置。

当我添加我的 KPI 并只显示valueKPI 时,一切都很好。

当我添加状态指示器(即交通灯或其他)时, 我会看到每个状态下的每个客户。

这是预期的行为吗?有办法解决吗?我喜欢 KPI,但如果我在每个级别获得维度的每个值,它就会失去目的。

更多细节:

Value Expression为KPI仅仅是一个计算的措施,工作正常。

Status Expression是:

CASE
    WHEN KpiValue("MyKPI") / KpiGoal("MyKPI") > .90
        THEN 1
    WHEN KpiValue("MyKPI") / KpiGoal("MyKPI") <= .90
        AND KpiValue("MyKPI") / KpiGoal("MyKPI") > .75
    THEN 0
ELSE -1
END
Run Code Online (Sandbox Code Playgroud)

ssas sql-server-2008-r2 excel

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

在我的服务器上找到最大的数据库

我在同一个 MySQL 服务器上运行了数百个数据库。如何获得按数据库大小排序的列表?

mysql query database-size

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

用于cnf管理、生成的工具?

有谁知道用于 cnf 配置管理的任何好工具?通常情况下,我有一组具有非常相似配置的机器,除了一些差异(例如服务器 ID 或缓冲池以匹配其特定硬件)。

我正在寻找可以设置通用模板的东西,告诉它我想从该模板为该机器生成一些配置,让它提示我需要填写的变量并为我写出 .cnfs .

mysql my.cnf

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

如何设计大洲、国家、地区、城市和 POI 的数据库?

我不是数据库设计师,所以我在设计带有 GIS 信息的数据库时遇到了麻烦。目标是创建一个包含大陆、国家、地区(包括州、子地区、省)、城市和城市中的地方的系统。这些元素中的每一个都将包含一些文本信息和相关内容。作为数据库,我们将使用 PostgreSQL 和 PostGIS。

我的问题是,我如何为这个系统设计数据库?我在考虑 2 个表polygonspoints,但我不确定这是否是好的思考方式。

实际上我们需要的是一些国家、城市、地区等之间关系的分层基础。该应用程序的主要目标是从许多来源收集关于特定城市、地区、国家等的旅游数据,并将其存储在数据库中。假设我们有一个城市罗马;我们从几个来源收集了一些关于这个城市的信息到数据库中。我们需要知道罗马位于罗马省,拉齐奥地区拉齐奥的次地区拉齐奥,国家意大利。所以系统应该是灵活的,允许我们从现实世界中创建这样的关系。

这就是为什么我会选择两个表:

  1. polygons - 可以存储国家、地区、子地区、省份等。
  2. points - 可以存储城市和兴趣点

postgresql database-design spatial

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