Existem comandos DBCC (verificador de consistência do banco de dados) no PostgreSQL? Eu poderia encontrar comandos DBCC do SQL Server, mas não para o Postgres? Eu li que o postgresql possui funcionalidade embutida de ajuste de desempenho e nenhum comando DBCC está disponível para o postgres. É verdade?
postgresql
dbcc
user32207
fonte
fonte
Respostas:
Não há comando ou ferramenta de verificação de consistência embutida no PostgreSQL.
A visão geral é que não se deve ser necessário, pois a corrupção e a inconsistência não devem ser possíveis em uma pilha de hardware / software de qualidade. Se surgirem problemas, não há garantia de que algum tipo de verificação de consistência os encontre, apenas criaria uma falsa sensação de segurança. Não concordo com esse sentimento, mas é o que parece sair quando isso é discutido periodicamente no pgsql-hackers.
Como sempre, o problema subjacente é que ninguém precisa particularmente de uma ferramenta de verificação de consistência para atender às suas necessidades imediatas; portanto, ninguém gasta tempo escrevendo uma para coçar e não financia o desenvolvimento de uma em contrato comercial ou internamente. Voluntariado? : p
O PostgreSQL (até 9.3) não suporta somas de verificação no nível de bloco. Portanto, uma das principais coisas que você está acostumado a verificar não existia e, portanto, não pôde ser verificada. Uma ferramenta para varrer todas as relações e validar somas de verificação não existe no PostgreSQL 9.3, mas seria desejável adicionar e pode aparecer em uma versão futura. Enquanto isso, tudo o que você pode fazer é
SELECT *
de cada relação individualmente - mas, devido ao fato de o PostgreSQL usar o cache do buffer do sistema operacional para leituras, não há garantia que realmente forçará a leitura do bloco de disco subjacente. Uma nova ferramenta seria necessária para fazer isso.O PostgreSQL tende a evitar o armazenamento redundante de informações sempre que possível; portanto, geralmente não há nada a ser verificado, apenas uma única fonte autorizada. Um verificador de consistência não pode fazer muito, a menos que a mesma informação apareça ou possa ser derivada de vários locais diferentes.
Também é muito difícil fazer qualquer tipo de verificação útil simultaneamente, em um banco de dados que ainda está ocupado e ativo. A maioria das instalações não deseja bloquear todo o banco de dados, ou pelo menos várias relações importantes por vez, para executar algum tipo de verificação de consistência. Portanto, o verificador precisaria operar em um banco de dados sujeito a modificações simultâneas, tornando ainda mais difícil a gravação e capaz de detectar menos problemas de maneira confiável.
Ainda há muito que uma ferramenta validadora poderia fazer se uma fosse escrita, especialmente se fosse permitida a utilização de vários bloqueios exclusivos de relação:
Verifique se todos os espaços de tabela existem no disco.
Verifique se cada
pg_class
entrada possui arquivos correspondentesrelfilenode
no espaço de tabela correto.Inspecione mapas de visibilidade, mapas de espaço livre, etc., garantindo que estejam presentes quando deveriam ser, legíveis e pareçam corresponder à relação à qual estão associados.
Relatar nós de arquivos órfãos no disco. (Isso é normal devido a DDL transacional e desassociação lenta, mas um verificador pode forçar a desassociação ansiosa e bloquear todas as relações antes de executar a verificação).
Leia todos os blocos de cada relação e procure problemas óbvios. Para relações de pilha, seriam coisas como:
xmin
maior quexmax
(depois de considerar o xid wrap-around)_in
e_out
funcione inalterado ou gere um erroNULL
campos de bitmap definidos nosNOT NULL
atributos da tabelaCHECK
Falha na reexecução de restriçõesVerifique novamente as restrições de chave estrangeira e exclusão depois de bloquear todas as tabelas envolvidas
... e provavelmente muito mais que eu não conheço o suficiente sobre a coragem de Pg para descobrir, como tentativas de detectar páginas rasgadas, validação de estrutura de árvore b, verificação de sanidade, índices GIN e GiST, verificação de sanidade
pg_control
e muito mais. saber por onde começar.Se você deseja ter essa ferramenta, a melhor coisa a fazer é aprender o suficiente para apresentar uma proposta concreta sobre como deve funcionar - e reservar um tempo para trabalhar nela ou para financiar outras pessoas para gastar seu tempo. desenvolvimento.
Pessoalmente, eu ficaria muito feliz em ter algo que pudesse verificar um cluster de banco de dados parado usando um modo de inicialização especial para o
postgres
back - end, para que eu pudesse (um pouco) validar cópias físicas do banco de dados tiradas compg_basebackup
, compg_start_backup()
, rsync epg_stop_backup
, com o nível do sistema de arquivos instantâneos atômicos etc.Como alternativa, você pode fazer o que a maioria dos outros faz: Verifique se a sua pilha de hardware e software é robusta e configurada corretamente, mantenha bons backups e monitore seus logs. Não há substituto para o teste adequado de toda a pilha antes do comissionamento de um servidor - e para bons backups, físicos (streaming / PITR) e lógicos (dumps). Faça testes plug-pull em um banco de dados carregado - repetidamente - antes de entrar no ar para garantir que seu subsistema de E / S supostamente confiável seja realmente. Use várias formas de backup.
fonte
Existe um projeto chamado pgCheck em pgFoundry . Observe que o status de desenvolvimento é 'Alpha'.
Parece que a última atividade foi no início de 2012 .
Foi sugerido em outro lugar que
fonte