I'm working on a Spring Batch Application where it is fetching data from the Oracle database. It contains around 20L of data. I implemented AsynchronousTaskExecutor with a concurrency limit of 20, the throttle limit is 10. For data source it is - spring.datasource.max-active=50
Following is the Thread Graph (JProfiler) for my application. It shows more threads in a blocked and waiting state. I want to understand why it's like this. Also, how can I improve the performance of the batch?