none
Alinhamento de discos GPT RRS feed

  • Pergunta

  • Olá pessoal!

    Estou com uma duvida e gostaria de dividir com vocês pois acredito que outras pessoas já passaram por esta situação...

    Possuo dois arrays em RAID 5 cada um com 6 discos SAS 600 10K e preciso extrair o maximo de I/O performance (SQL Server) destes arrays...

    Portanto (como manda o figurino) para extrair tal performance preciso fazer um alinhamento de discos, certo?

    O caso é que o array é maior que 2TB. Portanto particionei o disco usando GPT invés de MBR.

    E ai que começou meus problemas... (duvidas) ????

    Pesquisei mas não achei uma resposta de forma clara uma solução pro meu caso...

    Minha distribuição de discos esta assim:

       

            

        

    4 discos em RAID 5 - Sistema Operacional Windows 2008 R2 (Disk 0)

    6 discos em RAID 5 - DATABASE 1 (Disk 1)

    6 discos em RAID 5 - DATABASE 2 (Disk 2)

       

            

        

    Vejam os testes e os ajustes que fiz:

    • Formatei ambos os discos (arrays) usando o diskpart com os parametros:

                      align=1024  e   format fs=ntfs unit=64K label="DATABASE" nowait

    • Na controladora eu configurei o Stripe Size com o valor de 64Kb, portanto o Full stripe size ficou com 320Kb. (5 * 64kb)

    • Mas pra minha surpresa quando eu conferi os dados dos discos me deparei com os seguintes valores:

       

            

        

    O cluster size de 64K funcionou:

       

            

        

    C:\>fsutil fsinfo ntfsinfo d:
    NTFS Volume Serial Number :       0x7a5e50035e4fb723
    Version :                         3.1
    Number Sectors :                  0x000000015d48cfff
    Total Clusters :                  0x0000000002ba919f
    Free Clusters  :                  0x00000000026c1e4a
    Total Reserved :                  0x0000000000000000
    Bytes Per Sector  :               512
    Bytes Per Physical Sector :       <Not Supported>
    Bytes Per Cluster :               65536
    Bytes Per FileRecord Segment    : 1024
    Clusters Per FileRecord Segment : 0
    Mft Valid Data Length :           0x0000000000010000
    Mft Start Lcn  :                  0x000000000000c000
    Mft2 Start Lcn :                  0x0000000000000001
    Mft Zone Start :                  0x000000000000c000
    Mft Zone End   :                  0x000000000000cca0
    RM Identifier:        38EA3E8F-C54B-11E1-8157-002655EA7C1A

    C:\>fsutil fsinfo ntfsinfo e:
    NTFS Volume Serial Number :       0x0ee2873ee2872953
    Version :                         3.1
    Number Sectors :                  0x000000015d48cfff
    Total Clusters :                  0x0000000002ba919f
    Free Clusters  :                  0x0000000002b24495
    Total Reserved :                  0x0000000000000000
    Bytes Per Sector  :               512
    Bytes Per Physical Sector :       <Not Supported>
    Bytes Per Cluster :               65536
    Bytes Per FileRecord Segment    : 1024
    Clusters Per FileRecord Segment : 0
    Mft Valid Data Length :           0x0000000000010000
    Mft Start Lcn  :                  0x000000000000c000
    Mft2 Start Lcn :                  0x0000000000000001
    Mft Zone Start :                  0x000000000000c000
    Mft Zone End   :                  0x000000000000cca0
    RM Identifier:        38EA3E93-C54B-11E1-8157-002655EA7C1A

       

            

        

    Mas o partition OFFSET ficou com 129Mb:

       

            

        

    C:\>wmic partition get BlockSize, StartingOffset, Name, Index
    BlockSize  Index  Name                   StartingOffset
    512        0      Disk #0, Partition #0  1048576
    512        0      Disk #1, Partition #0  135266304
    512        0      Disk #2, Partition #0  135266304


    C:\>diskpart

    Microsoft DiskPart version 6.1.7601
    Copyright (C) 1999-2008 Microsoft Corporation.
    On computer: XXXXXX

    DISKPART> list disk

      Disk ###  Status         Size     Free     Dyn  Gpt
      --------  -------------  -------  -------  ---  ---
      Disk 0    Online         1676 GB      0 B
      Disk 1    Online         2794 GB      0 B        *
      Disk 2    Online         2794 GB      0 B        *

    DISKPART> select disk 1

    Disk 1 is now the selected disk.

    DISKPART> list partition

      Partition ###  Type              Size     Offset
      -------------  ----------------  -------  -------
      Partition 1    Reserved           128 MB    17 KB
      Partition 2    Primary           2794 GB   129 MB


    DISKPART> select disk 2

    Disk 2 is now the selected disk.

    DISKPART> list partition

      Partition ###  Type              Size     Offset
      -------------  ----------------  -------  -------
      Partition 1    Reserved           128 MB    17 KB
      Partition 2    Primary           2794 GB   129 MB

        

        

    Minha pergunta agora é: Meus discos estão ou não estão alinhados da melhor maneira para o SQL Server 2008 R2 usar? (Um com DataFiles e outro com LogFiles)

    135266304 é divisível por 64k essa é a questão! Entao ele vai começar em um cluster inteiro

    Como a pagina do SQL é de 8K, penso que do jeito que ficou para cada cluster ele vai salvar 8 paginas de SLQ e a cada cluster ele vai fazer um I/O no disco.

    135266304/(1024*64) = 2064.00

            

        

    Links de pesquisa:

    1. Disk Partition Alignment Best Practices for SQL Server:http://msdn.microsoft.com/en-us/library/dd758814%28SQL.100%29.aspx
    2. Windows and GPT FAQ:http://msdn.microsoft.com/en-us/windows/hardware/gg463525.aspx
    3. How Basic Disks and Volumes Work:http://technet.microsoft.com/en-us/library/cc739412.aspx#w2k3tr_basic_how_fgkm
    4. Basic and Dynamic Disks:http://msdn.microsoft.com/en-us/library/aa363785(VS.85).aspx
    5. Using GPT Drives:http://msdn.microsoft.com/en-au/windows/hardware/gg463524
    6. A Description of the Diskpart Command-Line Utility:http://support.microsoft.com/kb/300415
    7. Disk performance may be slower than expected when you use multiple disks in Windows Server 2003, in Windows XP, and in Windows 2000:http://support.microsoft.com/kb/929491/en-us
    8. Importancia de alinhar os discos para obter melhor performance com o SQL Server: http://blogs.technet.com/b/comunidadesql/archive/2011/06/04/qual-a-importancia-de-alinhar-os-discos-para-obter-melhor-performance-com-o-sql-server.aspx?CommentPosted=true#commentmessage









    quarta-feira, 4 de julho de 2012 12:49

