Просмотр активных сеансов Oracle

Обновлено: 02.07.2024

Сеансы, которые выполняются дольше в базе данных Oracle, можно просмотреть в представлении v$session_longops, предоставляемом Oracle. Для RAC обязательно используйте gv$session_longops вместо v$.

В этом блоге вы увидите, как найти длительные сеансы или длительные операции в базе данных Oracle.

Описание:

Любой оператор SQL, который выполняется более 6 абсолютных секунд (длительный порог выполнения), можно просмотреть в представлении v$session_longops. Чтобы отслеживать ход выполнения запроса, необходимо установить для параметра TIMED_STATISTICS значение true.

Это представление может собирать информацию о функциях резервного копирования и восстановления, сборе статистики и выполнении запросов, а для каждого выпуска Oracle добавляются дополнительные операции.

Определение ключа каждого столбца в v$session_longops

  • TARGET (таблица или представление, в котором выполняется операция)
  • SOFAR (единицы выполненной работы)
  • TOTALWORK (всего единиц работы)
  • ELAPSED_SECONDS (количество секунд, прошедших с начала операции)
  • TIME_REMAINING (оценочное оставшееся время в секундах)

Некоторые операторы SQL могут порождать несколько последовательных операций, таких как операция "Сканирование таблицы", за которой следует операция "Сортировка вывода", которая не будет видна до завершения первой операции.

Ниже приведены некоторые запросы для поиска длинных операций в базе данных Oracle.

Запросы для поиска длительных сеансов в базе данных:

Чтобы отслеживать длительные сеансы:

Запрос1:

2752 58501 Хэш-соединение 0 5250 164565 3.19

4814 54482 Хэш-соединение 0 196912 253487 77,68

Запрос2:

SQL> выберите SID,TARGET||OPNAME TARGET, TOTALWORK, SOFAR,TIME_REMAINING/60 Mins_Remaining,ELAPSED_SECONDS,SQL_ID из v$session_longops, где TIME_REMAINING>0 в порядке TIME_REMAINING;

SID TARGET TOTALWORK SOFAR MINS_REMAINING ELAPSED_SECONDS SQL_ID

4814 Хэш-соединение 253487 197067 238,716667 50029 268s54qfvwh1u

2752 Hash Join 164565 5475 1264 2610 bud5jwga8tty8

Чтобы узнать sql_id для вышеуказанного sid:

SQL> выберите sql_id из v$session, где sid=’&SID’;

Чтобы найти текст sql для sql_id:

SQL> выберите sql_fulltext из V$sql, где sql_id=’&sql_id’;

Чтобы найти событие ожидания запроса для sql_id:

SQL>выберите sql_id, состояние, last_call_et, событие, программу, osuser из v$session, где sql_id=’&sql_id’;

Чтобы отслеживать SQL:

Запрос1:

установить строки 1000 страниц 9999

формат sid столбца 9999

серийный номер столбца для 999999

формат статуса столбца a15

имя пользователя столбца в формате a10

столбец sql_text в формате a80

формат модуля колонки a30

col программа для a30

столбец SQL_EXEC_START для a20

TO_CHAR(sql_exec_start,’dd-mon-yyyy hh24:mi:ss’) AS sql_exec_start,

ОКРУГЛ(прошедшее_время/1000000) КАК «Прошло (с)»,

ОКРУГЛ(cpu_time /1000000) КАК «ЦП (ы)»,

FROM gv$sql_monitor, где status=’EXECUTING’ и модуль не похож на ‘%emagent%’

ЗАКАЗ ПО sql_exec_start desc

Запрос2:

установить строки 1000 страниц 9999

col СООБЩЕНИЕ для a35

выберите SID, MESSAGE, ELAPSED_SECONDS, TIME_REMAINING, (SOFAR/nvl(nullif(TOTALWORK,0),1))*100 pct,to_char(START_TIME,'DD-MON-YY HH24:MI') Start_tim,to_char( SQL_EXEC_START,'DD-MON-YY HH24:MI') EXEC_TIM,

to_char(sysdate,'HH24:MI') sysdt , sql_id из v$session_longops в порядке ELAPSED_SECONDS desc;

Итог: будьте осторожны, когда пытаетесь отслеживать операции DML (UPDATE или DELETE) в таблице, подвергающейся FullTableScan, это не будет точно отражено в V$SESSION_LONGOPS.

Работал в области технологии баз данных для устранения проблем, возникающих в повседневной деятельности в Oracle, Sql Server, MySQL и т. д.

Информация о сеансе в оракуле

Вы можете получить информацию о сеансе и получить подробную информацию о сеансе. например, Сколько сеансов активно? , Сколько сессий запущено из конкретного модуля?
сколько сессий неактивны? , сколько времени сессия находится в неактивном состоянии? а как убить неактивную сессию?

Отметить неактивный сеанс, который не используется в течение 24 часов или более.

--проверить время неактивного сеанса с минутами с момента последнего активного
выберите имя пользователя, ПРОПИСНАЯ(программа), logon_time,
пол(last_call_et / 60) "Минуты с момента активности", статус
из v$session
где ЗАГЛАВНЫЕ (программа) LIKE '%W3%'
порядок по last_call_et;

Столбец в представлении V$session:
LAST_CALL_ET: его значение в секундах означает, что не будет выполняться запрос за последние 24 часа, если значение больше 60*60*24.
Как в документации:
/>Значение последнего вызова:
СОСТОЯНИЕ АКТИВНО, тогда значение представляет собой прошедшее время в секундах с тех пор, как сеанс стал активным.
СТАТУС в настоящее время НЕАКТИВЕН, тогда значение представляет собой время в секундах, прошедшее с момента, когда сеанс стал неактивным.

Найти количество активных и неактивных сеансов:

выберите count(*) из v$session, где status = 'ACTIVE';
выберите count(*) из v$session, где status = 'INACTIVE';

Поиск состояния приложения, например, сколько сеансов и старых сеансов присутствует в оракуле

выберите to_char(logon_time,'DD/MM HH24:MI:SS') время входа из V$session
где ЗАГЛАВНЫЕ (программа) LIKE '%W3%'
порядок по времени входа в систему;

Сеансы присутствуют в базе данных Oracle в неактивном состоянии
Приложение создает много сеансов, и оно будет оставаться таким же, как и с базой данных в течение длительного времени, а также вызывает следующую ошибку:
Получение ошибки ORA-00018: превышено максимальное количество сеансов
Чтобы избежать такой ошибки, администратор базы данных должен подготовиться следующим образом:

<р>1. Проверьте лимит ресурсов для сеанса и процесса:

выберите * из v$resource_limit;

Находим причину подключения сессии. Для остановки можем изменить профиль idle_time с неограниченного на нужное нам значение.

<р>1. Проверьте, к какому профилю принадлежит пользователь.

выберите имя пользователя, профиль из dba_users, где имя пользователя = 'SCOTT';

<р>2. Проверьте значение Ideal_Timeout профиля:

выберите профиль, имя_ресурса, лимит из dba_profiles, где профиль='PROFILE1' и имя_ресурса ='IDLE_TIME'
ИЛИ
выберите * из dba_profiles, где профиль = 'ПО УМОЛЧАНИЮ';

Второй способ разорвать бездействующее соединение — это файл sqlnet.ora, SQLNET.ora — это файл, специфичный для клиента.

EXPIRE_TIMEOUT в sqlnet.ora

немедленно изменить сеанс уничтожения системы '1066,3292';

Мы все знаем, что время важно, и цель каждого администратора баз данных должна состоять в том, чтобы свести к минимуму время ответа конечного пользователя и ресурсы, используемые каждым запросом. В этом посте я попытаюсь объяснить время базы данных, прошедшее время и историю активных сеансов. Кто-то может найти эту информацию полезной для понимания основы настройки производительности. Oracle придумал определение времени базы данных (время БД) для измерения времени, затрачиваемого всеми активными сеансами в базе данных. Некоторые основные методы измерения производительности базы данных зависят от времени работы базы данных, например история активных сеансов (известная как ASH) или средняя активность сеанса (% активности), которую мы видим на диаграммах Enterprise Manager. Цель процесса настройки должна состоять в том, чтобы свести к минимуму время ЦП и время ожидания, чтобы можно было обрабатывать больше транзакций.

Определение времени БД:

Время работы с базой данных – это общее время, затрачиваемое процессами пользователя либо на активную работу, либо на активное ожидание вызова базы данных.

Другими словами, время БД = процессорное время + время ввода-вывода + время ожидания без простоя Событие ожидания ввода-вывода включено в события ожидания без простоя, но я выделил его как отдельную единицу только для пояснения. Из этого можно сделать вывод, что запросы к базе данных состоят из CPU (время обслуживания, выполнения какой-либо работы) и времени ожидания (сессия ожидает ресурсов). События ожидания в Oracle сгруппированы в классы событий ожидания, всего существует 13 классов событий ожидания (административный, приложение, кластер, фиксация, параллелизм, конфигурация, бездействие, сеть, другое, очередь, планировщик, системный ввод-вывод, пользовательский ввод/вывод). О).

Понимание времени работы с базой данных также включает в себя две основные важные части, которые нам необходимо понять в первую очередь: «Активный сеанс» и «Средний активный сеанс (% активности)».

Активный сеанс = сеанс, работающий в данный момент (тратящий время) на вызов базы данных. (сеансы со статусом = ACTIVE в представлении v$session). Средняя активность одного сеанса = отношение активного времени к общему времени настенных часов (прошедшее время).

Итак, если у меня есть один сеанс, работающий в течение 2 минут (120 секунд), и из этих 2 минут только 45 секунд тратятся на вызовы базы данных, "% активности" для сеанса будет 45/120 = 0,375 или в процентов 0,375 * 100 = 37,5 % времени БД.

Это то, что мы видим в диаграмме Top Sessions на странице Top Activity.


Время работы базы данных в Oracle собирается с момента запуска экземпляра в виде совокупной статистики, которую можно найти в представлении словаря v$SYSSTAT.

Существуют также различные метрики, которые рассчитываются на основе совокупной статистики, такие как коэффициент времени ожидания базы данных, время процессора базы данных, время базы данных в секунду/вызов пользователя и т. д. Эти метрики хранятся в нескольких представлениях словаря (v$sysmetric, v$sysmetric_summary, v$sysmetric_history, dba_hist_metric_summary).

Для времени базы данных существует несколько показателей, одним из которых является время базы данных в секунду, которое хранится в представлении словаря V$SYSMETRIC.

Есть 2 записи для двух разных групп из-за коротких и больших интервалов продолжительности.

Длинная продолжительность системных показателей (group_id= 2): интервал 60 секунд Краткая продолжительность системных показателей (group_id = 3): интервал 15 секунд

V$SYSMETRIC_SUMMARY (с соответствующим параметром DBA_HIST_SYSMETRIC_SUMMARY для моментальных снимков на диске) содержит метрику длительного действия (с интервалом в 1 час), такую ​​как среднее, минимальное, максимальное значение.

V$SYSMETRIC_HISTORY (с соответствующим DBA_HIST_SYSMETRIC_SUMMARY на моментальных снимках дисков) содержит краткосрочные и долгосрочные метрики.

Время базы данных и прошедшее время

Не путайте время базы данных с прошедшим временем, это разные измерения времени. На следующем рисунке вы можете увидеть основную разницу между временем базы данных и прошедшим временем. Помните, что время БД != Прошедшее время


Активность сеанса начинается где-то на 13-й секунде с момента его существования, выполняет какую-то работу где-то до 20-й секунды и продолжается где-то на 26-й секунде и так далее…

Весь период времени от существования сеанса до его окончания мы называем истекшим временем или временем настенных часов. Это не меняется независимо от количества активных сеансов. Напротив, время базы данных (время БД) — это те синие кубы, в которых Oracle собирает информацию об активности сеанса (время обслуживания — статистика ЦП или статистика событий ожидания).

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


В базе данных 3 сеанса. На 15-й секунде мы видим, что активны только 2 сеанса. Далее на 35-й секунде мы видим, что 3 сеанса активно выполняют какую-то деятельность. Для всех сеансов существует только одно измерение прошедшего времени (время настенных часов). Из определения средней активности одного сеанса мы можем сделать вывод, что средняя активность нескольких сеансов представляет собой сумму средней активности каждого сеанса. Если мы сложим кубы/сеансы один над другим, упорядоченные вертикально по классу события ожидания, мы получим что-то вроде диаграммы в EM.

Я провел несколько сеансов с простым анонимным блоком, чтобы имитировать загрузку ЦП, чтобы заполнить диаграмму средних активных сеансов в EM. Вот так график выглядел через некоторое время.


Первый сеанс я начал примерно в 09:05, а позже между 09:10 и 09:15. Я начал второй сеанс (выполняя тот же код, что и сеанс 1 для загрузки ЦП), и среднее количество активных сеансов подскочило до 2 (то же самое). как ядра процессора). Через несколько минут (после 09:25) я начал еще одну третью сессию, чтобы сгенерировать ввод-вывод (синий класс событий ожидания в верхней части диаграммы). Если среднее количество активных сеансов превышает лимит ядер ЦП, это означает, что некоторые сеансы будут испытывать ожидание ЦП (ожидание ЦП).

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

Из этой диаграммы видно, что, например. в 09:30 есть 3 сеанса, и большая часть времени уходит на работу процессора, а некоторое время уходит на ввод-вывод (см. вверху диаграммы).

Время работы с базой данных и среднее количество активных сеансов

История активных сеансов (ASH) – это метод, используемый Oracle для выборки активных сеансов каждую секунду в циклическом буфере в SGA. Мы можем думать об ASH как об истории времени базы данных. Поскольку ASH напрямую связан с активными сеансами, мы можем легко извлечь время базы данных из ASH, поскольку ASH COUNT(*) = время DB.

Формула для среднего количества активных сеансов будет следующей: время БД / прошедшее время = среднее количество активных сеансов

Данные для активных сеансов доступны из представления словаря V$ACTIVE_SESSION_HISTORY. Поскольку данные находятся в памяти (SGA) в циклическом буфере, если у вас очень загруженная система, очень возможно, что эти данные будут перезаписаны. Кроме того, существует таблица SYS DBA_HIST_ACTIVE_SESS_HISTORY, в которой на диске хранится только 1 из 10 образцов, так что после перезапуска экземпляра у нас все еще есть данные ASH на диске. Если мы хотим извлечь время базы данных из DBA_HIST_ACTIVE_SESS_HISTORY, это будет ASH COUNT(*) * 10 = время БД.

На диаграмме среднего активного сеанса (предыдущее изображение) если мы хотим рассчитать среднее количество активных сеансов между 09:05 и 09:30, нам просто нужно немного посчитать. Разделите время базы данных на прошедшее время для заданного периода 25 минут (1500 секунд).

Время БД = 3144 Истекшее время = 25 минут = (25 * 60) = 1500 секунд

Среднее количество активных сеансов: 3144 / 1500 = 2,096

Я добавил фильтр для типа сеанса FOREGROUND, поскольку ASH также собирает информацию для фоновых процессов.

Одна из лучших возможностей ASH заключается в том, что данные объединяются в разные измерения, что дает нам множество возможностей.Например, мы можем найти верхнюю активность sql_id, упорядоченную по потреблению времени БД:

Далее мы можем исследовать sql_id из v$sql.

Чтобы найти идентификаторы сеансов, которые выполняли sql с большим временем БД, мы можем использовать следующее.

После того, как все сеансы, которые потребляли ресурсы ЦП, были завершены, на диаграмме среднего количества активных сеансов появилась значительная разница.


Комментарии
Вы можете комментировать через Twitter.

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

Часто администраторам баз данных необходимо просмотреть сведения о сеансе для анализа. Подробная информация включает sql_id, статистику, блокировку, события ожидания. Здесь я даю запрос для получения сведений о сеансе в базе данных оракула, как получить текст sql из sid в оракуле и другие запросы, которые помогут в устранении неполадок

Оглавление

Запрос для получения сведений о сеансе в оракуле

как получить текст sql из sid в оракуле


Запрос для поиска истории ожидания для определенного SID

Чтобы узнать события ожидания для этого сеанса

Чтобы найти старые недавние образцы


Как проверить историю SQL-запросов сеанса

Запрос для проверки использования ЦП сеансом

Запрос для проверки всей статистики сеанса

Запрос, чтобы узнать, какой sid выполняет полное сканирование таблицы


Поиск исторических планов в AWR с помощью SQLID


Запрос для отображения переменной связывания для заданного SQLID.

Как проверить, актуальна ли статистика для объектов, задействованных в SQL-запросе

как найти sql-запрос, используя sql_id в оракуле

как проверить неактивную сессию в оракуле

как проверить активный сеанс в оракуле

как проверить количество соединений в оракуле

Надеюсь, вам понравятся эти запросы

изменить сеанс уничтожения системы: мы можем завершить сеанс оракула, используя сеанс изменения системы уничтожения в базе данных Oracle. Сеансы помечаются как уничтоженные, если они не были уничтожены немедленно
собственная привилегия сеанса уничтожения оракула: база данных оракула не дает прямого ответа на oracle убивает собственную привилегию сеанса, но это может быть достигнуто с помощью процедуры
История активных сеансов: ознакомьтесь с историей активных сеансов, как она настроена, как найти узкое место в производительности с помощью ASH, создание отчетов ASH, запросы ASH< br />Проверка работоспособности базы данных Oracle: ознакомьтесь с важной проверкой работоспособности базы данных Oracle для устранения неполадок, необычного поведения в базе данных оракула
Сценарии для проверки блокировок в базе данных оракула: сценарии для проверки блокировок в базе данных оракула, разблокировки таблицы оракула, поиска сеанса удерживая блокировки таблицы оракула, проверьте блокировку пакета
Как проверить временное табличное пространство в Oracle: проверьте Как проверить временное табличное пространство в Oracle, Как изменить размер временного файла, как удалить временный файл, Как проверить k временное использование сеансом
как получить определение таблицы в оракуле: узнайте, как получить определение таблицы в оракуле, оракул показать определение индекса, получить ddl материализованного представления в оракуле, получить запрос представления в оракуле< /p>

Рекомендуемые курсы

Ниже приведены некоторые рекомендуемые курсы, которые вы можете приобрести, если хотите сделать шаг вперед

Ниже приведены ссылки на некоторые курсы


Oracle DBA 11g/12c — Администрирование баз данных для младших администраторов баз данных: Этот курс подходит для людей, которые начинают работать в качестве младших администраторов баз данных или стремятся стать администраторами баз данных Oracle. Это обеспечит хорошее понимание задач резервного копирования и восстановления, а также общих задач администрирования.
База данных Oracle: администрирование Oracle 12C R2 RAC: этот курс охватывает установку и администрирование Oracle RAC. Хороший курс для администраторов баз данных Oracle, которые хотят повысить свои навыки работы с Oracle RAC
Oracle Data Guard: Администрирование базы данных для Oracle 12C R2: Этот курс охватывает установку и администрирование Oracle Dataguard. Хороший курс для администратора баз данных Oracle, который хочет улучшить свои навыки работы с Oracle Dataguard

Читайте также: