回答

收藏

SQL:中断查询

技术问答 技术问答 211 人阅读 | 0 人回复 | 2023-09-13

我在一个使用专有的非SQL
& }6 F. S) s# S. G$ v, `$ wDB的项目中工作,在该项目中查询可能会中断,并且在代码库中有很多地方使用了该功能并且非常有意义(例如,停止长时间运行的查询会被取消用户,或者发生较新的查询并使上一个查询过时等),我意识到我以前从未真正看到过这种“中断查询”,并认为它可以提出一个很好的SO问题(几个问题,但是它们都与完全相同的事物有关):
4 R0 P$ ^1 c1 B1 J3 \0 n, f- s( B5 F! m& O* {9 U2 k' l3 [
SQL查询可以中断吗?
  g8 ~; Z! Y* I+ D% y
; Z& o9 `6 t/ h0 Z3 ?& Z这是SQL标准的一部分吗?+ ~: u, `2 P. Z3 F
. U; }4 ?* b: X, s0 H
如果它不是SQL标准的一部分,哪个SQL DB允许查询被中断(最欢迎的例子)?
1 S9 i( \, b' {& `; E' @  \1 o; W# h4 h: u3 F" A7 `
中断数据库查询(是否使用SQL)是否很普遍?您会知道不再关心结果了吗?(在我研究过的代码库中,它肯定有助于减轻服务器的负载)6 I) j( N7 \6 ?+ [8 A* ]( r

/ y6 v1 s- k$ }, {6 R) n+ |
; A3 u& o' N( p" h  o
               
2 _1 c8 N  F! i. u) U解决方案:0 b8 L7 r9 y9 S: @+ S* s
                7 V( k8 d& G: p8 I3 j

/ x" M+ c" _* w8 W8 |! G
" M. H& c: \5 s( `% U                恕我直言,“打断”应改为“杀死”或“终止”。中断的概念可能会让人感到困惑,因为人们可能会假定它会在以后恢复查询。
4 I! b% r; Z( s- B& ~1 e; JSQL标准没有提供中断或终止正在运行的查询的方法,但是我知道的每个DBMS都实现了KILL命令或类似命令。例如,在MySQL中,用户可以使用SHOW
2 |# N( s: @( Z8 ^9 i$ q6 v. u0 h[FULL] PROCESSLIST来查看所有正在运行的查询(及其状态,查询ID等)。具有KILL特权的用户然后可以终止查询。2 M4 U. \* d3 C- ~1 k. L! n
大多数KILL的发生是因为查询运行时间过长或正在阻止其他查询的风险,例如。表缺少索引或磁盘已满。当您不关心结果时(例如,用户取消了站点导航),通常Web服务器本身将中止该过程,从而中止其自身的查询(无需手动或程序员交互)
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则