【发布时间】:2018-01-24 12:25:28
【问题描述】:
我需要信息对生产数据库的影响为大约 30 个生产表创建触发器,这些表捕获任何更新、删除和插入语句并输入以下信息“PK”、“表名", "修改时间" 到单独的表。
我的测试能力有限,因为我对 Prod 和 Test 环境都有只读权限(我可以在一个工作日内让 10 个最终用户对其进行测试)。
我估计从这些触发器插入的记录数每天约为 150-200k。
背景:
我有一个项目为非常定制的数据库部署数据仓库+每天都在运行操作数据的作业。更新日期列未维护(自定义)+ 表上发生硬删除。我们决定要求开发团队添加触发器,例如:
CREATE TRIGGER [dbo].[triggerName] ON [dbo].[ProductionTable]
FOR INSERT, UPDATE, DELETE
AS
INSERT INTO For_ETL_Warehouse (Table_Name, Regular_PK, Insert_Date)
SELECT 'ProductionTable', PK_ID, GETDATE() FROM inserted
INSERT INTO For_ETL_Warehouse (Table_Name, Regular_PK, Insert_Date)
SELECT 'ProductionTable', PK_ID, GETDATE() FROM deleted
在核心约 30 个生产表上。 基于此表,我们将提取过去 24 小时的增量并将其推送到数据仓库临时表。
如果有人遇到类似问题并能帮助我估计它如何影响生产数据库的性能,我将不胜感激。 (如果它有效 - 我得救了,如果不是我需要提出其他解决方案。目前镜像或复制可能很难获得,因为本地 DEV 不知道如何设置它......) 欢迎提出如何处理这种情况或执行测试的其他想法(我的截止日期是星期五 26-01)。
【问题讨论】:
-
我们有一些触发器,它们在更新/插入的记录中更新修改日期,并将删除的记录 PK 插入单独的表中。 IMO 的开销要少一些。
-
如果您在旧版本中使用 SQL 2016 SP1+ 或企业版,请考虑使用Change Data Capture 而不是触发器。触发器方法的性能和存储影响将在很大程度上取决于可用的服务器资源,但恕我直言,每天 200K 并不太重要。
-
感谢 Arvo 和 Dan,生产:Microsoft SQL Server 2014 (SP2-CU6) (X64) - 企业版 数据仓库:Microsoft SQL Server 2016 (SP1) Enterprise Edition (64-bit) CDC:它需要更多的开发人员参与,这是一个障碍。如果触发器失败将尝试推动这个方向。
-
CDC 专为您想要完成的任务而设计。我会认真研究并重新考虑您的选择,因为从长远来看,您可能会节省大量资金。
-
您可能需要考虑将此问题移至DBA 以获得性能建议。
标签: sql-server database triggers etl data-warehouse