none
Tuning - Tabela com Varchar (max) RRS feed

  • Pergunta

  • Boa tarde a todos,

    Tenho um tabela que contem 3 colunas com varchar(max), conforme abaixo:

    Codigo int 4
    Coluna1 varchar 30
    Coluna2 varchar 30
    Data datetime 8
    Coluna3 varchar MAX
    Coluna4 varchar MAX
    Coluna5 varchar 255
    Coluna6 int 4
    Coluna7 bit 1
    Coluna8 bit 1
    Coluna9 bit 1
    Coluna10 nvarchar 60
    Coluna11 varchar MAX
    Coluna12 nvarchar 60

    Nesta tabela o usuário necessita trazer todas as colunas e tem um WHERE na data por dia. Esta tabela possui 216.000 registros por dia. A query esta muito lenta e passando de 10 minutos!

    Alguém tem alguma sugestão?

    terça-feira, 23 de maio de 2017 15:44

Respostas

Todas as Respostas

  • Deleted
    terça-feira, 23 de maio de 2017 21:01
  • José, Bom dia. Obrigado pela ajuda!

    Segue as informações:

    1 - 
    Somente tem o indice cluster (PK). E é pela coluna Codigo(int)

    Criei um indice pela data mas o plano de execução optou por não utilizar. Custo de 88% pelo Cluster contra 12% utilizando o NCluster com a data

    2-

    3-

    Quantidade de linhas 6.806.307

    (6806307 rows affected)

    4-

     where cast (data as date) = '2017-05-15' 


    quarta-feira, 24 de maio de 2017 13:19
  • Ramos,

    O operador Select esta apresentando um Warning, provavelmente decorrente da conversão que você esta fazendo em relação a data.

    Você realmente precisa realizar esta conversão?


    Pedro Antonio Galvao Junior [MVP | MCC | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | Professor Universitário | @JuniorGalvaoMVP | http://pedrogalvaojunior.wordpress.com]

    quarta-feira, 24 de maio de 2017 17:18
  • Pedro,

    Atualizei as estatísticas e o warning sumiu.

    Porem agora ele faz um paralelismo

    Sera que se quebrar em outra tabela esses varchar(max)? Alguma idéia?

    quarta-feira, 24 de maio de 2017 19:22
  • Deleted
    • Marcado como Resposta ramos_sa sexta-feira, 26 de maio de 2017 20:30
    quarta-feira, 24 de maio de 2017 20:56
  • Bom dia ramos_sa 

    1) posta os campos que são retornados pelo select da sua tabela??,

    algo assim 

    select NomeCampo1, NomeCampo2,NomeCampo3.....

    from NomeTabela

    2) Posta o Resultado desse select


    SELECT OBJECT_NAME(S.object_id) AS table_name,
    I.name AS index_name,
    S.user_seeks, S.user_scans, s.user_lookups
    FROM sys.dm_db_index_usage_stats AS S
    INNER JOIN sys.indexes AS i
    ON S.object_id = I.object_id
    AND S.index_id = I.index_id
    WHERE S.object_id = OBJECT_ID(N'Schema.SuaTabela', N'U');



    Wesley Neves


    • Editado Wesley Neves quinta-feira, 25 de maio de 2017 12:04 Complemento
    quinta-feira, 25 de maio de 2017 12:02
  • Ramos_sa, Então, se o warning sumiu isso é um indicador que realmente as estatísticas internas e dos próprios objetos estavam desatualizadas.

    Em relação ao paralelismo como o José Diz destacou ele não pode ser tratado como algo ruim dependendo da situação ele poderá nos ajudar, para tal o uso da table hint MaxDop para gerenciar e alterar a mudança do comportamento.

    No que se relaciona a divisão ou alteração das colunas, sinceramente temos que analisar o que poderá impactar de forma positiva ou negativa do seu ambiente.


    Pedro Antonio Galvao Junior [MVP | MCC | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | Professor Universitário | @JuniorGalvaoMVP | http://pedrogalvaojunior.wordpress.com]


    quarta-feira, 31 de maio de 2017 00:49