none
inserts em XML RRS feed

  • Pergunta

  • Olá pessoal,

    estou com uma dúvida muito basica de XML, mas como não é minha praia, estou precisando de ajuda...

    Temos uma aplicação que insere muito documento XML em um SQL 2008. Esses documentos são acessados através de XPATH e XQUERY.

    O desenho da base é antigo, veio migrado de um cliente para nosso ambiente, nenhum desenvolvedor que criou a aplicação tem informação exata sobre o banco.

    Preciso ajudar eles a melhorar a performance de inserts.

    Estava pensando em sugerir a utilização de coluna XML com schema collection, mas não sei se é a mais performática para inserts.

    Alguém pode me dar uma luz sobre esse assunto?


    -- Ricardo Leka - http://leka.com.br
    • Movido Gustavo Maia Aguiar segunda-feira, 3 de janeiro de 2011 16:52 (De:SQL Server - Desenvolvimento Geral)
    segunda-feira, 3 de janeiro de 2011 14:02

Respostas

  • Boa Tarde,

    O uso de XML Schema Collection não irá aumentar o desempenho nas operações de INSERT. Pelo contrário, ele irá retardá-las, pois, será uma verificação a mais para fazer no momento da inserção. Não que XML Schema Collection seja desincentivado (longe disso), mas se o objetivo de implementá-lo é para aumentar o desempenho, essa decisão está na contramão.

    Não creio que uma coluna XML retarde tanto assim a inserção de um registro. A nota fiscal eletrônica de São Paulo inteira é utilizada em bases que armazenam XML e desconheço problemas de desempenho por conta do XML puramente. Acredito que haja outras questões que possam estar retardando o INSERT como excesso de índices, constraint, triggers, etc.

    [ ]s,

    Gustavo Maia Aguiar
    http://gustavomaiaaguiar.wordpress.com/

    Simulado para o Exame 70-433 – MCTS: Microsoft SQL Server 2008 – Database Development – Parte 07
    http://gustavomaiaaguiar.wordpress.com/2010/12/31/simulado-para-o-exame-70-433-mcts-microsoft-sql-server-2008-database-development-%e2%80%93-parte-07/


    Classifique as respostas. O seu feedback é imprescindível
    segunda-feira, 3 de janeiro de 2011 16:52
  • Fala Leka,

    Quando vc diz "melhorar performance de inserts" vc diz "inserir XMLs inteiros numa coluna tipo XML (ou VARCHAR)" ou "inserir dados em atributos dentro do XML que JÁ ESTÁ na tabela"??

    Qual é o tipo de dados atual? Pelo jeito não é XML, por isso vc está sugerindo a alteração, certo?

    O XPATH e o XQUERY são utilizados pra interagir com um XML já existente (estando ele numa coluna XML ou não!). Se você está apenas INSERINDO um XML inteiro na base, a performance teria que focar em outros pontos (storage, índices atualmente existentes na tabela e que podem estar gerando um gargalo, etc.).

    Criar uma coluna do tipo XML no teu caso, iria melhorar um pouco a performance dos teus XPATH e XQUERIES, iria aumentar a integridade dos seus dados (schema collection), mas principalmente te abrir a opção de trabalhar com índices específicos para o tipo XML.

    Agora, ao meu ver, para INSERT, acho que isto não te trará nenhum (ou pouco) benefício.

    O mundo ideal seria quebrar esse XML e tranformá-lo em tabelas (tornar os dados realmente "relacionais"). Mas como provavelmente isso não seja possível, pense nisso como um tuning de um insert qualquer (isolar o storage, verificar os índices da tabela, network bandwidth, etc.).

    Um tipo XML tb armazena os dados como sendo um BLOB. O storage também seria um pouco diferente do que é hoje.

    Vamos nos falando.

    Um abraço,
    Raul Santos Neto


    http://raulsantosneto.wordpress.com
    segunda-feira, 3 de janeiro de 2011 16:56

Todas as Respostas

  • Boa Tarde,

    O uso de XML Schema Collection não irá aumentar o desempenho nas operações de INSERT. Pelo contrário, ele irá retardá-las, pois, será uma verificação a mais para fazer no momento da inserção. Não que XML Schema Collection seja desincentivado (longe disso), mas se o objetivo de implementá-lo é para aumentar o desempenho, essa decisão está na contramão.

    Não creio que uma coluna XML retarde tanto assim a inserção de um registro. A nota fiscal eletrônica de São Paulo inteira é utilizada em bases que armazenam XML e desconheço problemas de desempenho por conta do XML puramente. Acredito que haja outras questões que possam estar retardando o INSERT como excesso de índices, constraint, triggers, etc.

    [ ]s,

    Gustavo Maia Aguiar
    http://gustavomaiaaguiar.wordpress.com/

    Simulado para o Exame 70-433 – MCTS: Microsoft SQL Server 2008 – Database Development – Parte 07
    http://gustavomaiaaguiar.wordpress.com/2010/12/31/simulado-para-o-exame-70-433-mcts-microsoft-sql-server-2008-database-development-%e2%80%93-parte-07/


    Classifique as respostas. O seu feedback é imprescindível
    segunda-feira, 3 de janeiro de 2011 16:52
  • Fala Leka,

    Quando vc diz "melhorar performance de inserts" vc diz "inserir XMLs inteiros numa coluna tipo XML (ou VARCHAR)" ou "inserir dados em atributos dentro do XML que JÁ ESTÁ na tabela"??

    Qual é o tipo de dados atual? Pelo jeito não é XML, por isso vc está sugerindo a alteração, certo?

    O XPATH e o XQUERY são utilizados pra interagir com um XML já existente (estando ele numa coluna XML ou não!). Se você está apenas INSERINDO um XML inteiro na base, a performance teria que focar em outros pontos (storage, índices atualmente existentes na tabela e que podem estar gerando um gargalo, etc.).

    Criar uma coluna do tipo XML no teu caso, iria melhorar um pouco a performance dos teus XPATH e XQUERIES, iria aumentar a integridade dos seus dados (schema collection), mas principalmente te abrir a opção de trabalhar com índices específicos para o tipo XML.

    Agora, ao meu ver, para INSERT, acho que isto não te trará nenhum (ou pouco) benefício.

    O mundo ideal seria quebrar esse XML e tranformá-lo em tabelas (tornar os dados realmente "relacionais"). Mas como provavelmente isso não seja possível, pense nisso como um tuning de um insert qualquer (isolar o storage, verificar os índices da tabela, network bandwidth, etc.).

    Um tipo XML tb armazena os dados como sendo um BLOB. O storage também seria um pouco diferente do que é hoje.

    Vamos nos falando.

    Um abraço,
    Raul Santos Neto


    http://raulsantosneto.wordpress.com
    segunda-feira, 3 de janeiro de 2011 16:56
  • Olá Raul,

    ocorrerão inserts inteiros na coluna.

    Hoje esse banco já possui uma tabela que decebe esses documentos XML. eles estão usando XML sem schema collections. O pessoal de negócio informou que pretendem receber documentos vindos de aplicações diversas.

    Muito obrigado aos dois, as informações ajudaram muito.


    -- Ricardo Leka - http://leka.com.br
    segunda-feira, 3 de janeiro de 2011 17:39
  • Ricardo,

    E estes documentos serão XMLs nativos, ou por exemplo serão arquivos convertidos em XML?

    Qual seria o padrão UTF utilizado?


    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, 5 de janeiro de 2011 00:48