none
Servidor Banco de Dados com collation diferente do Banco de Dados RRS feed

  • Pergunta

  • Prezados,

                    Meu Servidor SQL Server está com a collation diferente do Banco de Dados do ERP, funciona normalmente, porém gostaria de saber se isto pode influenciar em termos de desempenho ?

    Hoje o Servidor está com a Collation (SQL_Latin1_General_CP1_CI_AS) e o Banco de Dados esta com a Collation ( SQL_Latin1_General_CP1_CI_AI )

    Grato

    Cláudio Bruno


    Bruno Avanso

    quarta-feira, 17 de julho de 2013 21:17

Respostas

  • Bruno,

    Apenas completando a resposta do Alexandre, a distinção de collation entre base de dados X instancia por si só não é uma causadora de problemas, o problema em si será gerado a partir do momento em que voce terá de realizar um join por exemplo entre uma tabela temporaria (Que fica na base Tempdb da instancia) e uma tabela de sua base, neste caso se a chave do join for um campo texto elas terão collations diferentes e uma alteração de collate deverá ser utilizada fazendo com que o SQL Server não mais utilize os indices criados, gerando por fim um problema de performance.

    Para a correção disse voce pode:

    1 - Realizar uma alteração do collation de sua base de dados, é bem facil e pode ser feita pelo comando:

    ALTER DATABASE SuaBase COLLATE XXXXX

    Porem não é possivel prever como sua aplicação irá se comportar em relação a isso e seria importantissimo fazer um teste previo num ambiente de homologação. Lembre-se que para fazer isso será necessario o drop de todos os indices que são compostos por campos textos, então faça um backup do script do mesmo, drope-os, altere o collate e recrie o script, o mesmo vale para indices full-text caso esteja implementado.

    2 - Alteração do collate da instancia:

    2.1 - Alteração via reinstalação, é chato e dará trabalho pois voce não consegue instalar no mesmo servidor uma nvoa instancia com o mesmo nome da atual o que faria que seja necessario um novo hardware por exemplo (Ou nova VM, enfim, um novo ambiente windows), isso exigira alterações a nivel de infraestrutura de rede e não acho que seja realmente necessario o envolvimento desse pessoal.

    2.2 - Eu optaria por essa opção, restore da master alterando o collate da instancia, segue um passo-a-passo de forma a ser feita:

    Alterando o collate do servidor/instância
    
    Essa parte exigirá um pouco mais de cuidado e atenção:
    
    1) Execute um backup de todas as bases de dados inclusive (master, msdb e model). Antes de uma alteração como essa sempre é mais prudente ter um backup, para o caso de eventuais problemas.
    
    2) Pare o serviço do SQL Server.
    
    3) Abra o prompt de comando (cmd) e navegue até o diretório de instalação do SQL Server. Exempo: C:\Program Files\Microsoft SQL Server\MSSQL10.SQLENTERPRISE\MSSQL\Binn.
    
    4) Em seguida, execute o seguinte comando:
    
    sqlservr -m -sInstancia_SQLSERVER -T4022 -T3659 -q”COLLATE_ESCOLHIDO”
    
    5) Alguns comandos serão executados automaticamente a partir deste. No final do processo, tecle CTRL + C para parar o serviço atual.
    
    6) Por fim, reinicie o serviço do SQL Server.


    <b>Fabrizzio A. Caputo</b><br/> Certificações:<br/> MCT<br/> MCC<br/> Oracle OCA 11g<br/> MCITP SQL Server 2008 BI<br/> MCITP SQL Server 2008 Implementation and Maintenance<br/> MCITP SQL Server 2008 Developer<br/> ITIL V3 Foundation <br/> Blog Pessoal: <a href="http://fabrizziocaputo.wordpress.com">www.fabrizziocaputo.wordpress.com</a><br/> Email: fabrizzio.antoniaci@gmail.com

    quinta-feira, 18 de julho de 2013 12:28
    Moderador
  • Boa noite Bruno !

    A primeira coisa a se pensar é como esta a sua performance atualmente.

    Nao sei se o fato da collation do seu banco estar diferente do seu ERP vai influenciar na performance, mas o que sei por experiencia propria é que o collation muitas vezes influencia na performance sim.

    Certa vez fiz um upgrade de versão do SQL em um cliente, uma base de produção e outra de qualidade, bases identicas, hardware tambem parecidos, e o ambiente de qualidade tinha uma performance 10X pior do que o de produção, investigando as principais consultas me atentei ao plano de execução, no servidor de produção estava tudo normal, porem no outro havia uma conversão explicita de collation, quando fui ver o collation da principal tabela estava diferente entre os 2 ambiente, foi só alterar e a performance ficou igual a produção.

    Resumindo, se o seu ambiente esta com a performance boa, acredito que não tenha com o que se preocupar em relação a isto, caso contrario, vale a pena voce verificar nas principais querys o plano de execução para ver onde esta o gargalo, pode ser que nem seja a questão de collation mas vai que.


    Alexandre Matayosi Conde Mauricio.

    quarta-feira, 17 de julho de 2013 21:32

