小编Sir*_*lot的帖子

数据仓库服务器。您如何计算 RAM/CPU 规格?

我正在尝试为我们计划的数据仓库升级编写数据仓库服务器的规范。

当我们在 VMWare 主机上运行虚拟服务器时,我们能够根据需要添加或删除资源。过去,我们根据需要逐步添加 RAM 和 CPU。随着我们需求的增加,我们已经游说获得更多资源。(主要是磁盘和 RAM)。

我们要求更多。他们给我们尽可能少。

然而,最近每当我们谈论资源时,我们都会因为没有首先正确指定机器而受到批评,现在我被告知开发主机已用完,没有更多可用的 RAM。

我们是一个小型的地方政府组织,拥有约 50 名 DW 的常规用户。在正常的日常使用中,它运行良好。我们获得了良好的 mdx 查询性能,并且我们的报告和仪表板速度很快。用户很高兴。

然而,我们的 ETL 过程整夜运行,当同时处理数据集市时,我们开始看到内存压力的迹象。昨晚 SSIS 因“内存不足错误”的警告而失败。

我们现有的 DW 服务器是 Win 2008 R2,带有 4 个 CPU 和 16Gb 的 RAM,运行 SQL 2012 Std。我将最大服务器内存设置为 12GB,为操作系统和服务等留出 4GB。我们现有的 DW 有 3 个数据集市/OLAP 多维数据集,我们正在开发另外 2 个。

+----------+----------+---------------+-----------+---------------+
| Datamart | Files GB |  Fact (Rows)  | Fact (Mb) | ETL & Process |
| OLAP cube|          |               |           | Time (hours)  |
+----------+----------+---------------+-----------+---------------+
| PBI      | …
Run Code Online (Sandbox Code Playgroud)

data-warehouse sql-server windows-server sql-server-2016

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

SQL 2016 SQL Server 断言:文件:<pageref.cpp>,行 = 951 断言失败

我目前正在将我们的数据仓库从 SQL 2012 升级到 SQL 2016。我的旧数据仓库和新数据仓库并行运行。

我的 ETL 过程(由第 3 方在 SSIS 中开发的框架)在 2012 年成功运行了 2 年多,但在 2016 年失败。到目前为止,数据库和 ETL 过程是相同的。

两个服务器都是在 VMWare 上运行的虚拟机。旧服务器是带有 24Gb RAM 的 Win 2008。SQL 2012 标准版 最大内存设置为 16Gb。新服务器是带有 64Gb RAM 的 Win 2012。SQL 2016 开发。最大内存设置为 50Gb。新 DW 运行 v13.0.1601.5 RTM 开发者版(64 位)。

在运行我的 ETL 过程时,使用 SQL 合并到维度或事实表的加载步骤失败并显示以下错误。

全文:

描述:SQL Server 断言:文件:, line=951 Failed Assertion = 'IS_OFF (BUF_MINLOGGED, m_buf->bstat) || pageModifyType != PageModifyType_Contents || GetPagePtr()->IsTextPage()'。此错误可能与时间有关。如果重新运行语句后错误仍然存​​在,请使用 DBCC CHECKDB 检查数据库的结构完整性,或重新启动服务器以确保内存中的数据结构未损坏。

按照建议,我运行了 DBCC 并且没有发现错误。我也重新启动了 SQL。然后我重新启动了 ETL 过程并得到了同样的错误。

我对此错误的搜索表明,这是SQL …

sql-server sql-server-2016

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

SQL、SQLCLR 对象和有效内存利用率

我们最近将我们的 ERP 系统从 IBM Universe 转换为 SQL Server。应用程序性能通常是可以接受的,但偶尔会降级到可怕的程度。

我们在具有 32 Gb RAM 的 VMWare 上的 Win Server 2012 和 SQL Server 2012 上运行数据库。SQL 最大内存设置为 27Gb。db 服务器仅托管此数据库,不执行任何其他功能。总数据库大小约为 110Gb。该应用程序有它自己的专用服务器。

供应商广泛使用 CLR 来移植代码(超过 36,000 个标量函数)。我了解单个 CLR 在应用程序 OLTP 上下文中运行正常,但由于逐行而不是基于设置的操作而尝试执行批量作业时,不能很好地扩展。很好……很酷……继续前进。

我运行了Brent Ozar 的脚本,该脚本高可用内存确定为需要查看的内容,以及每个查询的大量执行计划。供应商建议向服务器添加更多 RAM,但这让我很恼火,因为应用程序似乎没有使用现在的内存。

