Questions tagged «sql-server»

所有版本的Microsoft SQL Server(非MySQL)。还请添加特定于版本的标记,例如sql-server-2016,因为它通常与问题相关。


2
数据仓库设计,用于针对多个时区的数据进行报告
我们正在尝试优化数据仓库设计,以支持针对许多时区的数据进行报告。例如,我们可能有一个关于一个月活动的报告(数百万行),该报告需要显示按一天中的小时分组的活动。当然,一天中的那个小时必须是给定时区的“本地”小时。 当我们仅支持UTC和一个本地时间时,我们的设计效果很好。事实表上的UTC和本地时间的日期和时间维度的标准设计。但是,如果我们必须支持100多个时区的报告,则该方法似乎无法扩展。 我们的事实表将变得非常广泛。另外,我们还必须解决SQL中的语法问题,即指定在报告的任何给定运行中使用哪个日期和时间ID进行分组。也许是一个非常大的CASE语句? 我已经看到了一些建议,可以按您覆盖的UTC时间范围获取所有数据,然后将其返回到表示层以转换为本地并在那里进行汇总,但是使用SSRS进行的有限测试表明这将非常慢。 我也参考了一些有关该主题的书籍,它们似乎都说只有UTC并可以进行转换,或者只有UTC和一个本地语言。将不胜感激任何想法和建议。 注意:此问题类似于:在数据集市/仓库中处理时区,但是我无法对此问题发表评论,因此感到这是值得的。 更新:在 Aaron进行了一些重大更新并发布了示例代码和图表之后,我选择了Aaron的答案。我先前对他的答案的评论不再有意义,因为它们涉及答案的原始编辑。如果有必要,我会尝试再次更新此内容

1
查询性能不佳
我们有一个很大的过程(10,000行以上),通常需要0.5-6.0秒才能运行,具体取决于要处理的数据量。在过去一个月左右的时间里,在我们使用FULLSCAN更新统计信息后,开始花费了30秒钟以上。当速度变慢时,sp_recompile会“修复”该问题,直到夜间统计作业再次运行。 通过比较慢速执行计划和快速执行计划,我将其范围缩小到了特定的表/索引。当它运行缓慢时,它估计将从特定索引返回大约300行,而当它运行速度较快时,它估计将有1行。当它运行缓慢时,在对索引执行查找后将使用表后台处理程序;而当它运行速度较快时,它将不执行表后台处理程序。 使用DBSS SHOW_STATISTICS,我在excel中绘制了索引直方图。我通常希望该图更像是“起伏的丘陵”,但相反,它看起来像一座山,最高点比该图上的其他大多数值高2x-3x。 如果我在没有FULLSCAN的情况下更新统计信息,它看起来会更正常。如果我再次使用FULLSCAN运行它,则看起来就像我上面描述的那样。 这感觉像一个参数嗅探问题,并且特别与上面的(看似)怪异的索引分布有关。 proc接受表值参数,表值参数上是否可以进行参数嗅探? 编辑:proc还需要12个其他参数,其中一些是可选的,其中两个是开始日期和结束日期。 直方图是奇数,还是我吠错了树? 我当然很愿意尝试调整查询和/或尝试调整索引。如果那是很好的解决方案,那时候我的问题更多是关于偏斜的直方图。 我应该提到这是PK IDENTITY聚集索引。我们有两个互相通信的系统,一个是旧系统,一个是新的本地系统。两个系统都存储相似的数据。为了使它们保持同步,即使将数据添加到旧系统中(完成RESEED处理),也可以在将新事物添加到旧系统中后在新系统中的此表上增加PK。因此,此列中的编号可能存在​​一些差距。记录很少删除(如果有的话)。 任何想法将不胜感激。我非常高兴收集/包含更多信息。

3
如何查找数据库中没有显式主键的所有表?
一次Google搜索发出了数百万点击的信息,说明如何查找没有聚集索引的表,而PK通常是表的聚集索引。但是,表可以轻松地将自然键用作聚簇索引,并具有非聚簇代理索引(例如标识列)。 如何在未定义主键的数据库中查找所有表?我在该数据库中有245个表:手动检查效率很低。


