none
Freqüência X Núcleo - Sqlserver 2k8 RRS feed

  • Pergunta

  • Bom dia srs.,

    Sem levar em consideração o cache nesse momento e o modelo do processador, para um servidor SQLSERVER 2k8 r2, em relação ao processador, qual teria um desempenho melhor:

    a) Máquina virtual com 4 processadores virtuais cada um com 2 núcleos de 1ghz ( logicamente 8 unidades de processamento com 1ghz)

    b) Máquina física com 1 processador com 4 núcleos de 2,33ghz (logicamente 4 unidades de processamento com 2,33ghz)

    Em tese para o paralelismo quanto mais núcleos melhor, mas se a velocidade do processador for compensada com menos núcleos, isso não daria teoricamente a mesma coisa???


    MCP: Designing and Implementing Databases with Microsoft® SQL Server™ 2000 MCP: Installing, Configuring, and Administering Microsoft® SQL Server™ 2000 MCP: Managing and Maintaining a Microsoft Windows Server 2003 Environment MCTS: Microsoft SQL Server 2005 - Implementation and Maintenance MCTS: Microsoft SQL Server 2008 - Implementation and Maintenance MCTS: Configuring Microsoft Windows Vista Wireshark Certified Network Analyst

    sexta-feira, 8 de fevereiro de 2013 14:08

Respostas

  • Caro Diogo, boa tarde.

    Fazendo uma conta simples, temos:

    8 núcleos virtuais a 1GHz = 8 GHz
    4 núcleos físicos a 2,33GHz = 9,32GHz

    Apenas olhando por cima percebemos que utilizar a máquina física seria mais interessante mas vamos olhar além. Para todos os processos, teremos threads e para estas threads, temos o tempo que ficarão dentro do processador executando suas instruções, chamado de Quantum. O Windows opera em modo preemptivo, ou seja, as threads entram no processador utilizando FIFO. Já o SQL Server trabalha em modo colaborativo, fazendo uma jogada com as threads, permitindo um aproveitamento melhor da CPU, trazendo de volta no começo da fila threads que o Windows colocaria no final da fila. Sem levar em consideração a camada de virtualização dos processadores, temos 4 filas a 2,33GHz e 8 filas a 1GHz cada. Os Schedulers do SQL gerenciam essas threads e são vinculados a CPU portanto seriam 4 Schedulers na física e 8 na virtual, o que aumentaria a eficiência. Temos também a TempDB que, em ambos os casos, deverá ter seu arquivo de dados dividido pela quantidade de núcleos. Além disso, tem a questão que você citou do paralelismo mas cuidado, o paralelismo só entra em ação obedecendo a configuração de Cost Threshold for Paralellism. Seu valor padrão é 5, ou seja, caso o execution plan perceba que a query não demorará mais do que 5 segundos, não haverá paralelismo. A intenção desta configuração é justamente evitar que pequenas requisições sejam quebradas, executadas e então remontadas, afinal, este trabalho de quebrar e juntar tem seu custo de CPU. Portanto, requisições pequenas (geralmente maioria) serão executadas a 1GHz na virtual e 2,33GHz. Já para relatórios (se esta for a finalidade do servidor) aí sim teríamos um ganho por utilizarmos 8 núcleos ao invés de 4, mas a 1GHz/s ao invés de 2,33GHz. Veja como é difícil nesta hora dar uma sugestão sem conhecer o ambiente e a aplicação.

    Além da questão do processamento, não esqueça de levar em consideração a quantidade de IO/s disponível. Em máquinas físicas, geralmente você utiliza discos físicos que podem variar de acordo com o tipo (SATA/SCSI/SAS/SSD) e em máquinas virtuais, geralmente se monta a solução em cima de uma storage. Independente da solução, verifique qual opção oferece mais IO/s exclusivamente para o SQL.

    Observe seu servidor atual, quantos núcleos possui e qual a utilização do processador atualmente. Se eu tivesse pouca utilização da CPU, inclusive para a demanda dos próximos 2 anos, focaria mais em ter memória RAM e o máximo de IO/s.

    Não se esqueça de escolher um bom RAID para Transaction Log, TempDB, dados e também de espaço para armazenar os backups e fazer rebuild das maiores tabelas.

    Se a resposta foi útil, por favor, classifique.

    Abraços,



    Luiz Mercante
    MCITP SQL 2008 | MCTS SQL 2008 | MCTS Windows Apps | MCTS Windows Network | MCP 2003
    sqldicas@outlook.com
    http://sqldicas.com.br


    Se a resposta foi útil de alguma forma, classifique.


    quarta-feira, 13 de fevereiro de 2013 23:03
    Moderador

Todas as Respostas

  • Diogo,

    Sinceramente é uma das questões mais complicadas de se responder de bate pronto.

    Normalmente temos que começar a tentar encontrar uma possível resposta com base no seu ambiente, algo que você já destacou um pouco.

     Bom, as suas máquinas virtuais vão estar rodando através de uma ferramenta de virtualização acoplada ao Sistema Operacional, algo do tipo Hyper – V ou VMWare?

    Ou então estará utilizando virtualização diretamente no Hardware como por exemplo XenServer?


    Pedro Antonio Galvão Junior [MVP | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | SorBR.Net | Professor Universitário | MSIT.com]

    quarta-feira, 13 de fevereiro de 2013 16:47
    Moderador
  • Caro Diogo, boa tarde.

    Fazendo uma conta simples, temos:

    8 núcleos virtuais a 1GHz = 8 GHz
    4 núcleos físicos a 2,33GHz = 9,32GHz

    Apenas olhando por cima percebemos que utilizar a máquina física seria mais interessante mas vamos olhar além. Para todos os processos, teremos threads e para estas threads, temos o tempo que ficarão dentro do processador executando suas instruções, chamado de Quantum. O Windows opera em modo preemptivo, ou seja, as threads entram no processador utilizando FIFO. Já o SQL Server trabalha em modo colaborativo, fazendo uma jogada com as threads, permitindo um aproveitamento melhor da CPU, trazendo de volta no começo da fila threads que o Windows colocaria no final da fila. Sem levar em consideração a camada de virtualização dos processadores, temos 4 filas a 2,33GHz e 8 filas a 1GHz cada. Os Schedulers do SQL gerenciam essas threads e são vinculados a CPU portanto seriam 4 Schedulers na física e 8 na virtual, o que aumentaria a eficiência. Temos também a TempDB que, em ambos os casos, deverá ter seu arquivo de dados dividido pela quantidade de núcleos. Além disso, tem a questão que você citou do paralelismo mas cuidado, o paralelismo só entra em ação obedecendo a configuração de Cost Threshold for Paralellism. Seu valor padrão é 5, ou seja, caso o execution plan perceba que a query não demorará mais do que 5 segundos, não haverá paralelismo. A intenção desta configuração é justamente evitar que pequenas requisições sejam quebradas, executadas e então remontadas, afinal, este trabalho de quebrar e juntar tem seu custo de CPU. Portanto, requisições pequenas (geralmente maioria) serão executadas a 1GHz na virtual e 2,33GHz. Já para relatórios (se esta for a finalidade do servidor) aí sim teríamos um ganho por utilizarmos 8 núcleos ao invés de 4, mas a 1GHz/s ao invés de 2,33GHz. Veja como é difícil nesta hora dar uma sugestão sem conhecer o ambiente e a aplicação.

    Além da questão do processamento, não esqueça de levar em consideração a quantidade de IO/s disponível. Em máquinas físicas, geralmente você utiliza discos físicos que podem variar de acordo com o tipo (SATA/SCSI/SAS/SSD) e em máquinas virtuais, geralmente se monta a solução em cima de uma storage. Independente da solução, verifique qual opção oferece mais IO/s exclusivamente para o SQL.

    Observe seu servidor atual, quantos núcleos possui e qual a utilização do processador atualmente. Se eu tivesse pouca utilização da CPU, inclusive para a demanda dos próximos 2 anos, focaria mais em ter memória RAM e o máximo de IO/s.

    Não se esqueça de escolher um bom RAID para Transaction Log, TempDB, dados e também de espaço para armazenar os backups e fazer rebuild das maiores tabelas.

    Se a resposta foi útil, por favor, classifique.

    Abraços,



    Luiz Mercante
    MCITP SQL 2008 | MCTS SQL 2008 | MCTS Windows Apps | MCTS Windows Network | MCP 2003
    sqldicas@outlook.com
    http://sqldicas.com.br


    Se a resposta foi útil de alguma forma, classifique.


    quarta-feira, 13 de fevereiro de 2013 23:03
    Moderador
  • Oi Luiz,

    Ótima explicação. Eu estou precisando migrar meu ambiente para a AMAZON EC2. Estou utilizando um modelo de instancia de alta performance de IO e IOPS superiores a de minha máquina física. O que acontece é que quando em uma determinada atividade entre minha aplicação e banco a CPU se comporta de maneira diferente, na minha máquina física a cpu não passa de 20% do tempo de utilização enquanto na máquina virtual ela fica entre 40 e 45%. Mas utilizando sua explicação de fato eu utilizo a Cost Threshold for Paralellism = 5, desta forma seria possível justificar esta diferença de tempo de CPU.

    Abs!!


    MCP: Designing and Implementing Databases with Microsoft® SQL Server™ 2000 MCP: Installing, Configuring, and Administering Microsoft® SQL Server™ 2000 MCP: Managing and Maintaining a Microsoft Windows Server 2003 Environment MCTS: Microsoft SQL Server 2005 - Implementation and Maintenance MCTS: Microsoft SQL Server 2008 - Implementation and Maintenance MCTS: Configuring Microsoft Windows Vista Wireshark Certified Network Analyst

    quinta-feira, 14 de fevereiro de 2013 13:24