Usando esta consulta:
SELECT
A.CACHE_BUFFER_TOTAL,
B.CACHE_BUFFER_USED,
A.CACHE_BUFFER_TOTAL - B.CACHE_BUFFER_USED AS CACHE_BUFFER_FREE
FROM
(SELECT BYTES / 1024 / 1024 AS CACHE_BUFFER_TOTAL FROM V$SGAINFO WHERE NAME = 'Buffer Cache Size') A,
(SELECT (SELECT COUNT(*) FROM V$BH) * (SELECT BLOCK_SIZE FROM V$BUFFER_POOL) / 1024 / 1024 AS CACHE_BUFFER_USED FROM DUAL) B;
... posso determinar o tamanho total do cache do buffer e o total utilizado; entretanto, gostaria de saber para cada usuário quanto as consultas do usuário estão ocupando o cache do buffer.
Existe uma maneira simples de conseguir isso no Oracle 21C?
Você tem uma pergunta interessante. No entanto, de acordo com meu entendimento do Oracle e dos vários caches que existem no SGA e no PGA, não há meios reais de determinar o uso do cache de cada usuário individual, porque isso anularia o conceito de cache (eficiente).
A ideia geral por trás do cache (ou Arquitetura de Memória da Oracle) é armazenar informações na RAM para permitir a recuperação e reutilização eficiente de dados, instruções, planos de consulta, etc. para cada usuário que consulta uma instância Oracle.
A base para gerenciamento de memória em uma instância Oracle está documentada da seguinte forma:
( ênfase minha)
Isso é dividido em:
( ênfase minha)
Referência: Arquitetura de Memória (Oracle | Docs)
Há uma imagem muito boa na documentação acima, que mostra os diferentes componentes da Arquitetura de Memória da Oracle:
Cache de buffer do banco de dados
O cache do buffer do banco de dados conterá dados que já foram recuperados do disco e que o Oracle Database Memory Manager considera dignos de serem mantidos na memória para recuperação futura de qualquer pessoa que consulte a mesma instância Oracle . Não faria sentido armazenar esses dados para cada usuário individual, pois ocuparia muito espaço na RAM.
Portanto, você não poderá determinar a qual usuário os dados pertencem.
Área SQL Compartilhada
O mesmo também é válido para a Área SQL Compartilhada. Por que armazenar múltiplos da mesma consulta, se é mais eficiente armazenar apenas uma versão da (mesma) consulta e depois executar a consulta para qualquer pessoa que queira realizar a mesma consulta?
Área SQL Privada
Agora, isso pode parecer promissor como uma área para resumir o cache de cada usuário. No entanto, as informações armazenadas nesta área não parecem muito interessantes:
( ênfase minha)
Respondendo sua pergunta
Devido ao conceito e à natureza do cache de buffer, não será possível determinar as consultas do usuário que ocupam o cache de buffer.
De certa forma, tudo o que um usuário executa é "desnormalizado" para que todos possam se beneficiar de uma recuperação eficiente de dados/instruções/planos de execução de consultas.
Espero que esta informação forneça um bom ponto de partida.
A propósito, alguns dos SGBDs mais conhecidos gerenciarão a memória de acordo com princípios semelhantes. (Microsoft SQL Server, MySQL, PostgreSQL, ....) Nem todos terão a mesma Arquitetura de Memória, mas sim semelhantes o suficiente para você entender como a memória é gerenciada em um DMBS (Database Management System).
Boa sorte.