Eu tenho um pedaço de código que executa inserções em tabelas altamente desnormalizadas. As tabelas têm um número de colunas variando de ~ 100 a 300+. Este é o SQL Server 2008 R2, em execução no Windows Server 2008.
Cada inserção consiste em inserir em várias tabelas sob a mesma transação. Algumas inserções são agrupadas em lotes pelo NHibernate, mas outras não, mas estão todas na mesma transação.
Quando executo inserções, digamos 500 vezes, chamando repetidamente um pedaço de código que executa a inserção, recebo uma média de ~ 360 ms.
O estranho é que, quando executo o código de teste simultaneamente usando 4 processos (o mesmo exe é executado a partir de 4 prompts de comando diferentes no windows server 2008), o desempenho da inserção por chamada fica muito melhor. Vejo rajadas que chegam a 90 ms (quase X4 mais rápido). Estou medindo o tempo de inserção do código.
Como os quatro processos não sabem nada um do outro, suponho que isso tenha algo a ver com o SQL Server, mas não faço a menor idéia do porquê. Gostaria de saber por que isso está acontecendo e se há alguma configuração que me permita obter o mesmo desempenho quando as inserções não são tão frequentes.
Sugestões sobre os métodos de monitoramento do SQL Server para entender o que está acontecendo no nível do banco de dados são igualmente bem-vindas.
fonte
alguns servidores / cpus / os lembram os padrões. como cache.
Como você faz a mesma coisa quatro vezes, tenho certeza de que há maneiras de cortar custos. O que eu acho que é a primeira maneira de fazê-lo, ele pensa nisso como um processo longo (exemplo1), mas da segunda maneira is vê o código reutilizado e o executa como cache (exemplo2) ou pode ser o primeiro processo a ser grande demais para caber tudo no (exemplo ram 3).
example1: 0111110000110111110000111011111000011110111110000
exemplo2: 0111110000 | 11 | 0111110000 | 111 | 0111110000 | 1111 | 0111110000
exemplo3: 0111110000011111000001111100000111110000 exemplo3: loop: 0111110000
Eu sei que o servidor ubuntu faz isso com repetidas consultas mysql. Posso salvá-los no cache, embora realmente a única diferença no tempo seja 10-40mms, mas isso se soma. Quando eu estava na escola, houve aulas que mostraram que você precisa fazer com que os programas (perl / php) usem esse cache para ser mais rápido.
Mas, pode depender do programa, em que idioma é, em que é compilado ou como foi programado.
fonte