Minha pergunta básica é: o que afeta o desempenho de \d
?
Eu tenho um esquema separado (pequeno) que gerencio em um servidor de banco de dados no qual não tenho privilégios superiores. O servidor contém um enorme banco de dados (mais de bilhões de linhas) em seu esquema público. Meu esquema separado fornece algumas informações auxiliares usadas apenas para renderização de dados na página da Web no esquema público.
Editar : na verdade, são mais de 5,5 bilhões de linhas, e isso está apenas em uma das maiores tabelas (e levou apenas 1,5 horas para terminar count(*)
!).
Quando faço um simples \d
no prompt do psql, é muito lento - da ordem de 6,5 segundos quando cronometro. Claramente, o banco de dados/servidor de banco de dados tem carga pesada, mas devo levar esse \d
desempenho à atenção dos administradores de sistemas (que geralmente não querem ser incomodados)? (Isso implica algo marcadamente errado no sistema?) Todo o resto no meu esquema é executado na ordem de milissegundos, portanto, não afeta o desempenho do meu esquema em si .
Independentemente de eu chamar a atenção deles, o que impacta o desempenho de \d
? O esquema público possui 985 tabelas. Mesmo assim, parece que seria uma consulta bastante simples; Eu esperaria que estivesse apenas olhando os nomes das tabelas, não o conteúdo das tabelas.
Se você executar
psql
com a-E
opção de linha de comando, poderá ver a consulta que ela emite quando você emite\d
. Você pode então executarEXPLAIN (ANALYZE, BUFFERS)
essa consulta para ver onde ela pode estar com problemas. Você também verá que seu desempenho não dependerá do tamanho dos dados, apenas do número de objetospg_class
(e, provavelmente em menor grau, do número de esquemas).Isto é o que vejo no meu sistema: