0

我们有一个审计表,它通过插入/更新触发器跟踪主表中的更改。触发器会将主表中的所有新字段值复制到审计表。我们在审计表中有一个列,它跟踪主表 ( )datetime上发生插入/更新的时间。 我们在主键和时间列上有唯一索引。问题是,如果在主表上几乎同时发生多个更新,那么它就会以违反唯一键而告终。是否有任何可以捕获纳秒级精度的日期时间类型? getdate()

4

1 回答 1

1

数据库应该固有地通过 ACID 处理同一记录的更新。使用联合 master_table_id / updatetime 主键“检查”审计表以防止在短时间内“更新太多”可能不是正确的方法......尤其是当性能通过新硬件提高时......你可以拥有更多您的 pk 正在阻止的“合法”更新。

我不想问,但是您正在执行什么类型的操作,以亚毫秒级别多次更新同一行?您是否通过一些 JDBC 或 ADO 连接更新 col2,然后 col3,然后 col4 全部用于相同的 PK?

您可以通过对存储过程的输入将这些“许多”更新批处理到 1 个存储过程调用中,从而限制您的写操作吗?这会更快,并且在审计跟踪上提供更少的流失。

于 2012-08-09T06:05:15.283 回答