Este tópico descreve como e quando usar condições de filtro sem pushdown.
Visão geral
Por padrão, o AnalyticDB for MySQL cria um índice para cada coluna ao criar uma tabela, visando melhorar a eficiência da filtragem de dados. No entanto, o uso de índices nem sempre é ideal e, em alguns casos, pode degradar o desempenho geral. Embora seja possível excluir índices manualmente, essa prática pode causar problemas caso o índice seja necessário posteriormente. O recurso de desativação do pushdown de condições de filtro no AnalyticDB for MySQL oferece uma solução mais adequada. Ele permite impedir temporariamente o pushdown de condições de filtro em colunas específicas no nível da consulta ou do cluster, melhorando o desempenho geral das consultas.
Considere desativar o pushdown de condições de filtro nos seguintes cenários:
Dados de baixa cardinalidade: quando uma coluna possui poucos valores únicos, a filtragem ainda retorna um grande volume de dados, tornando o índice ineficaz.
Alta pressão de E/S de disco: se suas consultas ou gravações intensas de dados causarem alto uso de E/S, o uso de índices para filtragem pode gerar contenção pelos recursos de E/S do disco e reduzir sua eficácia.
Pushdown simultâneo de múltiplas condições: operações complexas como LIKE ou comparações de strings podem consumir recursos significativos nos nós de armazenamento e afetar o desempenho geral.
Verificar se as condições de filtro sofreram pushdown
Verifique se as condições de filtro sofreram pushdown na página de execução.
-
Na aba Execution Plan, clique em o estágio que contém o operador TableScan.
NotaPara obter informações sobre como acessar a aba Execution Plan, consulte Visualizar resultados de diagnóstico.
Clique em View Stage Plans.
Na página do plano de estágio, clique em o operador TableScan.
-
No painel Properties à direita, localize a propriedade PushedDownFilter. A presença dessa propriedade indica que a condição de filtro sofreu pushdown. Por exemplo, se o valor da propriedade PushedDownFilter for
id = BIGINT '277941', isso indica que a condição de filtro foi enviada para a camada de armazenamento.NotaEm clusters no modo elástico, se um operador Filter aparecer no plano de execução de um estágio downstream, as condições de filtro associadas não sofreram pushdown.
Em clusters no modo reservado, se um operador Filter aparecer no plano do estágio atual, as condições de filtro associadas não sofreram pushdown.
Desativar o pushdown de condições de filtro para colunas específicas em uma consulta
Em uma consulta específica, use um hint para desativar o pushdown de condições de filtro em colunas determinadas. Essa operação tem efeito apenas nas consultas que usam hints.
Sintaxe
-
Para versões secundárias do mecanismo 3.1.4 ou posteriores, use o seguinte hint:
/*+ filter_not_pushdown_columns=[Schema1.table1:colName1|colName2;Schema2.table2:colName1|colName2] */ -
Para versões secundárias do mecanismo anteriores à 3.1.4, use o seguinte hint:
/*+ no_index_columns=[table1.colName1;colName2,table2.colName1] */
Use um hint para desativar o pushdown de condições de filtro em colunas específicas de tabelas no mesmo banco de dados ou em bancos diferentes. Em versões secundárias do mecanismo anteriores à 3.1.4, ao aplicar um hint para tabelas em bancos de dados distintos, garanta que os nomes das tabelas sejam únicos. Caso contrário, o hint poderá afetar tabelas não intencionais. Nas versões secundárias 3.1.4 e posteriores, os hints usam o formato
Schema.tablepara diferenciar as tabelas, evitando efeitos indesejados ao usar hints em tabelas com o mesmo nome em bancos de dados diferentes.Para visualizar a versão secundária do mecanismo do seu cluster, consulte Visualizar informações da versão do cluster. Para atualizar a versão secundária do mecanismo, entre em contato com o suporte técnico.
Exemplos
-
Exemplo 1:
Este exemplo aplica-se à versão secundária do mecanismo 3.1.4 ou posterior. Na consulta atual, as condições de filtro nas colunas
ideproductda tabelatable01no banco de dadostest01não sofrem pushdown./*+ filter_not_pushdown_columns=[test01.table01:id|product] */ -
Exemplo 2:
Este exemplo aplica-se à versão secundária do mecanismo 3.1.4 ou posterior. Na consulta atual, as condições de filtro nas colunas
ideproductda tabelatable01no banco de dadostest01, bem como na colunakeyda tabelatable03no banco de dadostest02, não sofrem pushdown./*+ filter_not_pushdown_columns=[test01.table01:id|product;test02.table03:key] */ -
Exemplo 3:
Este exemplo aplica-se a uma versão secundária do mecanismo anterior à 3.1.4. Na consulta atual, as condições de filtro nas colunas
ideproductda tabelatable02, além da colunakeyda tabelatable03, não sofrem pushdown./*+ no_index_columns=[table02.id;product,table03.key] */
Desativar o pushdown de condições de filtro para colunas específicas em um cluster
Execute as instruções a seguir para desativar o pushdown de condições de filtro em colunas específicas para todas as consultas do cluster atual.
Sintaxe
Use um hint para desativar o pushdown de condições de filtro em colunas específicas de tabelas no mesmo banco de dados ou em bancos diferentes. Em versões secundárias do mecanismo anteriores à 3.1.4, ao aplicar um hint para tabelas em bancos de dados distintos, garanta que os nomes das tabelas sejam únicos. Caso contrário, o hint poderá afetar tabelas não intencionais. Nas versões secundárias 3.1.4 e posteriores, os hints usam o formato
Schema.tablepara diferenciar as tabelas, evitando efeitos indesejados ao usar hints em tabelas com o mesmo nome em bancos de dados diferentes.Para visualizar a versão secundária do mecanismo do seu cluster, consulte Visualizar informações da versão do cluster. Para atualizar a versão secundária do mecanismo, entre em contato com o suporte técnico.
Exemplos
Este exemplo aplica-se à versão secundária do mecanismo 3.1.4 ou posterior. Para todas as consultas no cluster atual, as condições de filtro na coluna id da tabela table02 no banco de dados test02 não sofrem pushdown.
set adb_config filter_not_pushdown_columns=[test02.table02:id]