Тестирование производительности базы данных с использованием Java-клиента - PullRequest
1 голос
/ 17 мая 2019

У меня есть школьный проект, который требует от меня некоторых клиентов Java, которые подключаются к разным базам данных SQL и одной NoSQL (MongoDB).
Для базы данных SQL я использовал JPA, чтобы облегчить себе задачу.

Вот как я вставляю в базу данных, используя JPA.

EntityManager entityManager= ENTITY_MANAGER_FACTORY.createEntityManager();
EntityTransaction et = entityManager.getTransaction();
et.begin();
int index_flush = 1;
for(Iterator<Book> it = bookList.iterator(); it.hasNext();) {
    book = it.next();
    entityManager.persist(book);

    if((flush_index % 20) == 0) {
        entityManager.flush();
        entityManager.clear();
    }
    flush_index++;
}           
et.commit();

Мой вопрос: где я могу измерить время выполнения?
Что я знаю, так это то, что entityManager.persist и entityManager.flush на самом деле не связываются с Базой данных. Изменения в БД можно увидеть только при вызове фиксации транзакции объекта.
Мне нужно только измерить время, необходимое для выполнения этого коммита?

Заранее спасибо! Если мне не понятно мое объяснение, пожалуйста, скажите мне.

Ответы [ 2 ]

0 голосов
/ 17 мая 2019

Это может быть потому, что они находятся в другой транзакции. 1 Транзакция, инициированная JPA 2 Транзакция, инициированная с помощью разработчика / инструмента SQL для проверки строк в базе данных.

Вы можете попробовать установить уровень изоляции для чтения незафиксированными в sql developer / tool для просмотра незафиксированных изменений, которые сброшены, но не зафиксированы.

Хотя установка уровня транзакции для чтения незафиксированной на уровне приложения не рекомендуется.

0 голосов
/ 17 мая 2019

Flush Выполняет операторы SQL.Таким образом, вы можете измерить время, которое занимает очистка.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...