Todas as Respostas

  • Boa noite Bruno !

    A primeira coisa a se pensar é como esta a sua performance atualmente.

    Nao sei se o fato da collation do seu banco estar diferente do seu ERP vai influenciar na performance, mas o que sei por experiencia propria é que o collation muitas vezes influencia na performance sim.

    Certa vez fiz um upgrade de versão do SQL em um cliente, uma base de produção e outra de qualidade, bases identicas, hardware tambem parecidos, e o ambiente de qualidade tinha uma performance 10X pior do que o de produção, investigando as principais consultas me atentei ao plano de execução, no servidor de produção estava tudo normal, porem no outro havia uma conversão explicita de collation, quando fui ver o collation da principal tabela estava diferente entre os 2 ambiente, foi só alterar e a performance ficou igual a produção.

    Resumindo, se o seu ambiente esta com a performance boa, acredito que não tenha com o que se preocupar em relação a isto, caso contrario, vale a pena voce verificar nas principais querys o plano de execução para ver onde esta o gargalo, pode ser que nem seja a questão de collation mas vai que.


    Alexandre Matayosi Conde Mauricio.

    quarta-feira, 17 de julho de 2013 21:32
  • Prezado Alexandre,

                   Existe procedimentos de alterar a Collation do Servidor sem precisar reinstalar o SQL Server, acredita que vale a pena, ou é melhor reinstalar ou formatar o servidor ?

    Grato


    Cláudio Bruno


    Bruno Avanso

    quinta-feira, 18 de julho de 2013 02:59
  • Bruno,

    Apenas completando a resposta do Alexandre, a distinção de collation entre base de dados X instancia por si só não é uma causadora de problemas, o problema em si será gerado a partir do momento em que voce terá de realizar um join por exemplo entre uma tabela temporaria (Que fica na base Tempdb da instancia) e uma tabela de sua base, neste caso se a chave do join for um campo texto elas terão collations diferentes e uma alteração de collate deverá ser utilizada fazendo com que o SQL Server não mais utilize os indices criados, gerando por fim um problema de performance.

    Para a correção disse voce pode:

    1 - Realizar uma alteração do collation de sua base de dados, é bem facil e pode ser feita pelo comando:

    ALTER DATABASE SuaBase COLLATE XXXXX

    Porem não é possivel prever como sua aplicação irá se comportar em relação a isso e seria importantissimo fazer um teste previo num ambiente de homologação. Lembre-se que para fazer isso será necessario o drop de todos os indices que são compostos por campos textos, então faça um backup do script do mesmo, drope-os, altere o collate e recrie o script, o mesmo vale para indices full-text caso esteja implementado.

    2 - Alteração do collate da instancia:

    2.1 - Alteração via reinstalação, é chato e dará trabalho pois voce não consegue instalar no mesmo servidor uma nvoa instancia com o mesmo nome da atual o que faria que seja necessario um novo hardware por exemplo (Ou nova VM, enfim, um novo ambiente windows), isso exigira alterações a nivel de infraestrutura de rede e não acho que seja realmente necessario o envolvimento desse pessoal.

    2.2 - Eu optaria por essa opção, restore da master alterando o collate da instancia, segue um passo-a-passo de forma a ser feita:

    Alterando o collate do servidor/instância
    
    Essa parte exigirá um pouco mais de cuidado e atenção:
    
    1) Execute um backup de todas as bases de dados inclusive (master, msdb e model). Antes de uma alteração como essa sempre é mais prudente ter um backup, para o caso de eventuais problemas.
    
    2) Pare o serviço do SQL Server.
    
    3) Abra o prompt de comando (cmd) e navegue até o diretório de instalação do SQL Server. Exempo: C:\Program Files\Microsoft SQL Server\MSSQL10.SQLENTERPRISE\MSSQL\Binn.
    
    4) Em seguida, execute o seguinte comando:
    
    sqlservr -m -sInstancia_SQLSERVER -T4022 -T3659 -q”COLLATE_ESCOLHIDO”
    
    5) Alguns comandos serão executados automaticamente a partir deste. No final do processo, tecle CTRL + C para parar o serviço atual.
    
    6) Por fim, reinicie o serviço do SQL Server.


    <b>Fabrizzio A. Caputo</b><br/> Certificações:<br/> MCT<br/> MCC<br/> Oracle OCA 11g<br/> MCITP SQL Server 2008 BI<br/> MCITP SQL Server 2008 Implementation and Maintenance<br/> MCITP SQL Server 2008 Developer<br/> ITIL V3 Foundation <br/> Blog Pessoal: <a href="http://fabrizziocaputo.wordpress.com">www.fabrizziocaputo.wordpress.com</a><br/> Email: fabrizzio.antoniaci@gmail.com

    quinta-feira, 18 de julho de 2013 12:28
    Moderador
  • Prezado Fabrizzio,

                         Está alteração de collation pode afetar em algo no ReportServer pois hoje possui no mesmo server?

    Grato

    Cláudio Bruno


    Bruno Avanso

    quinta-feira, 18 de julho de 2013 15:08
  • Bruno,

    Não.


    <b>Fabrizzio A. Caputo</b><br/> Certificações:<br/> MCT<br/> MCC<br/> Oracle OCA 11g<br/> MCITP SQL Server 2008 BI<br/> MCITP SQL Server 2008 Implementation and Maintenance<br/> MCITP SQL Server 2008 Developer<br/> ITIL V3 Foundation <br/> Blog Pessoal: <a href="http://fabrizziocaputo.wordpress.com">www.fabrizziocaputo.wordpress.com</a><br/> Email: fabrizzio.antoniaci@gmail.com

    quinta-feira, 18 de julho de 2013 15:09
    Moderador