Все темы ожидают какого-то барьерного состояния. - PullRequest
0 голосов
/ 01 мая 2018

У меня есть такой класс.

class EmployeeTask implements Runnable {   
    public void run(){ 
        PayDAO  payDAO = new payDAO(session);
        String newSalary= payDAO.getSalary(empid);
        String newTitle= payDAO.getTitle(empid);

        EmployeeDAO employeeDAO = new EmployeeDAO(session);
        List<Employee> employees = employeeDAO.getEmployees();
          employees.parallelStream().foreach(employee-> employeeDAO.add(newSalary, newTitle,employee));
    }
}
  1. Когда я запускаю приведенный выше код для одного потока, он завершает работу с БД за 1 секунду и возвращает.
  2. Когда я запускаю его с помощью parallelStream (), он отправит 8 запросов, все 8 потоков будут ждать восемь секунд и затем возвращаться. Это означает, что сервер выполняет запросы последовательно, а не параллельно.

Я проверил журналы пристани для яхт

Вставка Theread-1…

Вставка Theread-2…

...

Вставка Theread-8…

Через восемь секунд, то есть 1 секунда на запрос

Вставка Theread-1… <= обновление 1 </p>

Theread-2 Insert… <= update 1 </p>

...

Theread-8 Insert… <= обновление 1 </p>

то же самое продолжается.

  1. Это ясно говорит о том, что все потоки блокируются на одном отдельном ресурсе, либо источник данных из моего клиента java имеет только одно соединение, поэтому все восемь потоков блокируются, либо сервер выполняет запросы один за другим.

Я проверил MaxPooledConnections - дает 20, MaxPooledConnections PerNode - дает 5 значений по умолчанию.

Я думаю, что с сервером Vertica DB все в порядке, возможно, у клиента нет пула DatasourceConnection, Как включить пул DatasourceConnection на стороне Java. Какие-нибудь примеры кода?

В настоящее время я использую mybatis ORM со следующим источником данных

<environments default=“XX”>
    <environment id=“XX”>
        <transactionManager type=“JDBC”/>
        <dataSource type="POOLED">
            <property name="driver" value="com.vertica.jdbc.Driver"/>
            <property name="url" value="jdbc:vertica://host:port/schema”/>
            <property name="username" value=“userName”/>
            <property name="password" value=“password”/>
           <property name="poolMaximumActiveConnections" value=“50”/>
            <property name="poolMaximumIdleConnections" value=“10”/>
        </dataSource>
    </environment>
</environments>

Каково условие барьера, которого ожидают все потоки, я предполагаю соединение с источником данных. Любая помощь приветствуется

Спасибо.

...