我感兴趣的是 SQL 的整体性能和行为。我看到一系列症状表明某些事情不正确,但我无法确定。这就像服务器拒绝运行。它决心

粗略地说,在我看来,大约 10Gb 的内存被数据库用于缓存,大约 11GB 是免费的,大约 3.5Gb 用于计划缓存,其余的我无法解释。我对一些定义有点不确定,例如免费、保留、被盗等。它们是否重复计算?

活动监视器显示:

在此处输入图片说明

当我运行此查询时:

-- what's happening inside my buffer pool?
SELECT counter_name, instance_name, mb = cntr_value/1024.0
  FROM sys.dm_os_performance_counters 
  WHERE (counter_name = …
Run Code Online (Sandbox Code Playgroud)

performance sql-server memory sql-server-2012 sql-clr performance-tuning

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

临时表的索引和统计信息

我刚刚将我们的数据仓库升级到 SQL 2016。我在查询存储中看到了一些非常有趣的图表(我喜欢这个功能!)。下面是我见过的最奇怪的例子。同一查询的 22 个计划。

在此处输入图片说明

这让我开始考虑 ETL 过程的性能调优、临时表的优缺点以及如何影响执行计划行为。

我的 ETL 过程使用了许多存储过程,这些过程混合使用标准和临时 #tables 作为临时表。#tables 通常使用一次然后删除。有些只有几千行。有些是数百万。SSMS 建议缺少索引,但是在较小的表上,它们是否会产生足够的差异以值得添加它们?更好的统计数据就足够了吗?

我刚刚阅读了有关临时表统计信息的Brent Ozar 博客文章,以及 Paul White 关于存储过程中的临时表的文章

它说统计信息是在查询#table 时自动创建的,然后大概由优化器使用。

我的问题是:在#table 上创建索引是否有很多意义或好处。和/或:在查询中使用统计信息之前,是否值得显式更新统计信息作为存储过程中的一个步骤,因为它们只使用一次。

额外的步骤和开销是否值得?它会导致明显更好或不同的执行计划吗?

sql-server index-tuning temporary-tables sql-server-2016 query-store

7
推荐指数
2
解决办法
2282
查看次数

如何收集 NTFS 文件属性并插入到 SQL Server 表中

我必须提供有关文件系统使用情况的报告。

我正在收集有关文件服务器使用情况的统计数据,具体到单个文件级别,以便我们可以查看谁在使用哪些文件/文件夹、他们使用了多少存储空间、他们拥有多少文件、创建时间和上次使用时间。

为此,我有 2 个 powershell 脚本。

第一个读取文件系统并捕获我想要的属性并将它们保存到文件中。

dir -rec G:\ | Select LastWriteTime, Directory, Name, Extension, Length, @{Name="Owner";Expression={get-acl $_.FullName| select Owner}} | export-csv FileInfo.csv
Run Code Online (Sandbox Code Playgroud)

第二个脚本读取 csv 文件并将数据插入表中。

一旦数据在 SQL 中,我可以解析文本并将其拆分为不同的列,然后生成各种报告并以不同的方式分析数据。我的方法有效,但很麻烦。

有没有更好的方法来收集 NTFS 信息并将其保存到 SQL Server 中?有哪些替代方案?情报局?

编辑:这一切可以组合在一起在一个过程中一起运行吗?

sql-server powershell sql-server-2012

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

SSMS 2016 查询存储:缺少索引详细信息错误:DocumentFrame (SQLEditors)

每次我尝试查看查询存储中缺少的索引详细信息时,都会收到以下错误:

文档框架(SQL 编辑器)

程序位置:在 Microsoft.SqlServer.Management.UI.VSIntegration.Editors.ShowPlan.ShowPlanControl.OnMissingIndexDetails(Object sender, EventArgs a) 在 System.ComponentModel.Design.MenuCommand.Invoke() 在 Microsoft.SqlServer.Management.UI.VSIntegration .Editors.ShowPlan.ShowPlanControl.Microsoft.VisualStudio.OLE.Interop.IOleCommandTarget.Exec(Guid&guidGroup, UInt32 nCmdId, UInt32 nCmdExcept, IntPtr vIn, IntPtr vOut)

有没有其他人遇到过这种情况?这是我可以修复的东西还是一个错误?

SSMS 版本 13.0.16106.4

这有点令人沮丧,因为我无法查看创建索引建议的结尾。

sql-server ssms sql-server-2016

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

当目标表有聚集索引时插入速度要慢得多

我刚刚调试了一个让我完全困惑的问题。

我们的开发数据仓库上的 ETL 转换流程在每天成功运行数月后刚刚失败。使用相同的表架构、索引和数据调用相同存储过程的相同 SSIS 作业在生产中工作正常。

此步骤通常需要不到 2 分钟。今天,在 4 小时后,工作尚未完成,但也没有失败。没有报告的错误。SQL 日志sp_who2中没有任何内容,也没有显示任何阻塞。

  • 是查询执行良好时的估计计划的链接。
  • 是查询未完成时估计计划的链接。

该作业会截断临时表,然后插入大约 600,000 行数据。ETL 进程具有对该表的独占访问权。当我检查时,我只能看到等待CXPACKET

我已将故障追溯到唯一的聚集索引。

该表在标识列上有一个非聚集主键(见下文)

CREATE TABLE [dbo].[Transform_JobCosting_Transaction](
    [ETL_TransformKey] [int] IDENTITY(1,1) NOT NULL,
    [TransactionId] [varchar](255) NOT NULL,
    [KeyType] [varchar](255) NOT NULL,
    [FinancialYear] [varchar](255) NOT NULL,
    [Job] [varchar](255) NOT NULL,
    [Subjob] [varchar](255) NOT NULL,
    [AnalysisCode] [varchar](255) NULL,
    [etc] [varchar](255) NOT NULL,
    [etc] [varchar](255) NOT NULL,
    [etc] [varchar](255) NOT NULL
     CONSTRAINT [PK_Transform_JobCosting_Transaction] PRIMARY KEY NONCLUSTERED 
(
    [ETL_TransformKey] ASC
)WITH (PAD_INDEX = …
Run Code Online (Sandbox Code Playgroud)

sql-server clustered-index sql-server-2016

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

如何更新/插入/注入节点到 XML

我有一个应用程序,它在 XML 字段中存储可选的站点信息。

示例表:

CREATE TABLE [dbo].[Sites](
    [SiteID] [int] IDENTITY(1,1) NOT NULL,
    [SiteName] [nvarchar](80) NULL,
    [SiteInfo] [xml] NULL );

INSERT INTO [dbo].[Sites] ([SiteName]) VALUES  ('TestSite1') ; 
Run Code Online (Sandbox Code Playgroud)

如果没有应用属性,则 XML 字段为 NULL。如果这些属性中的任何一个确实适用,则应用程序会插入一个 XML 文档和相关节点。

一个有效的例子如下所示:

<SiteInfo>
  <BoreID>ABC123</BoreID>
  <ConsentCompliance>true</ConsentCompliance>
</SiteInfo>
Run Code Online (Sandbox Code Playgroud)

我需要从另一个系统迁移一些数据,所以我试图将数据插入到这个字段/XML 中。到目前为止,我的尝试导致了应用程序不喜欢的单例节点。

使用我在网上找到的一些示例,我尝试了以下操作:

update [dbo].[Sites] 
SET [SiteInfo].modify('insert <Anothernode>ABC123</Anothernode> into (/SiteInfo)') 
where Siteid = 1 
Run Code Online (Sandbox Code Playgroud)

这会引发以下错误:

消息 2226,级别 16,状态 1,第 1 行 XQuery [dbo.Sites.SiteInfo.modify()]:'insert' 的目标必须是单个节点,找到 'element(SiteInfo,xdt:untyped) *'

问题:

  1. 如果该字段为 NULL,我是否需要先更新该字段以插入 xml 的基数,然后才能插入它?
  2. 不使用开闭对的 XML 节点的名称是什么。 For example: <BoreID>ABC123</BoreID> vs a single side <BoreID=ABC123/>
  3. 是否有使用 …

sql-server-2008 xml insert

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

SSRS 和 PowerBI 报表服务器在同一台服务器上

我刚刚使用 SSRS 2016 将 2018 年 8 月版的 PowerBI 报表服务器安装到同一台 Win 2012 服务器上。我可以让它运行,但它与带有 URL 保留的 SSRS 发生冲突。

我已将它们配置为使用不同的虚拟目录和端口,但 SSRS 不断中断。

  • SSRS:http://ServerName:80/Reports
  • PBIRS:http://ServerName:8080/PBIReports

我错过了什么?

编辑:我的笔记本电脑上同时运行 SSRS 2017 和 PBIRS。两者都在端口 80 上,但具有不同的虚拟目录。

ssrs-2016 powerbi-report-server

4
推荐指数
1
解决办法
3064
查看次数