Lionel Mena
03/23/2023, 10:17 AM2023-03-22T17:06:40+00:00 2023-03-22T17:06:40,593 WARN [sql[a97928d9-bd83-4478-840f-9d6332a33916]] org.apache.druid.server.QueryLifecycle - Exception while processing queryId [553272ba-21ec-4655-bf43-704133b9bcbb] (org.apache.druid.query.ResourceLimitExceededException: Subquery generated results beyond maximum[100000])
2023-03-22T17:06:41+00:00 2023-03-22T17:06:41,409 WARN [sql[d8a66e60-4cee-4388-bfac-fa18edb370f5]] org.apache.druid.server.QueryLifecycle - Exception while processing queryId [6652a9f4-3980-4533-b861-7b0e37eccdc2] (org.apache.druid.query.ResourceLimitExceededException: Subquery generated results beyond maximum[100000])
2023-03-22T17:06:42+00:00 2023-03-22T17:06:42,919 WARN [sql[b344d453-54ed-4814-97f1-2711b9478c87]] org.apache.druid.server.QueryLifecycle - Exception while processing queryId [1167828c-f2fb-46e5-bdca-539e979214e3] (org.apache.druid.query.ResourceLimitExceededException: Subquery generated results beyond maximum[100000])
but then another cryptic error start appearing rigth afterwards
2023-03-22T17:11:35+00:00 2023-03-22T17:11:35,564 WARN [ForkJoinPool-1-worker-14] org.apache.druid.java.util.common.guava.ParallelMergeCombiningSequence - Failed to close result cursors
org.apache.druid.query.QueryTimeoutException: Query[c5df16ae-12f3-45aa-8fe9-c18bed6c9ef6] url[<http://172.42.0.173:8100/druid/v2/>] timed out.
at org.apache.druid.client.DirectDruidClient$1.checkQueryTimeout(DirectDruidClient.java:427) ~[druid-server-0.23.0.jar:0.23.0]
at org.apache.druid.client.DirectDruidClient$1.access$500(DirectDruidClient.java:173) ~[druid-server-0.23.0.jar:0.23.0]
at org.apache.druid.client.DirectDruidClient$1$2.hasMoreElements(DirectDruidClient.java:282) ~[druid-server-0.23.0.jar:0.23.0]
at java.io.SequenceInputStream.nextStream(SequenceInputStream.java:109) ~[?:1.8.0_275]
at java.io.SequenceInputStream.close(SequenceInputStream.java:232) ~[?:1.8.0_275]
at com.fasterxml.jackson.dataformat.smile.SmileParser._closeInput(SmileParser.java:309) ~[jackson-dataformat-smile-2.10.5.jar:2.10.5]
at com.fasterxml.jackson.dataformat.smile.SmileParserBase.close(SmileParserBase.java:384) ~[jackson-dataformat-smile-2.10.5.jar:2.10.5]
at org.apache.druid.client.JsonParserIterator.close(JsonParserIterator.java:138) ~[druid-server-0.23.0.jar:0.23.0]
at org.apache.druid.utils.CloseableUtils.closeAndWrapExceptions(CloseableUtils.java:139) ~[druid-core-0.23.0.jar:0.23.0]
at org.apache.druid.client.DirectDruidClient$3.cleanup(DirectDruidClient.java:515) ~[druid-server-0.23.0.jar:0.23.0]
at org.apache.druid.client.DirectDruidClient$3.cleanup(DirectDruidClient.java:498) ~[druid-server-0.23.0.jar:0.23.0]
at org.apache.druid.java.util.common.guava.BaseSequence$1.close(BaseSequence.java:136) ~[druid-core-0.23.0.jar:0.23.0]
at org.apache.druid.java.util.common.guava.ParallelMergeCombiningSequence$YielderBatchedResultsCursor.close(ParallelMergeCombiningSequence.java:1072) ~[druid-core-0.23.0.jar:0.23.0]
at org.apache.druid.java.util.common.io.Closer.close(Closer.java:182) ~[druid-core-0.23.0.jar:0.23.0]
at org.apache.druid.utils.CloseableUtils.closeAndSuppressExceptions(CloseableUtils.java:162) [druid-core-0.23.0.jar:0.23.0]
at org.apache.druid.java.util.common.guava.ParallelMergeCombiningSequence.closeAllCursors(ParallelMergeCombiningSequence.java:1385) [druid-core-0.23.0.jar:0.23.0]
at org.apache.druid.java.util.common.guava.ParallelMergeCombiningSequence.access$400(ParallelMergeCombiningSequence.java:63) [druid-core-0.23.0.jar:0.23.0]
at org.apache.druid.java.util.common.guava.ParallelMergeCombiningSequence$MergeCombineAction.compute(ParallelMergeCombiningSequence.java:666) [druid-core-0.23.0.jar:0.23.0]
at java.util.concurrent.RecursiveAction.exec(RecursiveAction.java:189) [?:1.8.0_275]
at java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:289) [?:1.8.0_275]
at java.util.concurrent.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:1056) [?:1.8.0_275]
at java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1692) [?:1.8.0_275]
at java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:175) [?:1.8.0_275]
Suppressed: org.apache.druid.query.QueryTimeoutException: Query[c5df16ae-12f3-45aa-8fe9-c18bed6c9ef6] url[<http://172.42.0.156:8100/druid/v2/>] timed out.
at org.apache.druid.client.DirectDruidClient$1.checkQueryTimeout(DirectDruidClient.java:427) ~[druid-server-0.23.0.jar:0.23.0]
at org.apache.druid.client.DirectDruidClient$1.access$500(DirectDruidClient.java:173) ~[druid-server-0.23.0.jar:0.23.0]
at org.apache.druid.client.DirectDruidClient$1$2.hasMoreElements(DirectDruidClient.java:282) ~[druid-server-0.23.0.jar:0.23.0]
at java.io.SequenceInputStream.nextStream(SequenceInputStream.java:109) ~[?:1.8.0_275]
at java.io.SequenceInputStream.close(SequenceInputStream.java:232) ~[?:1.8.0_275]
at com.fasterxml.jackson.dataformat.smile.SmileParser._closeInput(SmileParser.java:309) ~[jackson-dataformat-smile-2.10.5.jar:2.10.5]
at com.fasterxml.jackson.dataformat.smile.SmileParserBase.close(SmileParserBase.java:384) ~[jackson-dataformat-smile-2.10.5.jar:2.10.5]
at org.apache.druid.client.JsonParserIterator.close(JsonParserIterator.java:138) ~[druid-server-0.23.0.jar:0.23.0]
at org.apache.druid.utils.CloseableUtils.closeAndWrapExceptions(CloseableUtils.java:139) ~[druid-core-0.23.0.jar:0.23.0]
at org.apache.druid.client.DirectDruidClient$3.cleanup(DirectDruidClient.java:515) ~[druid-server-0.23.0.jar:0.23.0]
at org.apache.druid.client.DirectDruidClient$3.cleanup(DirectDruidClient.java:498) ~[druid-server-0.23.0.jar:0.23.0]
at org.apache.druid.java.util.common.guava.BaseSequence$1.close(BaseSequence.java:136) ~[druid-core-0.23.0.jar:0.23.0]
at org.apache.druid.java.util.common.guava.ParallelMergeCombiningSequence$YielderBatchedResultsCursor.close(ParallelMergeCombiningSequence.java:1072) ~[druid-core-0.23.0.jar:0.23.0]
at org.apache.druid.java.util.common.io.Closer.close(Closer.java:182) ~[druid-core-0.23.0.jar:0.23.0]
at org.apache.druid.utils.CloseableUtils.closeAndSuppressExceptions(CloseableUtils.java:162) [druid-core-0.23.0.jar:0.23.0]
at org.apache.druid.java.util.common.guava.ParallelMergeCombiningSequence.closeAllCursors(ParallelMergeCombiningSequence.java:1385) [druid-core-0.23.0.jar:0.23.0]
at org.apache.druid.java.util.common.guava.ParallelMergeCombiningSequence.access$400(ParallelMergeCombiningSequence.java:63) [druid-core-0.23.0.jar:0.23.0]
at org.apache.druid.java.util.common.guava.ParallelMergeCombiningSequence$MergeCombineAction.compute(ParallelMergeCombiningSequence.java:666) [druid-core-0.23.0.jar:0.23.0]
at java.util.concurrent.RecursiveAction.exec(RecursiveAction.java:189) [?:1.8.0_275]
at java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:289) [?:1.8.0_275]
at java.util.concurrent.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:1056) [?:1.8.0_275]
at java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1692) [?:1.8.0_275]
at java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:175) [?:1.8.0_275]
I'll also attached the configuration of the historicals and brokers. I'm running Druid v0.23.0
I think this is a backpressure issue but my knowdlege is really limited. What do you think is the root cause of this severe performance degradation? Let me know if you need any other logs.
ThanksVijay Narayanan
03/23/2023, 10:28 AMLionel Mena
03/23/2023, 10:38 AMLionel Mena
03/23/2023, 10:39 AMRenato Santos
03/23/2023, 10:40 AMException while processing queryId [553272ba-21ec-4655-bf43-704133b9bcbb] (org.apache.druid.query.ResourceLimitExceededException: Subquery generated results beyond maximum[100000])
You can change this number in the config, but if this is being hit, the queires need to be rearchitectedLionel Mena
03/23/2023, 10:41 AMRenato Santos
03/23/2023, 10:43 AMLionel Mena
03/23/2023, 10:48 AMrg.apache.druid.query.ResourceLimitExceededException: Subquery generated results beyond maximum[100000]) requires from reworking our queries but aside from this, what would explain the overall performance degradation? This limit is basically a guardrail to prevent from having performance issues.Renato Santos
03/23/2023, 11:26 AMRenato Santos
03/23/2023, 11:27 AMRenato Santos
03/23/2023, 11:28 AMdruid.server.http.defaultQueryTimeout=60000 I think it must be set both on and brokersRenato Santos
03/23/2023, 11:30 AMRenato Santos
03/23/2023, 11:32 AMVijay Narayanan
03/23/2023, 11:39 AMVijay Narayanan
03/23/2023, 11:40 AMVijay Narayanan
03/23/2023, 11:45 AMLionel Mena
03/23/2023, 11:48 AMLionel Mena
03/23/2023, 11:57 AMSELECT "t1"."timestamp", "t2"."Source", "t2"."ParentId", "t2"." "
FROM
(
SELECT TIME_FLOOR(__time, 'PT${period}') "timestamp", NodeId, ReceiveFromNodeId
FROM "sdk-${region}-realtime"
WHERE __time >= '${__from:date:iso}' AND __time < '${__to:date:iso}'
AND CustomerId = '${customerid}'
AND ChannelId LIKE '${channelid}'
AND NodeId = '${nodeid}'
AND ReceiveFromNodeId != ''
AND RepresentationId LIKE '${representationid}'
AND MaskedStreamUri LIKE '${maskedstreamuri}'
) AS "t1"
INNER JOIN
(
SELECT TIME_FLOOR(__time, 'PT${period}') as "timestamp", NodeId as "ParentId", Source, AVG(BufferHealth) / 1000.0 " "
FROM "sdk-${region}-realtime"
WHERE __time >= '${__from:date:iso}' AND __time < '${__to:date:iso}'
AND CustomerId = '${customerid}'
AND ChannelId LIKE '${channelid}'
AND RepresentationId LIKE '${representationid}'
AND MaskedStreamUri LIKE '${maskedstreamuri}'
GROUP BY 1, 2, 3
) AS "t2"
ON "t1"."timestamp" = "t2"."timestamp" AND "t1".ReceiveFromNodeId = "t2"."ParentId"Renato Santos
03/23/2023, 2:24 PMLionel Mena
03/23/2023, 2:40 PMRenato Santos
03/23/2023, 2:43 PMLionel Mena
03/23/2023, 2:57 PMVijay Narayanan
03/23/2023, 3:45 PMLionel Mena
03/23/2023, 3:53 PMRenato Santos
03/23/2023, 4:10 PMAND ( CAST(? AS int) = 0 OR col IN (:cols:))
and pass a 1 for ignore the IN condition (and use a fake value in the list, calcite will remove this expression entirely as it always will be false
but I wrote a custom sql placeholder where I mix in both ? and list of some values that will be replaced before sending to druidLionel Mena
03/23/2023, 5:02 PM-1 to disable the IN filter and we couldn't inject two values but it worked. Thanks @Renato Santos
AND (CAST('${channelid}' AS int) = -1 OR ChannelId IN ('${channelid}'))