Pergunta

Depois de ler um artigo sobre o tema de O' Reilly , eu queria perguntar Stack Overflow para os seus pensamentos sobre o assunto.

Foi útil?

Solução

Escrever localmente no disco, então inserção em lotes para o banco de dados periodicamente (por exemplo, pelo tempo de capotagem log). Faça isso em um processo separado, de baixa prioridade. Mais eficiente e mais robusto ...

(Certifique-se de que a sua tabela de log de banco de dados contém uma coluna para "qual máquina o evento log veio" pela maneira - muito útil)

Outras dicas

Eu diria que não, dado que uma bastante grande percentual de erros do servidor envolvem problemas de comunicação com bancos de dados. Se o banco de dados estavam em outra máquina, conectividade de rede seria uma outra fonte de erros que não poderiam estar registado.

Se eu fosse para registrar erros de servidor para um banco de dados, seria fundamental ter um registrador de backup que escreveu localmente (um log de eventos ou arquivo ou algo assim) no caso do banco de dados era inacessível.

Log para DB, se puder e não abrandar o seu DB:)

É a maneira maneira maneira mais rápida de encontrar qualquer coisa em DB, em seguida, em arquivos de log. Especialmente se você pensar no futuro que você vai precisar. Logging Em permitem que db é você consulta de log tabela como esta:

select * from logs
where log_name = 'wcf' and log_level = 'error'

, em seguida, depois de encontrar erro que você pode ver todo o caminho que levam a esse erro

select * from logs
where contextId = 'what you get from previous select' order by timestamp

Como você vai obter esta informação se você registrá-lo em arquivos de texto?

Editar: Como JonSkeet sugeriu esta resposta seria melhor se eu disse que se deve considerar fazer registro para db assíncrona. Então eu indicá-lo :) Eu só não precisar dele. Por exemplo como fazê-lo você pode verificar "ASP.NET rápida Ultra", de Richard Kiessig.

Se o banco de dados é banco de dados de produção, esta é uma idéia horrível. Você irá ter problemas com backups, replicação de recuperação. Como mais armazenamento para si DB, réplicas, se houver, e backups. Mais tempo para configurar e restaurar a replicação, mais tempo para verificar backups, mais tempo para se recuperar DB a partir de backups.

Provavelmente não é uma má idéia se você quiser os registros em um banco de dados, mas eu diria que não seguir o conselho do artigo, se você tem um monte de entradas de arquivo de log. A questão principal é que eu vi sistemas de arquivos têm problemas mantendo-se com registros provenientes de um local movimentado e muito menos um banco de dados. Se você realmente quer fazer isso eu olhava para carregar os arquivos de log no banco de dados depois que eles são escritos primeiro a disco.

Pense em um banco de dados configurado corretamente que utiliza RAM para leituras e gravações? Isto é muito mais rápido do que escrever para o disco e não iria apresentar o disco IO gargalo que você vê quando servindo um grande número de clientes que ocorre quando tópicos começar a trancar para baixo devido ao OS dizendo-lhes para esperar em tópicos atualmente em execução que estão usando todos IO disponíveis alças.

Eu não tenho qualquer referência para provar esses dados, embora a minha última aplicação está rolando com o registo de dados. Isto terá um mecanismo de proteção, como mencionado em uma dessas respostas. Se a conexão de banco de dados não pode ser criado, criar banco de dados local (h2 talvez?) E gravação para isso. Então, podemos ter uma verificação periódica de conectividade de banco de dados que irá re-estabelecer a conexão, despejar o banco de dados local, e empurrá-lo para o banco de dados remoto.

Isso poderia ser feito durante horas de folga, se você não tem um site H-A.

Em algum momento no futuro, espero a desenvolver indicadores para demonstrar o meu ponto.

Boa sorte!

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top