SQL Server性能优化 - 审核表重新设计



我在SQL Server数据库中有一个审核表,该列具有以下列:

  • 序列--- bigint(主键(
  • tablename ---瓦拉查(50((非集群索引(
  • columnName ---瓦拉查(50((非集群索引(
  • 控制--- char(10((非集群索引(
  • tofervalue --- varchar(500((非集群索引(
  • 余价,--- varchar(500(
  • Datechanged --- DateTime
  • 更改--- char(20(
  • CompanyCode --- char(5((非集群索引(

它具有50亿 行数据。大约200多个触发器正在此表中插入数据,并且正在插入大约50多个存储过程,并从该表中查询数据。每当在交易数据库中的200 表中更新/删除列时,分别将一行插入审计表中。

我最近继承了这个表。最近,我们一直在遇到性能问题,有人告诉我要重新设计此审核表以解决相关的性能问题。

我正在寻找建议,下一步,绩效矩阵的想法,任何帮助将不胜感激。

预先感谢。

我认为您不需要更改,但只需要按照以下方式重新设计您的过程:

  1. 创建与当前审核表完全相同的存档表。
  2. 将您当前所有审核的所有能够转移到此新存档表中,这意味着您的当前审核表为空
  3. 安排每天(或每周(的工作,以将数据从审核表移至档案表。
  4. 根据您的数据保留政策,清理您的存档表。

但是,对于绩效问题,您必须确保将插入审核表插入真的是罪魁祸首。如果是这样,那么上述方法可能会减轻您的痛苦。否则,它可能无济于事。

我必须做类似的事情。如果您必须维护50亿个记录,那么最好的解决方案是分区表。您需要执行以下操作:

  1. 创建分区功能
  2. 创建分区模式
  3. 创建分区文件

分区函数将控制数据的分区方式:通常是按行计数(即序列(或日期(即每月,每季度,每年等(进行。注意:分区仅在SQL Server 201X Enterprise上可用。

https://learn.microsoft.com/en-us/sql/relational-database/partitions/partitioned-tables-and-and-indexes

我强烈建议您在做任何事情之前先阅读Microsoft的白皮书。另外,一旦实施它,就应该在周末进行处理,以便进行处理,因为我认为这需要一些时间才能完成。

https://technet.microsoft.com/en-us/library/dd578580(v = sql.100(.aspx

为了进行比较,在预分赛状态下运行10分钟后,查询将无法完成。分区后,查询在10秒内完成。注意:将表分开后,您将需要调查查询,以在谓词中包含分区列。否则,您可能不会注意到响应时间的差异。

您对性能问题的位置不清楚:他们是在阅读表格还是写作?通常,如果问题在阅读表中,您会注意到系统的特定区域由于读取而缓慢,而如果要写入表格,则您将产生更微妙的性能影响,但是,将会更加广泛,并且往往会减慢所有东西(在不同程度上(而不是某些热点区域。

另一个不清楚的问题是这主要是仅写入或大量读取数据。审计表通常是优化的,要尽快添加新数据,而在您需要时,从中读取速度很慢(通常,我们编写的频率要比阅读要多得多:"正常"的对立面是相反的。RDMS中的交易行(。

因此,第一步是确定性能问题的位置,并从那里收集一些线索,以确定您是否需要优化表的读取部分或表格的写入部分。

如果这确实是一个写作绩效问题(与阅读问题相比,很难概括和识别(,我可能会考虑丢弃表格上的一些索引。我认为,对于一个优化的表格,上面有很多索引在每个写操作上都援引很多开销(请记住,每个写入桌子都需要维护每个索引他们取消写作表现:尤其是非集群索引(。

如果这是一个读取问题,我仍然可能会选择写作优化,然后设计一些方法来提高读取性能,因为它可以是最佳的,一旦写入优越。这里的其他答案特别解决了这一点,但是在不更熟悉系统要求的情况下,很难说哪个方向是最适合移动的方向。

最新更新