Respostas

  • Cruzei com esta thread por acaso, então respondendo para quem um dia olhar para ela...

    GPT pois o total é maior que 2TB, suportado por MBR.

    E sim Thiago, sua estrutura de disco está alinhada. Curioso foi a partição reservada, quando trabalhamos com OEMs isso é normal, agora diretamente em uma formatação me surpreendeu, então tirando os 129 MB "inutilizados", a configuração está perfeita e alinhada.

    []s

    Luciano Moreira
    SQL Server MVP
    luciano.moreira@srnimbus.com.br



    luti

    sexta-feira, 28 de setembro de 2012 07:54

Todas as Respostas

  • Olá Thiago,



    Primeiro, acredito que de RAID1 (mirror) seja a configuração de array mais indicada para o SO , pois com essa configuração você tem redundância já que os dados são gravados por igual nos 2 discos do array, além do fator custo pois você necessitaria de apenas 2 discos, ao invés de 4. Além disso, você pode colocar os binários do SQL Server no mesmo disco de sistema, pois eles não demandam muito uso, apenas no momento da inicialização do SQL Server.

    Em relação aos databases e logs, o melhor esquema de RAID a ser usado vai depender do uso dos bancos, se os databases tiverem muitos inserts e updates, então o melhor é você utilizar RAID 1+0. Esse esquema necessita de ao menos 4 discos, sendo criados 2 arrays espelhados com os discos em stripping (distribuição) em cada array, permitindo a perda simultânea de 2 discos, desde que não estejam no mesmo array. RAID1+0 é o mais indicado para databases com muita escrita, pois ele é mais rápido e seguro. A desvantagem é que no array espelhado você perderá 50% do tamanho total dos discos.

    O uso de RAID5 não é de todo ruim, porém deve-se lembrar que nesse tipo de RAID os dados são distribuidos entre os discos, sendo que 1 disco é feita a gravação do bit de paridade, o que gera overhead, e em caso de falha de 1 dos discos isso aumenta exponencialmente, já que a controladora precisa recalcular os bits para reconstruir os dados do disco com falha nos discos operacionais. 

    As páginas de dados dos datafiles são divididas em 8Kb e o SQL Server agrupa as páginas em extents de 64 Kb, ou seja, 8 páginas por extent. Assim, clusters de disco de 64 Kb são ideiais.

    Não existe uma "fórmula mágica" para você montar seu ambiente. É necessário avaliar a intensidade com que os bancos serão acessados, se a aplicação vai fazer um uso intensivo do TempDB (nesse caso, poderia-se criar um array exclusivo para ele), se os demais objetos do servidor estão customizados, afinal não adianta ter um esquema de discos para fornecer o melhor I/O, mas possuir pouca memória e processadores de baixa velocidade. 

    Mais informações sobre RAID em: http://pt.wikipedia.org/wiki/RAID

    Espero ter ajudado.


    Angelo Máximo
    MCSA Windows 2003 | MCTS SQL Server 2008
    angmms@gmail.com
    http://angmaximo.wordpress.com/

    quarta-feira, 4 de julho de 2012 20:13
  • Tiago,

    Sinceramente não entendi o porque você decidiu trabalhar com GPT ou invês de MBR!

    Inicialmente ambos são formas de definição de armazenamento de arquivos no Sistema Operacional com base na alocação fisica do Hardware.

    Você poderia explicar um pouco mais?


    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]

    terça-feira, 10 de julho de 2012 16:39
    Moderador
  • Cruzei com esta thread por acaso, então respondendo para quem um dia olhar para ela...

    GPT pois o total é maior que 2TB, suportado por MBR.

    E sim Thiago, sua estrutura de disco está alinhada. Curioso foi a partição reservada, quando trabalhamos com OEMs isso é normal, agora diretamente em uma formatação me surpreendeu, então tirando os 129 MB "inutilizados", a configuração está perfeita e alinhada.

    []s

    Luciano Moreira
    SQL Server MVP
    luciano.moreira@srnimbus.com.br



    luti

    sexta-feira, 28 de setembro de 2012 07:54
  • Luti,

    Eu já isso uma vez com uma ferramenta da Samsung, ela criava esta estrutura mesmo não sendo em máquinas não OEM.


    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]

    segunda-feira, 1 de outubro de 2012 14:46
    Moderador