Отправить точную оценку времени для пользователя при запросе и экспорте отчета - PullRequest
0 голосов
/ 04 февраля 2019

У меня есть требование экспортировать отчет в файл Excel.Отчет будет содержать огромное количество строк (100K или даже 280K строк).Необходимо отправить электронное письмо пользователю с предполагаемым временем для запроса базы данных, получения данных и экспорта их в файл Excel, чтобы узнать, как долго он / она будет ждать, пока он / она не получит электронное письмо со ссылкой для скачивания.,Я сделал следующее:

  1. Выполните запрос с запрошенными фильтрами в базе данных (используя Oracle.DataAccess.Client), но с Count(*), чтобы получить общее количество строк, которые должны быть сгенерированы.
  2. Умножьте это числос константой (я получаю константу, используя класс System.Diagnostics.Stopwatch для измерения истекшего времени в худшем случае, чтобы извлечь х количество строк)

Я знаю, что этот подход не практичен, потому что в этомслучае мне придется выполнить один и тот же запрос дважды для каждого отчета.Есть ли лучший подход для достижения этого без необходимости выполнять один и тот же запрос дважды?

1 Ответ

0 голосов
/ 04 февраля 2019

Это, вероятно, не на 100% точно.Если вы выполняете один и тот же запрос каждый раз (с измененными параметрами), вы можете посмотреть, сколько времени прошло для sql в представлении V $ sqlarea.Чтобы найти запрос, выполните что-то вроде:

select sql_text, sql_id from v$sqlarea where sql_text like '%foo%;

(замените foo уникальным набором текста из запроса).

Получив значение sql_id, вы можете получить среднее значение по истечениивремя (в миллисекундах) sql:

select  (ELAPSED_TIME/executions)/1000 from v$sqlarea
where sql_id = '5bmcms41p86gf'

замените '5bmcms41p86gf' на sql_id, который вы получили из предыдущего запроса.Обратите внимание, что записи в v $ sqlarea могут быть удалены через некоторое время.

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