我有2个会话,每个会话执行相同的任务但在不同的表上,如下所示
begin tran
update...set...
commit tran
checkpoint
每次更新都是一个大批量。数据库处于简单恢复模式。为了节省t-log变得太大,我们发出检查点,以便发生t-log截断。
我的问题是: 如果会话A提交了事务并且在会话B仍处于更新过程中发出了检查点,那么会话A的检查点问题会因会话B的活动事务而在会话B上等待吗? 换句话说,检查点是否必须等待所有活动事务完成?这两个会议形成僵局的可能性有多大?
如果同时发出两个检查点命令会发生什么?
请注意,会话A更新table_A,会话B更新table_B。它们在任何给定时间都不会更新同一个表。
另外我知道使用insert into,rename,drop可以实现更快的更新。但我不限于这样做。我只是想了解检查点并发性。
谢谢,
答案 0 :(得分:1)
手册Checkpoint
只是告诉SQL Server将内存中的更改写入磁盘。它应该对日志的大小没有影响。
如果会话B在另一个表上的事务中提交和检查点,则这些是不相关的事件 - 会话A检查点将继续,会话B事务也将继续。由于手动检查点只是强制在程序员选择时将内存数据写入磁盘,而不是在SQL Server选择的时候,唯一可察觉的后果应该是性能略有下降。
由于检查点在数据库级别生效,因此并发Checkpoint
应与Checkpoint
具有相同的效果。
答案 1 :(得分:0)
检查点与数据库中的数据完全无关。它们不会导致数据更改或可见性更改。
您可能会大幅降低性能。
此外,这不太可能解决您的日志问题,因为SQL Server默认情况下会定期检查点。更多地了解日志,您肯定会找到更好的方法来解决这个问题。或者询问有关日志问题的问题。