Questions tagged «partitioning»

将数据库表分为多个段以提高性能或可管理性。

3
表分区有何帮助?
我很难掌握表分区的优缺点。我即将开始一个有8个表的项目,其中一个将是主要数据表,其中将包含180-2.6亿条记录。由于将对表进行正确的索引,因此我正在考虑将表记录限制为2000万,这样我就必须创建9-13个表。 但是我不确定如何提高性能,因为它们将位于同一台计算机(32GB RAM)上? 我正在使用MySQL,表将是MyISAM,大表将在id字段上具有索引,并且没有进一步的复杂性,例如全文搜索等。 还请阐明表分区与数据库分区。

1
带日期的索引优化
此问题是从Stack Overflow 迁移而来的,因为可以在Database Administrators Stack Exchange上回答。 迁移 7年前。 我在PostgreSQL 9.0.8中有一个很大的对象表(15M +行),我想查询该表中的过时字段。 我想将查询除以数百万,以实现可伸缩性和并发性,并且我想获取几天前带有update_at字段的所有数据。 我已经在100万个ID上尝试了许多索引和查询,但是使用Heroku的Ronin硬件在100秒内似乎无法获得性能。 我正在寻找我没有试图使其尽可能高效的建议。 尝试#1 EXPLAIN ANALYZE SELECT count(*) FROM objects WHERE (date(updated_at)) < (date(now())-7) AND id >= 5000001 AND id < 6000001; INDEX USED: (date(updated_at),id) 268578.934 ms 尝试#2 EXPLAIN ANALYZE SELECT count(*) FROM objects WHERE ((date(now()) - (date(updated_at)) > …




1
搜寻,然后您应扫描…在分区表上
我已经在Itzik Ben-Gan的 PCMag中阅读了这些文章: 搜寻并您应扫描第一部分:当优化程序未优化 搜寻时,您应扫描第二部分:升序键 我目前所有分区表都遇到“最大分组”问题。我们使用Itzik Ben-Gan提供的技巧来获取max(ID),但有时它无法运行: DECLARE @MaxIDPartitionTable BIGINT SELECT @MaxIDPartitionTable = ISNULL(MAX(IDPartitionedTable), 0) FROM ( SELECT * FROM ( SELECT partition_number PartitionNumber FROM sys.partitions WHERE object_id = OBJECT_ID('fct.MyTable') AND index_id = 1 ) T1 CROSS APPLY ( SELECT ISNULL(MAX(UpdatedID), 0) AS IDPartitionedTable FROM fct.MyTable s WHERE $PARTITION.PF_MyTable(s.PCTimeStamp) = …

2
是否可以强制优化器在此分区视图中消除不相关的表?
我正在测试大型表的不同体系结构,并且看到的一个建议是使用分区视图,即将大型表分解为一系列较小的“分区”表。 1,2,3,4 在测试这种方法时,我发现有些东西对我来说并没有太大意义。当我在事实视图的“分区列”上进行过滤时,优化程序仅在相关表上进行搜索。此外,如果我在维度表的该列上进行过滤,则优化程序会消除不必要的表。 但是,如果我在维度的其他方面进行过滤,则优化器将在每个基本表的PK / CI上进行搜索。 这是有问题的查询: select od.[Year], AvgValue = avg(ObservationValue) from dbo.v_Observation o join dbo.ObservationDates od on o.ObservationDateKey = od.DateKey where o.ObservationDateKey >= 20000101 and o.ObservationDateKey <= 20051231 group by od.[Year]; select od.[Year], AvgValue = avg(ObservationValue) from dbo.v_Observation o join dbo.ObservationDates od on o.ObservationDateKey = od.DateKey where od.DateKey …

2
当数据“自然可分区”时,跨机器对PostgreSQL进行分区的现代方法是什么?
此问题是从Stack Overflow 迁移而来的,因为可以在Database Administrators Stack Exchange上回答。 迁移 7年前。 在进入“ NoSQL”领域几年后,现在我遇到了一个本质上非常“关系”的问题。今天,我看到的数据存储区与以往完全不同。诸如Riak之类的事情以一种无法忍受的单点故障,“需要维护的停机”之类的方式宠坏了我。当然,(或者我希望),我还没有完全失去理智。这是一个个人项目,尚未(或尚未)有很高的要求。 大多数分片解决方案都没有给我我想要的东西(至少乍一看),可能是因为我的问题很“容易”解决。至少在概念层面(忽略RDBM本身带来的限制)。 我有少量的“共享”数据,可以自由复制。它没有硬一致性的要求。可以将其存储在类似发电机的数据库中,并且可以无限扩展。但是,如果可能的话,我仍然想使用一个数据库。 我有很多“每用户”数据。那就是-很多用户,每个用户拥有绝对合理大小的数据,确实适合存储在单个PostgreSQL节点上。我们正在谈论的最多是数千条记录。 我永远不需要查询跨用户,也不需要跨用户原子性。 这听起来非常容易实现。至少当我用“ NoSQL眼睛”看时。 这是我幼稚的入门想法: 在极端情况下,我可以将整个用户序列化为Riak中的单个键/值。当然,对数兆字节的数据进行持续的反序列化会很慢,这就是我考虑使用PostgreSQL的原因。很多Riak K / V都是不行的,因为我需要每个用户数据内的原子性/事务性。 我可以为每个用户使用一个SQLite数据库,并使用GlusterFS之类的文件来实现冗余/可用性。如果我无法使用PostgreSQL找到同样好的东西,这可能就是我要选择的解决方案。优点:可以很好地缩小/放大比例;缺点:我比SQLite更喜欢PostgreSQL的类型和严格性 因此,理想情况下,我将从PostgreSQL分片解决方案中请求什么: 自动在每个用户的数据(在不同的计算机上)周围保留几个副本。能够按用户/分片动态切换主节点(如果先前的主节点出现故障)。 通过添加/删除服务器节点,可以动态放大/缩小规模。通常就像Riak一样能够做到。 不需要我的应用程序知道与哪些节点以及何时与之对话。

1
增量更新后统计信息消失
我们有一个使用增量统计信息的大型分区SQL Server数据库。所有索引均按分区对齐。当我们尝试通过分区在线重建分区时,在重建索引之后,所有统计信息都会消失。 下面是一个脚本,用于通过AdventureWorks2014数据库在SQL Server 2014中复制问题。 --Example against AdventureWorks2014 Database CREATE PARTITION FUNCTION TransactionRangePF1 (DATETIME) AS RANGE RIGHT FOR VALUES ( '20130501', '20130601', '20130701', '20130801', '20130901', '20131001', '20131101', '20131201', '20140101', '20140201', '20140301' ); GO CREATE PARTITION SCHEME TransactionsPS1 AS PARTITION TransactionRangePF1 TO ( [PRIMARY], [PRIMARY], [PRIMARY], [PRIMARY], [PRIMARY], [PRIMARY], [PRIMARY], [PRIMARY], …

2
SQL Server不会在两个等效分区的表上优化并行合并联接
此问题是从Stack Overflow 迁移而来的,因为可以在Database Administrators Stack Exchange上回答。 迁移 7年前。 非常抱歉,非常详细的问题。我已包含查询以生成用于重现该问题的完整数据集,并且我在32核计算机上运行SQL Server 2012。但是,我不认为这是特定于SQL Server 2012的,对于此特定示例,我已将MAXD​​OP强制设置为10。 我有两个使用相同分区方案进行分区的表。当在用于分区的列上将它们连接在一起时,我注意到SQL Server无法像人们期望的那样优化并行合并连接,因此选择使用HASH JOIN。在这种特殊情况下,我可以通过基于分区函数将查询分为10个不相交的范围并在SSMS中同时运行每个查询,来手动模拟一个更优化的并行MERGE JOIN。使用WAITFOR精确地同时运行它们,结果是所有查询在原始并行HASH JOIN使用的总时间的约40%内完成。 对于等效分区的表,是否有任何方法可以使SQL Server自行进行此优化?我了解到,SQL Server通常会为了使MERGE JOIN并行而产生大量开销,但是在这种情况下,似乎有一种非常自然的分片方法,开销很小。也许仅仅是一个特殊的情况,优化器还不够聪明以至于无法识别? 下面是设置简化数据集以重现此问题的SQL: /* Create the first test data table */ CREATE TABLE test_transaction_properties ( transactionID INT NOT NULL IDENTITY(1,1) , prop1 INT NULL , prop2 FLOAT NULL ) /* …

2
如何在postgres中对现有表进行分区?
我想按日期范围对具有1M +行的表进行分区。通常如何做到这一点而又不需要太多的停机时间或冒着丢失数据的风险?这是我正在考虑的策略,但可以提出一些建议: 现有表是主表,子表继承自该表。随着时间的流逝,数据会从主数据移到子数据,但是一段时间后,某些数据将在主表中,而某些数据将在子表中。 创建一个新的主表和子表。在子表的现有表中创建数据副本(因此数据将驻留在两个位置)。子表拥有最新数据后,请更改所有插入以指向新的主表并删除现有表。

1
数据库存档解决方案
继续我提出的一个问题,将高容量和高访问量的表移至单独的数据库是否是一个好主意?,我正在寻找可用于PostgreSQL中数据库归档的不同技术/解决方案。 我能想到的解决方案很少: 表分区 单独的表空间和/或架构 将存档的记录/表移动到其他硬盘 任何其他建议/指针/解决方案都将受到欢迎和赞赏。 注意:我们在CentOS5.2上运行PostgreSQL v9.1.3

2
有效的mysql表/索引设计,可处理3500万行以上的表,并具有200+相应的列(双精度),可以查询其任意组合
我正在针对以下情况寻求有关表/索引设计的建议: 我有一个大表(股价历史数据,InnoDB,3500万行,并且还在不断增长),它具有复合主键(资产(整数),日期(日期))。除了定价信息外,我还有200个双精度值需要与每个记录相对应。 CREATE TABLE `mytable` ( `assetid` int(11) NOT NULL, `date` date NOT NULL, `close` double NOT NULL, `f1` double DEFAULT NULL, `f2` double DEFAULT NULL, `f3` double DEFAULT NULL, `f4` double DEFAULT NULL, ... skip a few … `f200` double DEFAULT NULL, PRIMARY KEY (`assetid`, `date`)) ENGINE=`InnoDB` DEFAULT CHARACTER …

4
SQL大表设计
我对SQL Server 2008表设计有一个一般性问题。我们目前有一张桌子,容量超过600GB,每天增长约3GB。该表具有适当的索引,但由于其大小而在运行查询时正成为主要的挂断。问题是我应该按年和月将表拆分为多个表(这将适合其他部门如何拆分其大数据集),还是应该利用SQL Server内置的分区。看来使用分区将需要较少的代码更改。从我在分区时读取的内容来看,您仍然仅查询一张表,服务器处理如何获取数据。如果我们使用多表路由,则必须处理从多个表中提取数据。

3
是否可以通过更新分区键在分区之间移动行?
我认为这将是一个相当简单的问题,但实际上,我很难找到答案。 问题:您是否可以通过简单地更新分区列使其越过分区边界,将分区表中的数据行从一个分区移至另一个分区? 例如,如果我有一个带有分区键的表: CREATE TABLE SampleTable ( SampleID INT PRIMARY KEY, SampleResults VARCHAR(100) NOT NULL, ) 使用映射到主键的分区功能: CREATE PARTITION FUNCTION MyPartitionFunc (INT) AS RANGE LEFT FOR VALUES (10000, 20000); 是否可以通过将SampleID从1更改为(例如)500,000,将行从第一分区移动到第三分区? 注意:我将其标记为sql server 2005和2008,因为它们都支持分区。他们有不同的处理方式吗?

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.