インデックスに重大な問題があったpostgresql 9.5.2プロダクションサーバがあります。その主張を裏付ける証拠の最強の作品は、いくつかのクエリ間の矛盾です:Postgresqlのインデックス破損の原因 - postgresqlのバグまたはハードウェアの障害
select count(*) from x inner join y on x.a = y.a
select * from x inner join y on x.a = y.a
COUNT(*)クエリが行だけを返した選択*クエリによって返される行数とは異なる番号を返します。私が試みた最初のことは、真空分析でしたが、それは問題を解決しませんでした。最終的に、サーバーを再稼働させるために、すべてのインデックスを削除して再構築したところ、結果はselect *とselect count(*)クエリの間で一貫していました。
どちらのテーブルにもトリガがありません。表xは170万の行を持ち、表yは690万行と削除された行600,000を持ち、表xの主キーである外部キー・フィールドaと、表bの非NULL外部キー制約を使用してリンクされています。データベースサーバーは仮想マシンでホストされます。サーバーは唯一のノードであり、他のサーバーへの複製はありません。システムがクラッシュすることはありませんでした。クラッシュするサーバーやポストグルサービスがインデックスを破損する可能性があることはわかっていますが、ポストグラムサービスは利用できなかった非常に長い時間の間、この問題が明らかになる前に立ち上がった。
このすべてのデータは、問題がインデックスが正しく機能していなかったことを示しています。破損したインデックスに関する私の研究は、一般的に2つの原因、postgresqlのバグ、またはハードウェアの障害を指しています。
ハードウェアの不具合やデータベース自体の不具合の解決策は、ハードウェアの購入とインデックスの整合性をチェックし、必要に応じて修正するためのプログラムの作成という根本的に異なる技術を使用して解決されます問題点。
各理論(ハードウェアの故障とソフトウェアのバグ)の証拠として、どのような証拠を収集できますか?
インデックスの存在をバックアップするpg_dumpを使用してバックアップを行いますが、インデックス自体をコピーするとは思われません。サーバーをホストしているシステムはクラッシュしておらず、私の知る限り、postgresqlサーバーはクラッシュしませんでした。 – zelinka