我已经使用专有的非SQL db进行了一个项目,可以中断查询,在代码库中,有很多位置使用该功能,并且非常有意义(例如,停止了由长期运行的查询而被取消的长期运行查询用户,或当最近的查询发生并渲染上一个查询时,等等。它们都与完全相同的事情有关):

  • SQL查询可以中断吗?

  • 这是SQL标准的一部分吗?

  • 如果它不是SQL标准的一部分,那么哪个SQL DBS允许查询中断(最欢迎的示例)?

  • 中断DB查询(是否不存在SQL),您知道您将不再关心结果吗? (在我处理的代码库中,它肯定有助于减轻服务器的负载)

有帮助吗?

解决方案

恕我直言的“中断”应由'杀死'或“终止”代替。中断的概念可能会造成混淆,因为人们可能会假定它将允许以后恢复查询。

SQL标准无法提供中断或终止运行查询的方法,但是我知道的每个DBMS确实实现了杀戮命令或类似的方法。例如,在MySQL中,用户可以使用show [full] ProcessList查看所有运行查询(及其状态,查询ID等)。具有杀伤特权的用户可以终止查询。

大多数杀戮之所以发生,是因为查询风险运行时间太长或阻止其他查询,例如。该表缺少索引或磁盘已满。当您不在乎结果时(例如,用户取消的站点导航)通常会中止该过程,因此本身会进行查询(无需手动或程序员互动)

其他提示

我曾经使用过的所有RDBMS访问层提供了一种取消方法,以异步取消运行查询。检查文档中是否正在使用的任何数据访问技术堆栈。 .NET/ADO/JDBC提供“取消”方法。 ODBC -SQLCANCEL。显然,基础RDBMS供应商数据访问驱动程序还必须实现该方法。

就取消的有用性而言,我倾向于对定期使用它的任何计划批评。在我看来,更好的协调和 /或设计倾向于减轻非管理性需求。

对RDBM的内部,交易和隔离方案的性质有很大的依赖。如果RDBMS使用乐观的并发模型(即基本上是免费的),则取消运行查询可能涉及潜在昂贵的回滚操作。在最坏的情况下,直到取消点之前,查询一个小时可能需要再回滚而已。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top