防止 KDB+ 数据库因中止错误而死亡
Prevent KDB+ database from dying due to abort error
如果使用 -w 命令行参数设置了最大内存,并且如果触发了分配过多内存的错误查询,KDB 将退出并显示“-w abort”错误。
是否可以让 KDB 停止执行该查询而不是自行终止。
至少有一个kdb在杀死自己之前会调用的回调函数吗?
谢谢
不幸的是,没有用于处理此错误的回调,也无法使用受保护的评估来捕获 -w abort
。 http://code.kx.com/q/ref/errors/#trap
/process 1 (setup workspace/callbacks)
>q -w 1000 -p 4000 -e 1
q)tab:([]sym:30000000?`3;size:30000000?10f;time:30000000?.z.t)
q).z.pg:{0N!(`pg;x);@[value;x;(::)]}
q).z.exit:{'stop}
q).z.pc:{'stop}
/process 2 (issue sync request)
>q
q)(`::4000)"select from tab"
'close
/process 1 (output)
q)(`pg;"select from tab")
-w abort
相反,您可以尝试防止此错误。一种方法是定义权限并在 执行查询之前 验证每个用户请求。
详情请看以下白皮书:
http://www.firstderivatives.com/downloads/q_for_gods_july_2013.pdf
如果使用 -w 命令行参数设置了最大内存,并且如果触发了分配过多内存的错误查询,KDB 将退出并显示“-w abort”错误。
是否可以让 KDB 停止执行该查询而不是自行终止。
至少有一个kdb在杀死自己之前会调用的回调函数吗?
谢谢
不幸的是,没有用于处理此错误的回调,也无法使用受保护的评估来捕获 -w abort
。 http://code.kx.com/q/ref/errors/#trap
/process 1 (setup workspace/callbacks)
>q -w 1000 -p 4000 -e 1
q)tab:([]sym:30000000?`3;size:30000000?10f;time:30000000?.z.t)
q).z.pg:{0N!(`pg;x);@[value;x;(::)]}
q).z.exit:{'stop}
q).z.pc:{'stop}
/process 2 (issue sync request)
>q
q)(`::4000)"select from tab"
'close
/process 1 (output)
q)(`pg;"select from tab")
-w abort
相反,您可以尝试防止此错误。一种方法是定义权限并在 执行查询之前 验证每个用户请求。
详情请看以下白皮书:
http://www.firstderivatives.com/downloads/q_for_gods_july_2013.pdf