Estou usando db.setProfilingLevel(1, 1000)
para definir o nível de perfil para cada banco de dados. Vejo que o nível pode ser definido para cada banco de dados, mas slowms
é um estado global. Existe alguma maneira de definir esse valor para cada banco de dados individual?
Se eu não puder defini-lo para cada banco de dados individual, por que existe um método que db.setProfilingLevel(level, slowms)
aceita o segundo parâmetro como slowms
. Parece que esse parâmetro é para valor global em vez de valor do banco de dados. O que é confuso é que esse método é específico para definir um único nível de perfil de banco de dados, mas por alguns motivos ele também define slowms na configuração global.
setProfilingLevel realmente afeta duas coisas. O primeiro parâmetro (nível) informa quando o sistema grava na coleção de perfil (0-nunca, 1-somente quando mais lento que slowms ou 2-sempre). O segundo parâmetro (slowms) afeta sempre a saída do syslog de TODOS os bancos de dados. Portanto, com db.setProfilingLevel(0,-1), nada é gravado na coleção de perfis, mas TODAS as consultas (de todos os bancos de dados) são gravadas em mongod.log
De acordo com a documentação do MongoDB de
MongoDB High Availability
&@Afshin Mehrabani
MongoDB BOL aquiPara habilitar a criação de perfil para um MongoDB, você pode usar a seguinte função:
Onde
level
- Refere-se ao nível de detalhamento do perfilslowms
- Isso é opcional. É usado para definir o limite de operação lenta em milissegundos.O comando a seguir é uma amostra da emissão da função de processamento no shell interativo do mongo:
portanto, o comando proceding habilita a criação de perfil para a instância do MongoDB com nível 1 e limite de 1.000 milissegundos.
A saída deste comando no shell do mongo é a seguinte
O mecanismo MongoDB oferece suporte a três níveis principais de provisionamento. A tabela a seguir mostra os três níveis diferentes de criação de perfil:
Ao usar o primeiro nível de criação de perfil, o criador de perfil do banco de dados não salva nada relacionado às operações. Com level
1
, o criador de perfil registra operações lentas.Existe um parâmetro de configuração que define o limite de operações lentas. Usando o
slowOpThresholdMs
parâmetro de configuração, você pode definir um limite para operações lentas. Em seguida, o criador de perfil registra operações com tempo de execução mais lento do que o valor definido.Para definir o
slowOpThresholdMs
parâmetro, você pode usar um arquivo de configuração para definir o valor ou pode passar o valor para o segundo parâmetro dasetProfilingLevel
função.Ao usar level
2
of profiling , o criador de perfil registra todas as operações sem considerar nenhuma condição.Para entender melhor a estrutura dessa função, considere o seguinte comando:
após emitir o comando anterior, o criador de perfil do banco de dados registra todas as operações com tempo de execução superior a 1.000 milissegundos.
Nota: O uso do criador de perfil afeta negativamente o desempenho porque o criador de perfil registra operações redundantes de uma parte ou de todo o banco de dados. É recomendável mantê-lo desligado, a menos que você precise diagnosticar o banco de dados.
Depois de configurar o mecanismo do criador de perfil, você pode consultar logs do banco de dados usando a
system.profile
coleção.De acordo com o blog do MongoDB Jira aqui A constante slowms não é por banco de dados, mas por todo o processo.
Observe como slowms foi para 2 no banco de dados de teste... Isso não é bom.
Como aqui foi fechado, não será corrigido, mas se a sintaxe de db.setProfilingLevel for alterada para afetar apenas um único banco de dados, será necessário ter uma sintaxe para definir globalmente o que é slowms (sem ter que reiniciar o mongod com nova configuração de slowms).
Observe que essa alteração proposta é contrária a todas as instruções fornecidas por nosso suporte, que atualmente são consideradas como tendo efeito global.
Recomendamos que consideremos a sintaxe de quebra não inversa, como
db.setProfilingLevel(0,1,false)
onde o último parâmetro é "applyGlobally" e, por padrão, é true. (ou somente applyToCurrentDB e por padrão é false).Para mais sua referência aqui e aqui