No SQL Server, quando a função sys.fn_get_audit_file()
retorna informações de arquivos de auditoria, ela inclui column additional_information
. De acordo com a documentação dessa coluna , ela contém "um nível de pilha TSQL" no formato XML.
Exemplo:
SELECT * FROM sys.fn_get_audit_file('\\myAuditPath\myAuditFile.sqlaudit', DEFAULT, DEFAULT)
retorna valores de informação adicional como este:
<tsql_stack><frame nest_level = '1' database_name = 'myDBa' schema_name = 'mySchema' object_name = 'thisObject'/></tsql_stack>
<tsql_stack><frame nest_level = '1' database_name = 'myDBa' schema_name = 'mySchema' object_name = 'someObject'/></tsql_stack>
<tsql_stack><frame nest_level = '3' database_name = 'myDBb' schema_name = 'mySchema' object_name = 'thatObject'/></tsql_stack>
Minha pergunta : Qual é o nest_level de um quadro?
A documentação diz apenas que "Frame nest_level indica o nível de aninhamento atual do quadro."
Esse quadro nest_level contém valores 1,2,3,4,...
Não parece ser o nest_level retornado por sys.dm_exec_requests
. (O nest_level dessa visualização inclui os valores -1 e 0, que não parecem ser relevantes para o quadro nest_level acima.)
E não parece estar relacionado às funções da janela. (A pesquisa pela palavra "frame" me levou temporariamente a esse caminho.) O nest_level acima é visto mesmo em linhas de auditoria que não possuem função de janela.
Você pode me indicar alguma informação sobre esse quadro nest_level ou informações sobre pilhas TSQL?
Ao pesquisar "tsql_stack" (definitivamente com sublinhado), encontrei alguns resultados sobre pilhas TSQL. Mas ainda estou procurando detalhes sobre isso, nest_level
se alguém puder ajudar. Obrigado novamente.
O nível do ninho é de fato o nível da pilha de chamadas . Em outras palavras, representa quantas
EXEC
instruções foram aninhadas. Um "quadro" significa uma única chamada para um procedimento (tecnicamente também inclui seus parâmetros). Os quadros juntos formam a pilha de chamadas e se desenrolam na ordem LIFO conforme as chamadas aos procedimentos terminam.Este é o mesmo valor que
sys.dm_exec_requests
mostra. Só que você consegue0
se nenhum procedimento estiver em execução, ou seja, você está fazendo um lote ad-hoc. Não tenho certeza do que-1
representa, mas parece estar presente apenas nas solicitações do sistema.Uma maneira interessante de mostrar isso é usar um procedimento recursivo que exibe o nível de aninhamento atual.
O que isso faz é mostrar o nível atual e, em seguida, diminuir o parâmetro até
0
e recorrer a si mesmo. Ele chamará a si mesmo o número de vezes que o valor de@maxnest
.Executar a consulta simples, fora de um procedimento, nos leva
0
Mas recorrer com um valor de
2
nos leva:banco de dados<> violino