当前位置: 首页 > 面试题库 >

SQL Server 2008分区表和并行性

郝承悦
2023-03-14
问题内容

我的公司正在迁移到SQL Server 2008 R2。我们有一个包含大量存档数据的表。使用该表的大多数查询在where语句中使用DateTime值。例如:

查询1

SELECT COUNT(*) 
FROM TableA 
WHERE 
     CreatedDate > '1/5/2010' 
     and CreatedDate < '6/20/2010'

我假设分区是在CreatedDate上创建的,并且每个分区都分布在多个驱动器上,我们有8个CPU,数据库中有5亿条记录平均分布在2008年1月1日之间的日期中到2011年2月24日(38个分区)。该数据也可以分成一年的四分之一或其他时间长度,但可以将假设保留为几个月。

在这种情况下,我相信将使用8个CPU,并且只查询6个分区的1/5/2010到6/20/2010之间的日期。

现在,如果我运行以下查询并且我的假设与上面的相同,该怎么办。

查询2

SELECT COUNT(*) 
FROM TableA 
WHERE State = 'Colorado'

问题?
1.是否会查询所有分区?是
2.是否将全部8个CPU用于执行查询?是的
。3.与查询未分区的表相比,性能会更好吗?是的
4.我还有什么想念的吗?
5.分区索引有什么帮助?

根据我对SQL Server
2008分区表和并行的有限知识,我回答了上面的前3个问题。但是,如果我的答案不正确,您是否可以提供任何有关我不正确的原因的反馈。

资源:

  • 视频:演示SQL Server 2008分区表并行化(5分钟长)
  • MSDN:分区表和索引
  • MSDN:设计分区来管理数据子集
  • MSDN:分区表和索引上的查询处理增强功能
  • MSDN:Word Doc:使用SQL Server 2008的分区表和索引策略白皮书

BarDev


问题答案:

分区可以提高性能-我已经看过很多次了。开发分区的原因过去和现在都是性能,尤其是对于插入而言。这是来自现实世界的示例:

据我们所知,我在SAN上有多个表,其中有一个大的ole
honking磁盘。SAN管理员坚持认为,SAN知道这一切都不会优化数据的分发。分区可能有什么帮助?事实:确实如此。

我们使用相同的方案(FileID%200)对多个表进行了分区,其中主分区上有200个分区。如果拥有分区方案的唯一原因是“交换”,那将有什么用?没有,但是分区的目的是性能。您会看到,每个分区都有自己的分页方案。我可以一次将数据写入所有这些数据,并且没有死锁的可能性。由于每个写入过程都有一个等同于分区的唯一ID,因此无法锁定页面。200个分区将性能提高了2000倍(事实),并且死锁从每小时7500个下降到每天3-4个。出于简单的原因,页面锁定升级总是发生在大量数据和大量OLTP系统的情况下,而页面锁定是导致死锁的原因。分区,甚至在相同的卷和文件组上,

选择数据虽然有好处,但没有那么大。但是通常会考虑到DB的目的来开发分区方案。我敢打赌Remus在开发他的方案时会考虑增量加载(例如每日加载),而不是考虑事务处理。现在,如果人们经常选择带有锁定(已提交读)的行,那么,如果进程尝试同时访问同一页,则可能导致死锁。

但是Remus是正确的-在您的示例中,我看不出任何好处,实际上,查找跨不同分区的行可能会产生一些开销。



 类似资料:
  • 一、分区表 1.1 概念 Hive 中的表对应为 HDFS 上的指定目录,在查询数据时候,默认会对全表进行扫描,这样时间和性能的消耗都非常大。 分区为 HDFS 上表目录的子目录,数据按照分区存储在子目录中。如果查询的 where 字句的中包含分区条件,则直接从该分区去查找,而不是扫描整个表目录,合理的分区设计可以极大提高查询速度和性能。 这里说明一下分区表并 Hive 独有的概念,实际上这个概念

  • 问题内容: 我正在尝试按 年 和 月 对表进行分区。我将通过其划分分区的列是具有ISO格式(‘20150110’,20150202’等)的日期时间类型列。 例如,我有2010年,2011年和2012年的销售数据。我希望数据按年份进行分区,并且每年也按月份进行分区。(2010/01,2010/02,… 2010/12,2011/01,… 2015/01 …) 前任: Sales2010Jan,Sal

  • 在讲解并发概念时,总会涉及另外一个概念并行。下面让我们来了解并发和并行之间的区别。 并发(concurrency):把任务在不同的时间点交给处理器进行处理。在同一时间点,任务并不会同时运行。 并行(parallelism):把每一个任务分配给每一个处理器独立完成。在同一时间点,任务一定是同时运行。 并发不是并行。并行是让不同的代码片段同时在不同的物理处理器上执行。并行的关键是同时做很多事情,而并发

  • 本文向大家介绍mysql分表和分区的区别浅析,包括了mysql分表和分区的区别浅析的使用技巧和注意事项,需要的朋友参考一下 数据库的数据量达到一定程度之后,为避免带来系统性能上的瓶颈。需要进行数据的处理,采用的手段是分区、分片、分库、分表。 一、什么是mysql分表和分区 什么是分表,从表面意思上看呢,就是把一张表分成N多个小表 什么是分区,分区呢就是把一张表的数据分成N多个区块,这些区块可以在同

  • 问题内容: 这是一个两部分的问题: 1)是否可以使用select语句基于其或其他标识符来检索数据所在的分区的名称? 例如。 2)是否可以在不删除其他分区中存储的数据的情况下截断表的单个分区? 我有一个超过十亿行的表,哈希按类别划分。只有少数类别的数据有问题,因此重新创建整个表没有意义,但是即使所有约束都处于非活动状态,从表中删除数据也花费了太长时间。 问题答案: 多亏您对 rowid 的提示,我找

  • Spring Batch也为Step的分区执行和远程执行提供了一个SPI(服务提供者接口)。在这种情况下,远端的执行程序只是一些简单的Step实例,配置和使用方式都和本机处理一样容易。下面是一幅实际的模型示意图: 在左侧执行的作业(Job)是串行的Steps,而中间的那一个Step被标记为 Master。图中的 Slave 都是一个Step的相同实例,对于作业来说,这些Slave的执行结果实际上等