我是一个有用的助手,可以为您翻译文本。
我正在寻找与SQL事务类似的内容。 我需要事务提供的通常保护措施,但我不希望它减慢其他人的速度。
想象客户端A连接到数据库并运行以下命令:
在SELECT和UPDATE之间,客户端B过来执行一次查询操作,在正常情况下,它必须等待A执行COMMIT。我希望的是,当A打开其事务时,如果B也来执行查询操作,那么A的事务应该立即回滚并使其后续命令失败。B只会经历微小的延迟。(请注意,SELECT和UPDATE只是演示性的命令。)
更新...
我有一个优先级高的任务(客户B),有时(每个月左右)会出现SQL超时错误,还有一个低优先级的任务(客户A)有一个事务导致了这个超时。我宁愿让低优先级的任务失败,并在下一个循环中重新尝试。最终,我通过完全消除事务并用一组非正式的标志替换它们来解决了这个问题。这些查询被重构为只在正确的标志集被引发时才执行某些操作,并添加了一些清理遗留记录的内容,这些记录在以前的回滚中已清除。我通过消除事务来解决我的事务问题。
我正在寻找与SQL事务类似的内容。 我需要事务提供的通常保护措施,但我不希望它减慢其他人的速度。
想象客户端A连接到数据库并运行以下命令:
BEGIN TRAN
SELECT (something)
(Wait a few seconds maybe.)
UPDATE (something)
COMMIT
在SELECT和UPDATE之间,客户端B过来执行一次查询操作,在正常情况下,它必须等待A执行COMMIT。我希望的是,当A打开其事务时,如果B也来执行查询操作,那么A的事务应该立即回滚并使其后续命令失败。B只会经历微小的延迟。(请注意,SELECT和UPDATE只是演示性的命令。)
更新...
我有一个优先级高的任务(客户B),有时(每个月左右)会出现SQL超时错误,还有一个低优先级的任务(客户A)有一个事务导致了这个超时。我宁愿让低优先级的任务失败,并在下一个循环中重新尝试。最终,我通过完全消除事务并用一组非正式的标志替换它们来解决了这个问题。这些查询被重构为只在正确的标志集被引发时才执行某些操作,并添加了一些清理遗留记录的内容,这些记录在以前的回滚中已清除。我通过消除事务来解决我的事务问题。
ROLLBACK
可能需要的时间,那么它可能会比完成事务本身还要长。 - Tom H