Using GO SDK, by default a thread will flush all current stored impressions in its cache every 30 seconds. However, there is a limit to the impression queued in the SDK's cache. If the queue is full, event
IMPRESSIONS_FULL is fired and the SDK will attempt to post the impressions to clear the cache. When the process tries to flush all impressions, the follow error is logged
Error flushing storage queue couldn't send message to task SubmitImpressions
The SDK is trying to send impressions at a higher rate than the posting thread is evicting them.
To resolve the issue, follow these steps:
- Increase the size of the impressions queue by updating the following parameter `Advanced.ImpressionsQueueSize`. Default is 10k, increasing it to 20k might improve results.
- Increase the bulk size of the impressions post to split servers by updating the following parameter `Advanced.ImpressionsBulkSize`. Default is 5k. 10k would be a logical next step.
- Decrease the period at which the SDK sends impressions to the split servers by adjusting the following parameter `TaskPeriods.ImpressionSync`. The default is 30 seconds which is on the low end if you're sending a huge number of impressions. Something along the lines of 5-10 seconds should help.
Note: Please keep in mind that these changes will slightly increase the memory usage of the SDK as well as the network traffic.