我被分配了一项任务,创建四个文件组(每个卷一个),定位表,以便在ETL过程中不同时读取和写入文件组。
我已经逐步了解了所有的包、数据流任务、过程和视图,并注意到哪些表正在从、读到和按什么顺序读取。
现在我需要编写一个查询来确定表的最佳位置。
就逻辑而言,我有以下几点,将其分解为以下规则。
对于每个序列源表和目标表,不能在同一个卷上。表不能存在于多个卷上。
我很有兴趣听取人们对这个过程是否值得的意见,但无论如何,我希望得到一些帮助来解决这个问题。
下面可以找到创建表的脚本并插入一些测试数据。
谢谢您的建议。
-- Create table
CREATE TABLE [dbo].[TestData]
(
[TestDataID] [smallint] IDENTITY(1,1) NOT NULL,
[Src] [nvarchar](50) NOT NULL,
[Dest] [nvarchar](50) NOT NULL,
[Seq] [int] NOT NULL,
CONSTRAINT PK_TestData PRIMARY KEY CLUSTERED (TestDataID)
)
GO
-- Insert data
INSERT INTO TestData(Src, Dest, seq)
SELECT 'A', 'B', 1
UNION ALL
SELECT 'A', 'C', 1
UNION ALL
SELECT 'C', 'D', 2
UNION ALL
SELECT 'A', 'D', 3
UNION ALL
SELECT 'B', 'D', 3
GO发布于 2014-07-16 07:07:57
坏消息。您说的ETL进程-这意味着沉重的数据负载,插入/更新/删除有一个单一的磁盘瓶颈:事务日志文件。您可以添加多个事务日志文件,但它们是按顺序使用的,不是负载平衡的(某些真正的边缘场景除外)。
相反,您需要的是多个数据库。在数据仓库中,通常使用与目标数据库不同的源数据库,如暂存数据库。这样,您就可以将它的数据库放在不同的驱动器(甚至是不同类型的驱动器)上。例如,一些暂存数据库使用廉价的本地SSD。
如果您确实发现自己存储了数据文件读写的瓶颈,那么最好通过添加内存(缓存数据并完全避免读取)或在更多的驱动器(而不是更少的驱动器上)中对数据进行条带化来解决这个问题。通过将数据文件分割成较小的部分,并为它们提供每一个较少的驱动器,通常会使问题变得更糟。
https://dba.stackexchange.com/questions/17989
复制相似问题