Vladimir Ozerov commented on IGNITE-5991:

After consulting with H2 maintainers [1], the following solution was found: 
1) Add {{lazy}} hint to API
2) Apply it only to cases when there is only one map query
3) Set lazy execution flag on mapper on per-query basis through 
4) Create new thread pool - query engine obtains locks which must be released 
in the same thread
5) Handle {{GridQueryNextPageResponse.allRows == -1}} properly on client's 
side, currently it leads to extra {{GridQueryNextPageRequest}}

[1] https://github.com/h2database/h2database/issues/588

> SQL: lazy ResultSet for map query
> ---------------------------------
>                 Key: IGNITE-5991
>                 URL: https://issues.apache.org/jira/browse/IGNITE-5991
>             Project: Ignite
>          Issue Type: Improvement
>          Components: sql
>    Affects Versions: 2.1
>            Reporter: Vladimir Ozerov
>            Assignee: Vladimir Ozerov
>            Priority: Critical
>             Fix For: 2.2
> Currently we move the whole {{ResultSet}} to memory when executing SQL query 
> on mapper. If result set is large enough, this could easily bring server down 
> due to high GC pressure or even OOME. 
> To avoid that we should stream H2's {{ResultSet}} to our own consumer, which 
> will construct a page and send it to the client  When a page is sent, 
> consumer will block current thread until "next page request" is received. 
> This approach has disadvantage - query thread will be blocked. However, 
> implementation should be fairly easy and will allow us to avoid OOMEs on 
> server. In future we will improve it to minimize blocking (or even avoid it 
> completely).

This message was sent by Atlassian JIRA

Reply via email to