使用慢速变化维度向导时,Visual Studio会挂起。
我选择了正确的连接。 然后我尝试打开下拉列表或查看'选择目标表。 在这一刻,视觉工作室挂在我身上..
我在所有客户端计算机和不同的Visual Studio版本上都有此功能,并且仅在此特定数据库上。在活动监视器中,我注意到向导对数据库中的所有表执行了select *我有一个表有+40亿行(+ 300GB)。这张桌子上的select *花了这么长时间。
有没有人知道是什么原因导致我的数据库上的select *,或者为什么他们这样做?甚至更好,如何解决这个问题?
答案 0 :(得分:0)
根本不要在SSIS中使用缓慢变化的尺寸向导。与使用TSQL编写的数据流相比,它创建的数据流执行得非常糟糕。
一些假设;你需要一个2型SCD,你至少使用SQL Server 2008和MERGE语句。
而不是SSIS使用TSQL中的MERGE语句的OUTPUT子句来执行维度更新/插入。例如:
INSERT INTO Customer_Master
SELECT
Source_Cust_ID,
First_Name,
Last_Name,
Eff_Date,
End_Date,
Current_Flag
FROM
(
MERGE
Customer_Master CM
USING
Customer_Source CS
ON
CM.Source_Cust_ID = CS.Source_Cust_ID
WHEN NOT MATCHED
THEN
INSERT VALUES
(
CS.Source_Cust_ID,
CS.First_Name,
CS.Last_Name,
CONVERT(char(10), GETDATE()-1, 101),
'12/31/2199',
'y'
)
WHEN MATCHED
AND CM.Current_Flag = 'y'
AND (CM.Last_Name <> CS.Last_Name )
THEN
UPDATE
SET
CM.Current_Flag = 'n',
CM.End_date = convert(char(10), getdate()- 2, 101)
OUTPUT
$Action Action_Out,
CS.Source_Cust_ID,
CS.First_Name,
CS.Last_Name,
convert(char(10), getdate()-1, 101) Eff_Date,
'12/31/2199' End_Date,
'y' Current_Flag
) AS MERGE_OUT
WHERE
MERGE_OUT.Action_Out = 'UPDATE';