O que me mostra as tabelas e índices usados ??por um ponto de vista sobre Informix consulta SQL?

StackOverflow https://stackoverflow.com/questions/307983

  •  08-07-2019
  •  | 
  •  

Pergunta

consulta mostra que SQL me as tabelas e índices usados ??por uma visão em Informix?

Eu sei como encontrar o "original criar declaração" para uma visão em SYS_VIEWS, mas que requer uma varredura cérebro humano / grokking que select. Eu acredito que posso encontrar se as tabelas são indexadas, uma vez que tenham sido identificados.

Fundo: Eu preciso ter certeza de que alguns pontos de vista críticos apontam para corrente (por exemplo, depois de ser "reorganizados") tabelas. Muitas vezes eu vi vistas apontando para tabelas de backup antigos, que já não estavam indexados, e levou uma eternidade para consulta.

Eu preciso identificar essas consultas regularmente e "lembrar" o DBA ajuste para reconstruir as views / índices.

Foi útil?

Solução

Os documentos mesa sysdepend visualizar dependências. As colunas são:

  • btabid - Número base da tabela ID
  • BEscreva - normalmente t de mesa ou V para vista
  • dtabid - dependente do número da tabela ID
  • dtipo - normalmente t de mesa ou V para vista

Por isso, para um determinado ponto de vista com tabid N, você pode escrever:

SELECT b.owner, b.tabname, d.*
    FROM "informix".systables b, "informix".sysdepend d
    WHERE d.dtabid = N
      AND d.btabid = b.tabid;

Se você só conhece o nome da visão, em seguida, determinar tabid da vista é surpreendentemente complicado se seu banco de dados é um banco de dados modo ANSI onde você pode ter várias tabelas com o mesmo nome da tabela (ou vista nome, neste caso), mas cada um com um proprietário diferente. No entanto, no caso usual (um banco de dados não-ANSI, ou uma tabela vista nome exclusivo /), a consulta é bastante fácil:

SELECT b.owner, b.tabname, d.*
    FROM "informix".systables b, "informix".sysdepend d
    WHERE d.dtabid = (SELECT v.tabid FROM "informix".systables v
                         WHERE v.tabname = "viewname"
                     )
      AND d.btabid = b.tabid;

A pergunta sobre os índices usados ??por uma visão. Índices não são utilizados por um ponto de vista, por si só; índices são usados ??pelo mecanismo de consulta ao processar uma consulta, mas os índices usados ??pode mudar dependendo da consulta Total - tão diferentes índices pode ser usado para estas duas consultas:

SELECT * FROM SomeView;

SELECT * FROM SomeView
    WHERE Column1 BETWEEN 12 AND 314;

Os índices que serão utilizados não são gravados em qualquer lugar do catálogo do sistema; eles são novamente determinados dinamicamente quando uma instrução é preparada.

A questão também notas:

Fundo: Eu preciso ter certeza de que alguns pontos de vista críticos apontam para corrente (por exemplo, depois de ser "reorganizados") tabelas. Muitas vezes eu vi vistas apontando para tabelas de backup antigos, que já não foram indexados, e levou uma eternidade para consulta.

Como você faz sua reorganização? Você criar uma nova tabela com a estrutura desejada, copiar os dados do antigo para o novo, em seguida, renomeie idade, renomear novo? Isso provavelmente seria a explicação - a renomeação mesa retrabalha as vistas que fazem referência a tabela. Qual forma de reorganização que você está fazendo? você pode usar uma técnica diferente? A espera clássico é usar ALTER INDEX indexname para o cluster (depois de alterá-lo para não CLUSTER se ele já foi agrupado). Isso recria a tabela e os índices - sem a quebra vistas. Alternativamente, você pode considerar uma operação ALTER FRAGMENT.

Ele também parece um pouco estranho para manter as velhas mesas ao redor. Isso sugere que a sua reorganização é mais uma questão de descartar dados antigos. Talvez você deve fragmentar sua mesa por intervalos de datas, de modo que você retirar um fragmento quando se atingiu o seu 'fim da vida útil' data. Soltando as tabelas também soltar os pontos de vista que dependem dele, garantindo que você reconstruir os pontos de vista com os novos nomes de tabela.

Outra alternativa é, portanto, para assegurar simplesmente que a reorganização cai e recria os pontos de vista.

Eu preciso identificar essas consultas regularmente e "lembrar" o DBA ajuste para reconstruir as views / índices.

Worrisome ... ele deve apenas ser parte do procedimento padrão para completar a reorganização. Basicamente, você tem um bug com o relatório nesse processo - não garantir que as vistas são totalmente operacional

.
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top