Rubrica InterSystems FAQ
Globais temporárias armazenadas nas bases de dados IRISTEMP/CACHETEMP são usadas quando um processo não precisa guardar dados indefinidamente, mas requere a poderosa performance das globais. As bases de dados IRISTEMP/CACHETEMP não são jounralizadas, então usar globais temporárias não cria arquivos de journal.
O sistema usa as bases de dados IRISTEMP/CACHETEMP para armazenamento temporário e estão disponíveis para usuários para o mesmo objetivo.
Para mais informações sobre globais temporárias e a base de dados IRISTEMP, veja o documento a seguir:
Globais Temporárias e a Base de Dados IRISTEMP
As globais usadas como temporárias são:
1. Globais temporáriass de sistema (^IRIS.Temp*, ^%cspSession, ^CacheTemp*, ^mtemp*, etc.)
2. Globais temporárias mapeadas para IRISTEMP/CACHETEMP pelo usuário
3. Globais privadas por processo (^||name, ^|"^"|name, ^["^"]name, ^["^",""]name, etc. )
4. Tabela de GLOBAL TEMPORÁRIA
-> A definição da tabela é persistente (disponível para todos os processos) e os dados da tabela são guardados em globais privadas por processo (duram apenas pela duração do processo)
Os tamanhos de 1 e 2 podem ser checados usando a utilidade ^%GSIZE.
Directory name: c:\intersystems\iris\mgr\user\ => c:\intersystems\iris\mgr\iristemp\
// Especifique a pasta da base de dados iristemp
All Globals? No => yes // Sim para mostrar todas as globais: 34 itens selecionados
34 available globals
Show details?? No => No // Não para não mostrar informações detalhadas
Device:
Right margin: 80 =>
:
3,4 Globais privadas por processo podem ser vistas usando a utilidade ^GETPPGINFO.
Para mais informações sobre a utilidade ^GETPPGINFO, veja os documentos a seguir:
Sobre a utilidade ^GETPPGINFO [IRIS]
Sobre a utilidade ^GETPPGINFO
O exemplo que se segue lista as globais privadas por processo de todos os processos atuais:
set ^||flintstones(1)="Fred"
set ^||flintstones(2)="Wilma"
znspace "%SYS"
do ^GETPPGINFO("*")
Outro método é exibir os conteúdos de processos individuais que usam globais privadas por processo em grandes quantidades.
A seguir, uma amostra que exibe o número de blocos de globais privadas por processo que sejam maiores ou iguais a 20, de cada processo.
set ns=$namespace znspace "%SYS" // Somente incluídos os processos com mais blocos PPG que o número total de processos set st=##class(%SQL.Statement).%New() set status=st.%PrepareClassQuery("%SYS.ProcessQuery","AllFields") set rs=st.%Execute() while rs.%Next() { set pid=rs.%Get("Pid") // ID do processo set cnt=rs.%Get("PrivateGlobalBlockCount") // Número total de blocos PPG // Quando o número de blocos PPG por processo é 0 ou mais, os conteúdos são exibidos (o exemplo a seguir mostra 20 ou mais blocos). if cnt > 20 { set rs2=##class(%ResultSet).%New("%SYS.ProcessQuery:PPG") // "N" Não retorna subscritos de um PPG, somente o nome da raiz // "B" Returna o número de blocos usados pelo PPG (precisa da opção "N") do rs2.Execute("*",pid,"NB") for { quit:'rs2.Next() write cnt_" PID:"_pid_", PPG name "_rs2.GetData(1)_" is using "_rs2.GetData(3)_" disc blocks",! } } } znspace ns