Pivotal Knowledge Base

关注

介绍sqlfire中新的取消查询功能

适用于

SQLFire 1.1.2.3 到 1.1.2.x

目的

本文介绍了在SQLFire 1.1.2.3中新增加的取消查询功能。

解决方案

为了更好的管理消耗资源较多的查询,从1.1.2.3版本起SQLfire包括了两种新的取消查询功能。

使用sqlfire.query-timeout

通过在系统级别设定SQLFire属性"sqlfire.query-timeout"控制最大查询时间。该设定以秒为单位(默认值为0,代表无限制)。

您可以通过在SQLFire服务器上的sqlfire.properties文件中来设定过期时间(time-out):

sqlfire.query-timeout=60

使用 system procedure

您可以通过使用system procedure "SYS.CANCEL_STATEMENT(STATEMENT_UUID)"来取消执行时间过长的查询。

下面的查询会占用较多CPU资源并需要极长的时间来执行:

Select eqp_id, cntxt_id from CONTEXT_HISTORY where eqp_id||cast(cntxt_id as char(100)) in ( select eqp_id||cast(t.cntxt_id as char(100)) from RECEIVER_LOG t where 1=1);

通过session id来识别该查询:

sqlf> select id, session_id, current_statement_uuid, current_statement, current_statement_status from sys.sessions;
ID|SESSION_ID |CURRENT_STATEMENT_UUID|CURRENT_STATEMENT |CURRENT_STATEMENT_STATUS
-------------------------------------------------------------------------------
pnq-rdiyewar(7194)<v2>:37098|2 |8589934609-8589934687-1 |SYSLH0001 select eqp_id, cntxt_id from CONTEXT_HISTORY where eqp_id||cast(cntxt_id as char(100)) in (select eqp_id||c& |EXECUTING STATEMENT

通过使用 CURRENT_STATEMENT_UUID(该声明的唯一标示)来取消查询声明:

sqlf> call sys.cancel_statement('8589934609-8589934687-1');
Statement executed.

正在执行的查询会立刻失败并返回SQLSTATE "XCL56"

sqlf> select eqp_id, cntxt_id from CONTEXT_HISTORY where eqp_id||cast(cntxt_id as char(100)) in (select eqp_id||cast(t.cntxt_id as char(100)) from RECEIVER_LOG t where 1=1 );
ERROR XCL56: SQLSTATE=XCL56,SEVERITY=-1: (Server=pnq-rdiyewar[1529],Thread[DRDAConnThread_15,5,sqlfire.daemons]) The statement has been cancelled due to a user request. ...
java.sql.SQLException: SQLSTATE=XCL56,SEVERITY=-1: (Server=pnq-rdiyewar[1529],Thread[DRDAConnThread_15,5,sqlfire.daemons]) The statement has been cancelled due to a user request. ...

评论

由 Zendesk 提供技术支持