2
何时更改并行性的成本阈值
在检查性能问题时,我发现大量涌入的CXPACKETS暗示我可能需要研究并行度的成本阈值,也许还需要考虑MAXDOP。 在对MAXDOP进行任何重大更改之前,我已经遵循许多其他人的建议,包括@mrdenny在SQL Server 2008的CXPACKET Waits性能调整中的建议以及@ aron-Bertrand在处理CXPACKET等待中的答案-设置成本阈值用于并行性。我已添加维护,以每晚更新一次完整的统计信息。这感觉就像是明智之举。 但是,修改成本阈值仍然让我感到困惑。 在什么时候应该更改并行性的成本阈值?是否有人举了一个例子(在检查了查询和工作负载的成本之后)他们对该成本进行了更改? 抱歉,是否已在上一个问题中得到了解答。 谢谢!

1
在80M行索引表上运行插入查询时,MSG 666
奇怪的是,我的存储过程开始收到某些输入数据的消息666。 当存储过程尝试将行插入具有以下结构的表中时,存储过程在最后一步失败: Columns: A_Id: PK, int B_Id: PK, FK, int C_Id: PK, FK, int D_Id: PK, smallint 这实际上是一个将所有引用的实体连接在一起的表。 Indexes: IX_TableName_D_id - Clustered index on D_id column PK_TableName - Unique non-clustered index on all columns (A_Id, B_Id, C_Id, D_Id) 两个索引的碎片率都很​​低(<25%)。但是,由于对表的操作量非常大,PK_TableName碎片迅速增加。 桌子尺寸: Row count: ~80,000,000 rows 因此,当我尝试运行简单的查询时,对于某些D_Id,我会收到以下消息: 消息666。对于分区ID为422223771074560的索引,超出了复制组的最大系统生成的唯一值。删除并重新创建索引可能会解决此问题;否则,请使用另一个群集密钥。 查询示例: INSERT INTO TableName …

1
动态将列名传递给UNPIVOT
我有一个包含以下数据的表 First Second Third Fourth Fifth Sixth 2013-08-20 2013-08-21 2013-08-22 2013-08-23 2013-08-24 2013-08-25 并使用 UNPIVOT SELECT Data ,DATENAME(DW, Data) AS DayName FROM Cal UNPIVOT(Data FOR D IN ( First, Second, Third, Fourth, Fifth, Sixth )) AS unpvt 我得到以下结果 Data DayName 2013-08-20 Tuesday 2013-08-21 Wednesday 2013-08-22 Thursday 2013-08-23 Friday 2013-08-24 Saturday …

3
数据库大小-MDF太大?
我正在维护一个SQL Server 2005数据库,该数据库承载大约2.9Tb的数据(2 x 1.45Tb-我具有RAW架构和Analysis架构,因此基本上是摄取的数据的两个副本)。恢复模型为SIMPLE,恢复模型为.ldf6Gb。 无论出于什么原因,它.mdf都是7.5Tb。现在,在Analysis表中可能只有2-3个附加列,NVARCHAR(MAX)而从我(可能是误解-如果我错了,请纠正我)可能导致额外的空间分配的列不多。那是在紧缩数据库之后-在此之前大约是9Tb。有什么想法吗? 并且,如果您还有其他问题,请告诉我-我是数据库管理和优化工作的新手(我通常不做这方面的工作:)。 非常感谢! 安德里亚



2
查看数据库图所需的权限
我最近设置了SSDT供我们的开发人员使用。通过限制每个开发人员连接到服务器(db_datareader,db_datawriter)时的权限,我们通过SSDT强制对开发数据库进行更改。在SSDT中,我们使用部署脚本将更改发布到数据库,该脚本使用具有提升权限的登录名进行连接。 我的问题。鉴于我们已经竭尽全力来锁定数据库(以防止模式漂移);开发人员是否可以通过任何方式查看此数据库上的图表而无需db_owner权限?我知道每个开发人员都可以创建和查看自己的图,但是我希望他们能够查看由许多不同的开发人员创建的所有图。 我认为这不会有所帮助,但我们正在运行sql server 2012 任何帮助都会得到很大的帮助。

5
查询而无需指定表的架构
我从SQL Server 2000导入了一堆表到我的2008数据库。所有导入的表都以我的用户名作为前缀,例如:erpadmin.tablename。 在表属性中,它将“ erpadmin”列为数据库架构。当我编写查询时,我现在必须包含“ erpadmin”。在所有表名前面,这令人困惑。 当前结果: select * from erpadmin.tablename 所需结果: select * from tablename



By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.