Как узнать количество обращений к базе данных по приложению - PullRequest
3 голосов
/ 31 января 2011

Я программист Java, и я хочу знать, сколько вызовов / отключений базы данных выполняется моим приложением.Мы используем Oracle в качестве нашей реляционной базы данных.
С oracle я узнал о способе изменения статистики сеанса и генерации файлов трассировки.Ниже приведены запросы для запуска:

ALTER SESSION SET TIMED_STATISTICS = TRUE;

 ALTER SESSION SET SQL_TRACE = TRUE;

После того, как файлы трассировки сгенерированы, их можно прочитать с помощью утилиты TKProf.Но этот подход не может быть использован, потому что:

  1. мое приложение использует Hibernate и Spring Framework и, следовательно, приложение не имеет дескриптора для сеанса.
  2. Даже если мы получим файлы трассировки, мне нужно знать, запускается ли набор запросов за один раз (в пакете) или по отдельности.Я не уверен, может ли вывод TkProf помочь понять это.

У кого-нибудь есть предложения получше?

Ответы [ 3 ]

3 голосов
/ 31 января 2011

В TkProf вы можете в основном указывать количество циклов как количество «вызовов» (хотя существуют исключения, так что требуется меньше циклов, например, разбор / выполнение / выборка выбора одной строки, теоретически, возможно в одной поездке туда и обратно, так называемая функция «точная выборка» оракула).Однако в качестве оценки цифры tkprof достаточно хороши.

Если трассировать события ожидания, вы должны непосредственно видеть события ожидания «SQL * Net from / to client» в необработанной трассировке, но я думаю, что tkprof непоказать его (не уверен, попробуйте).

Другой способ - просмотреть статистику сеанса:

select value
  from v$mystat ms, v$statname sn
 where ms.value > 0
   and ms.statistic#=sn.statistic#
   and sn.name IN ('SQL*Net roundtrips to/from client')

Однако, если вы сделаете это в своем приложении, вы замедлитесьваше приложение и цифры, которые вы получите, будут включать в себя круговые поездки для этого выбора.

A написал несколько статей об оптимизации в обе стороны:

2 голосов
/ 01 февраля 2011

Во-первых, используйте для этого теста выделенную базу данных (или таймфрейм), чтобы его нельзя было легко спутать с другими сеансами.

Во-вторых, посмотрите на представление v $ session, чтобы определить сеансы для спящего режима. ИМЯ ПОЛЬЗОВАТЕЛЯ, OSUSER, TERMINAL, MACHINE должно сделать это очевидным. Столбцы SID и SERIAL # однозначно идентифицируют сеанс. На самом деле SID уникален в любое время. SERIAL # требуется только в том случае, если у вас есть сеансы, отключающие и повторно подключающие.

В-третьих, используйте v $ sessstat (отфильтрованный по SID, SERIAL # из v $ session) и v $ statname (как показано Маркусом), чтобы вывести количество циклов. Вы можете сделать снимок перед тестом, запустить тест, затем снова посмотреть значения и определить проделанную работу.

Тем не менее, я не уверен, что это особенно полезная мера сама по себе. TKPROF будет более подробным и гораздо более сфокусированным на времени (что является более полезной мерой).

1 голос
/ 12 февраля 2011

Лучше всего было бы получить специальный файл трассировки 10046 уровня 12 текущего сеанса. Вы найдете там всю информацию в деталях. Это означает, что вы можете видеть, сколько выборок приложение выполнит за выполненную команду и связанные события ожидания / истекшее время. Результаты могут быть проанализированы с помощью инструментов от Oracle, таких как TKPROF, Oracle Trace Analyzer или сторонних инструментов, таких как [QueryAdvisor] [1].

Кстати, вы можете попросить своего администратора баз данных определить триггер базы данных, автоматически активирующий Oracle filetrace после входа в систему. Поэтому захват файла не должен быть проблемой.

R.U.

[1]: http://www.queryadvisor.com/"TKPROF Анализ файла трассировки Oracle с помощью QueryAdvisor "

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