如果使用-w命令行参数设置了最大内存,并且如果触发了分配过多内存的错误查询,则KDB将以“-w abort”错误退出。
是否可以让KDB停止执行该查询而不是自杀。
至少是否有一个回调函数,kdb会在自杀之前调用它?
由于
答案 0 :(得分:3)
遗憾的是,没有回调处理此错误,也无法使用受保护的评估来捕获-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