AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / dba / 问题 / 173638
Accepted
BradC
BradC
Asked: 2017-05-16 13:23:02 +0800 CST2017-05-16 13:23:02 +0800 CST 2017-05-16 13:23:02 +0800 CST

SQL Master Data Services 数据库有巨大的叶子成员临时表 - 我可以清除旧记录吗?

  • 772

我们的一个 SQL 实例有一个大型 MDS 数据库,几乎 100% 的大小是由于一个名为stg.Stg_Project_Leaf. 它最近开始破坏我们每周的索引重建,所以我需要弄清楚这一点。

据我所知,这是“项目”实体的叶成员暂存表,作为构建 BI 多维数据集/报告的 ETL 过程的一部分进行设置和自动化(由先前的顾问)。

看起来它在过去几年中每半小时处理大约 10k 行,并且从未被清除过。但是,当我检查时ImportStatus_ID,我看到 0 行等待处理。(大多数是 1 - 成功,不到 1% 是 2 - 失败。)

我可以只用TRUNCATE这张桌子吗?

该系统正在以自动化方式使用,它不像人们登录到 MDS 控制台并单独监控和回滚更改。我发现了一些对清除这些表(mdm.udpStagingClear或可能mdm.udpDeletedMembersPurge)的存储过程的引用,但我不确定其中哪一个是我需要的,也不知道如果他们尝试执行 300m 是否会炸毁日志行。

sql-server sql-server-2012
  • 1 1 个回答
  • 2024 Views

1 个回答

  • Voted
  1. Best Answer
    BradC
    2017-05-17T14:13:39+08:002017-05-17T14:13:39+08:00

    简而言之:官方的答案是使用新的 procmdm.udpEntityStagingBatchTableCleanup来清理实体暂存表,但在实践中,DELETE或者TRUNCATE应该可以正常工作(或者可能是必要的),只要您了解批处理详细信息。


    我找到了对 SQL 2012 补丁的引用,该补丁向 MDS添加了 3 个存储过程,包括我需要的一个:

    --Cleanup entity-based staging table
    EXEC mdm.udpEntityStagingBatchTableCleanup @ModelID, @CleanupOlderThanDate;
    

    另请参阅本文以了解使用相同 procs 的计划清理选项。

    不过,出于我的目的,我仍然担心用 300 多万行必须删除的行来炸毁 tran 日志,所以我详细研究了mdm.udpEntityStagingBatchTableCleanup. 此存储过程执行以下操作:

    1. 使用与您的删除条件匹配的所有已完成批次填充临时表(对于给定的@Model_ID,早于@CleanupOlderThanDate)。
    2. 为临时表中DELETE的每个表构建相应的叶表、合并表和关系表的动态语句。DISTINCT Entity_ID
    3. 它为每个实体表执行这些DELETE语句中的每一个,通过连接到临时表进行过滤。
    4. 然后它从mdm.tblStgBatch自身中删除,再次通过连接到临时表进行过滤。

    没有尝试限制一次删除的行数,在我的情况下,300+ 百万行全部用于单个Entity_ID,这可能会炸毁事务日志。

    不过,好消息是,如果我打算删除所有Entity_IDs日期(我确实这样做了),那么这在功能上等同于 a TRUNCATE,只要我小心不要在活动批次的中间尝试它。

    最后,虽然我找不到任何明确建议截断这些表的官方 MS 资源,但我确实找到了几篇文章,其中 DBATRUNCATE在导入过程的开始或结束时执行例程:

    • “第 1 步:截断 3 个临时表中的每一个。”
    • “如果要清空暂存表,可以删除所有记录,也可以单击集成管理中的清除批次。”
    • TRUNCATE TABLE stg.TableName_Leaf

    所以我的计划是做一个初始的TRUNCATE,然后安排mdm.udpEntityStagingBatchTableCleanup定期运行。

    • 2

相关问题

  • SQL Server - 使用聚集索引时如何存储数据页

  • 我需要为每种类型的查询使用单独的索引,还是一个多列索引可以工作?

  • 什么时候应该使用唯一约束而不是唯一索引?

  • 死锁的主要原因是什么,可以预防吗?

  • 如何确定是否需要或需要索引

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目

    • 12 个回答
  • Marko Smith

    如何让sqlplus的输出出现在一行中?

    • 3 个回答
  • Marko Smith

    选择具有最大日期或最晚日期的日期

    • 3 个回答
  • Marko Smith

    如何列出 PostgreSQL 中的所有模式?

    • 4 个回答
  • Marko Smith

    列出指定表的所有列

    • 5 个回答
  • Marko Smith

    如何在不修改我自己的 tnsnames.ora 的情况下使用 sqlplus 连接到位于另一台主机上的 Oracle 数据库

    • 4 个回答
  • Marko Smith

    你如何mysqldump特定的表?

    • 4 个回答
  • Marko Smith

    使用 psql 列出数据库权限

    • 10 个回答
  • Marko Smith

    如何从 PostgreSQL 中的选择查询中将值插入表中?

    • 4 个回答
  • Marko Smith

    如何使用 psql 列出所有数据库和表?

    • 7 个回答
  • Martin Hope
    Jin 连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目 2014-12-02 02:54:58 +0800 CST
  • Martin Hope
    Stéphane 如何列出 PostgreSQL 中的所有模式? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh 为什么事务日志不断增长或空间不足? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland 列出指定表的所有列 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney MySQL 能否合理地对数十亿行执行查询? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx 如何监控大型 .sql 文件的导入进度? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison 你如何mysqldump特定的表? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 对 SQL 查询进行计时? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas 如何从 PostgreSQL 中的选择查询中将值插入表中? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 列出所有数据库和表? 2011-02-18 00:45:49 +0800 CST

热门标签

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve