Обновить
1
0
Шумевв Сергей Дмитриевич@Sshumeev

Оптимизация производительности СУБД Oracle

Отправить сообщение

WITH waiting_pids AS (
SELECT DISTINCT pid
FROM pg_catalog.pg_locks
WHERE NOT granted
AND pid IS NOT NULL
),
blocking_candidates AS (
SELECT DISTINCT
blocking_locks.pid AS blocking_pid,
blocked_locks.pid AS blocked_pid
FROM pg_catalog.pg_locks blocked_locks
JOIN pg_catalog.pg_locks blocking_locks
ON blocking_locks.locktype = blocked_locks.locktype
AND blocking_locks.database IS NOT DISTINCT FROM blocked_locks.database
AND blocking_locks.relation IS NOT DISTINCT FROM blocked_locks.relation
AND blocking_locks.page IS NOT DISTINCT FROM blocked_locks.page
AND blocking_locks.tuple IS NOT DISTINCT FROM blocked_locks.tuple
AND blocking_locks.virtualxid IS NOT DISTINCT FROM blocked_locks.virtualxid
AND blocking_locks.transactionid IS NOT DISTINCT FROM blocked_locks.transactionid
AND blocking_locks.classid IS NOT DISTINCT FROM blocked_locks.classid
AND blocking_locks.objid IS NOT DISTINCT FROM blocked_locks.objid
AND blocking_locks.objsubid IS NOT DISTINCT FROM blocked_locks.objsubid
AND blocking_locks.pid != blocked_locks.pid
WHERE NOT blocked_locks.granted
AND blocking_locks.granted
),
eligible_blockers AS (
SELECT DISTINCT bc.blocking_pid
FROM blocking_candidates bc
LEFT JOIN waiting_pids wp ON bc.blocking_pid = wp.pid
WHERE wp.pid IS NULL -- блокирующая сессия НЕ ждёт
),
metrics AS (
SELECT 'blocking' AS metric, COUNT() AS value FROM eligible_blockers UNION ALL SELECT 'waiting', COUNT() FROM waiting_pids
)
SELECT
DATE_TRUNC('second', NOW()) AT TIME ZONE 'Europe/Moscow' AS sample_time,
MAX(CASE WHEN metric = 'blocking' THEN value ELSE 0 END) AS blocking_sessions,
MAX(CASE WHEN metric = 'waiting' THEN value ELSE 0 END) AS waiting_sessions
FROM metrics;

Нужно точно определить blocking Если это сессии получившие блокировку и удерживающие ее, тогда запрос неверный Проверка: 1-я сессия BEGIN;update lock_test set name = '2222' where ID = 1; без COMMIT 2 -я сессия BEGIN;update lock_test set name = '3333' where ID = 1;COMMIT; 3-я сессия BEGIN;update lock_test set name = '4444' where ID = 1;COMMIT; Запрос возвращает 2,2 т.е. учитывает 2-ю сессию как blocking и как blocked Может определение blocking отличается от приведенного выше ? Если нужно пришлю запрос для этого определения

Добрый день! Каким запросом и как часто собираются

  • синяя — количество сессий, ожидающих ресурсы;

  • красная — количество сессий, удерживающих ресурсы ?

Добрый день! В чем измеряется производительность системы ? CPI это что ?

Добрый день!
Нужно четко сформулировать назначение продукта и ограничения по его использованию.
И от этого плясать.
Пока APEX(на мой взгляд) это пример от Oracle как нужно\не нужно писать интернет приложения c использованием БД.
Еще было бы интересно узнать про внутреннюю реализацию. Мониторю с точки зрения производительности одно приложение на APEX так там большая часть ожидания сети Не совсем понятно для чего вообще нужна мощь транзакционной БД.
Похоже на гланды будем рвать через… Или на БД Oracle можно сделать все, даже грабли
Но это мое личное впечатление :)

Виктор добрый день! На какой версии выполнялись эти упражнения?

Информация

В рейтинге
Не участвует
Откуда
Королев, Москва и Московская обл., Россия
Дата рождения
Зарегистрирован
Активность