Questions tagged «partitioning»

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


1
为什么对分区视图执行删除会导致聚集索引插入?
我有一个分区视图,具有下面的插入触发器(可怜的芒分区)。当我执行DELETE时,我得到以下查询计划: delete from factproductprice where pricedate = '20170725' 在视图上触发: ALTER TRIGGER [dbo].[factProductPriceDelete] ON [dbo].[FactProductPrice] INSTEAD OF DELETE AS BEGIN IF @@ROWCOUNT = 0 RETURN; DECLARE @PriceDate DATE SELECT @PriceDate = CAST(PriceDate AS DATE) FROM DELETED IF @PriceDate BETWEEN '20140101' AND '20141231' BEGIN DELETE FROM dbo.FactProductPrice2014 WHERE ProductId IN (SELECT ProductId …

1
将文件组设置从RESTRICTED_USER更改为MULTI_USER后,为什么我的数据库镜像崩溃了?
我的环境如下: VMWare 5.5充满活力的服务器MS Windows Server 2008R2 Enterprise域和SQL Server 2008 R2 Enterprise。具有光纤通道连接的集中存储。 我的分区中有分区SQL Server DB。我有2个file groups:一个带有实时数据(FG1),第二个带有历史数据(HDG)。 第二个文件组是read-only。每个月我都会在分区中移动-我将新数据(上个月的数据)添加到历史数据中。这个过程是自动的。 我们将数据库移至新服务器。最初,我必须手动执行该过程。在此操作期间,我的镜像发生故障(在操作3之后-参见下面的流程),并出现以下错误: 在主要服务器上: 日志中的行0: Date 15.6.2015 20:54:11 Log SQL Server (Current - 16.6.2015 07:55:00) Source spid84 Message Setting database option MULTI_USER to ON for database MYDB. 日志中的第1行: Date 15.6.2015 20:54:11 Log SQL Server (Current - …


1
ALTER TABLE…从常规表切换到分区表失败
下面的代码执行以下操作: 在C:\ TEMP中创建一个数据库play_partition 创建两个相同的分区表play_table和archive_play_table 将play_table分区1切换到archive_play_table分区1 在与play_table分区2相同的文件组上,创建一个新的未分区表temp_table,其结构与play_table相同。 将play_table_partition 2切换到temp_table 尝试将temp_table切换回play_table分区2并失败 消息4982,级别16,状态1,第64行ALTER TABLE SWITCH语句失败。检查源表'play_partition.dbo.temp_table'的约束是否允许目标表'play_partition.dbo.play_table'上分区2定义的范围所不允许的值。 为什么会失败? 我正在使用SQL Server 2014(企业版试用版)。 问候, 科林·戴利 http://www.colindaley.com/translator /* Playing with partitioned tables */ USE master; GO DROP DATABASE play_partition; GO CREATE DATABASE play_partition ON PRIMARY( NAME = play_partition , FILENAME = 'C:\TEMP\play_partition.mdf') ,FILEGROUP play_fg1( NAME = play_fg1 ,FILENAME …

2
如何最好地将Google ngram存储在数据库中?
我几天前下载了Google onegrams,它已经是大量数据了。我将10个软件包中的第一个插入mysql,现在我有一个4,700万个记录数据库。 我想知道如何最好地将Google ngrams存储在数据库中。我的意思是,如果您不使用一克,而是两克或三克,则金额将大得多。我可以在一个数据库中存储5亿条记录并使用它,还是应该将其拆分到不同的表中? 在将一条记录分割成几条记录之后,又如何最好地对其进行分割(考虑到twogram具有100个文件,因此大约有50亿条记录)?是否建议使用MySQL水平分区还是建立自己的分区(例如,通过word => twograms_a的第一个字符)。

2
在分区少量数据时获得切合实际的查询计划
我们正在使用分区来减少由于锁定而导致的OLTP系统体验受阻的程度,该分区方案可根据客户ID将工作表分为100个分区。但是,在测试过程中,我们发现执行计划没有按照我们期望的方式选择。 该测试方案是一个具有300,000个联系记录的单个客户(每个联系人的数据被拆分为两个表),所有记录都位于一个分区中,并通过查询在该客户分区中查找500条特定的行。您可能希望像哈希匹配之类的东西会在计划的早期消除不必要的299,500,但是SQL Server似乎选择选择整个表的记录计数并将其平均分配给所有分区,然后再考虑如何它要处理的记录很多,这导致它选择了一个嵌套循环,并在此过程的后半段消除了不需要的记录。通常,此时间是针对非分区表的相同查询的9倍。 奇怪的是,在选择中添加一个选项(重新编译)给出了一个明智的计划,但是我不知为何会有所作为。这不是存储过程,在测试过程中,我们会在每次测试运行之前清除过程缓存。 当所涉及的表未分区时,即,由于估计的行数与实际的行数匹配,因此每次都选择一个适当的计划时,不会出现此行为 任何对此行为的见解将不胜感激。 模式设置: USE [Scratch] GO CREATE SCHEMA part GO CREATE PARTITION FUNCTION [ContactPartition](smallint) AS RANGE LEFT FOR VALUES (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, …

1
巨大(100,000,000+)表的GROUP TOP(1)BY GROUP
设定 我有一个约115,382,254行的巨大表。该表相对简单,并且记录了应用程序的处理操作。 CREATE TABLE [data].[OperationData]( [SourceDeciveID] [bigint] NOT NULL, [FileSource] [nvarchar](256) NOT NULL, [Size] [bigint] NULL, [Begin] [datetime2](7) NULL, [End] [datetime2](7) NOT NULL, [Date] AS (isnull(CONVERT([date],[End]),CONVERT([date],'19000101',(112)))) PERSISTED NOT NULL, [DataSetCount] [bigint] NULL, [Result] [int] NULL, [Error] [nvarchar](max) NULL, [Status] [int] NULL, CONSTRAINT [PK_OperationData] PRIMARY KEY CLUSTERED ( [SourceDeviceID] ASC, [FileSource] …

2
SQL Server 2016 Standard Edition是否支持表分区?
我想将我的SQL Server 2008企业版升级到SQL Server 2016标准版; 但是,一个数据库利用多个文件组上的表分区(用于大型日志表,每天都是一个分区) 我在SQL Server 2016的版本和受支持的功能的“ RDBMS可伸缩性和性能”部分下看到,它说标准版支持表和索引分区,但是不支持分区表并行。 我不确定我是否完全理解这一后果。 在我看来,这到底是什么意思,它将如何影响数据库的性能?

1
SQL Server更新了只读文件组上的记录?
我的数据仓库中有一个非常大的数据库,我们在其中实施了分区以管理维护和备份。一定期限的记录最终每月一次迁移到一个只读文件组。 有时,我们的ETL流程会尝试更新已迁移到存档的较旧记录,我们希望这些记录会失败。但是,我至少有两个最近的示例,其中即使测试记录似乎位于测试环境中的只读文件组的分区中(查询sys.partition_functions和sys.partition_range_values),该记录也会被更新。 当尝试更新记录时,生产中的相同记录会导致预期的失败。到目前为止,我们已经两次捕获到该更新,但在生产中失败了,但是在测试中成功了(反之亦然)。 相关环境事实: SQL Server 2012 SP3 CU3(内部版本11.0.6537.0) 测试是开发人员版,生产是企业 可以根据要求提供其他人:现在已严重困扰... 更新2016-08-19 新记录在一夜之间以某种方式更新了。确认它在只读文件组中。发现我可以更新同时插入的记录(即也位于只读文件组的同一分区上)。我在同一分区上确定了一条记录,并且能够多次更新该记录。尝试更新过夜更新的记录会导致预期的失败。 更新2016-08-11 在每晚的测试过程中,只读分区上的更新继续发生。尝试从该过程中更新相同的记录失败。尝试以以前更新记录的用户身份登录时更新相同的记录失败。我也无法通过更新夜间程序尚未触及的类似记录来重复该问题。 更新2016-08-04 今天发现它不限于该单个表,因为我发现了使用相同分区方案在不同表上再次出现相同行为的情况。 更新2016-08-03 运行该脚本这个MSDN脚本证实了我使用肯德拉小的分区助手的意见时得到ph.FilegroupDetail和ph.ObjectDetail从该演示。有问题的记录位于分区2中(有问题的记录的分区列值为2015年3月18日) Filegroup Low Boundary UpperBoundary Archive (RO) NULL 1900-01-01 Archive (RO) 1900-01-01 2015-04-01 ActiveFG (RW) 2015-04-01 2015-07-01 ActiveFG (RW) 2015-07-01 2015-10-01 ActiveFG (RW) 2015-10-01 2015-01-01 ActiveFG (RW) 2016-01-01 2016-04-01 ActiveFG (RW) 2016-04-01 …

2
要分区还是不分区?
已经阅读了关于SO,外部博客文章和手册的几个问题 SO:Pg中分区表的外键约束 dba.SE:在Pg中处理FK到分区表的不同方法 手册:继承 手册:分区 手册:约束触发器 博客:具有继承性的Postgres建模 我仍然发现自己想知道是否应该考虑我的情况进行分区。 案例-简化 存储客户数据。为了清楚起见,下面提到的所有表名均已组成。 具有需要客户识别的非物理对象,以及需要将某些对象按需发送回客户或以其他方式进行处理的情况下,实际存储它们的物理对象。它们以多对多关系映射。objects_nonphysical,objects_physical,objects_mapping_table。 第二个多对多关系是这些非物理对象与其度量之间的关系。有些对象与某些指标绑定。metrics,metrics_objects_nonphysical 非物理对象和物理对象都有其子级关系表。objects_nonphysical_hierarchy,objects_physical_hierarchy 根据每个客户的需求和要求,可以提供有关物理对象的数据,或者可能需要从头开始创建。基本上,我需要做的是: 保持内部系统的快速运行INSERT和SELECT声明,因为这是要进行映射的地方。 维护系统以供外部客户查看和操作其非物理对象 -快速检索数据。报表高效性的需求SELECT -许多客户可以随时使用此数据进行搜索。 我的考虑 可以有一个客户,他们可以访问数据,查看数据并对其进行操作,但是不必是我们从中获取数据/正在处理数据的承包商。 考虑到我总是知道应该将哪些分区数据归入(针对承包商的分区),然后考虑到需要为客户进行分区的外部客户的维护系统,这导致我将表分区引入到我的系统中(某些情况下可以做到这一点)延迟使用自动化工具和一组规则以客户的方式重写数据,因此对于每个客户,我们只为每个表扫描一个分区。 数据量 我的数据将不断增长,尤其是在导入新客户的对象和指标时。从长远来看,目前无法预测新数据进入系统的速度。确实,没有知道谁将成为下一个客户,就无法衡量它。眼下正好有2客户提供更多或更少的1M行对每个表的每个客户。但是将来我预计新客户也将有1000万行左右。 问题 这些问题都是相互关联的。 应该在这里真正考虑分区,还是过大?我认为它很有用,因为我始终只扫描一个分区。 如果要进行分区,那么如何FK考虑到我的需求最有效地实施约束?我应该选择constraint triggers还是将其保留在内部系统的应用程序层中,或者使用其他方法? 如果无法进行分区,那我应该深入研究什么呢? 如果没有足够的数据,请在下面的评论中让我知道。
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.