13GBサイズのデータベースがあります。このコマンドでバックアップすると:
pg_dump -f out.sql --format=p -b -o -O -x -U postgres mydb
ファイルout.sqlのサイズは53GBです。元のデータベースサイズの約4倍です。なぜこれが発生し、どうすればこれを解決できますか?
13GBサイズのデータベースがあります。このコマンドでバックアップすると:
pg_dump -f out.sql --format=p -b -o -O -x -U postgres mydb
ファイルout.sqlのサイズは53GBです。元のデータベースサイズの約4倍です。なぜこれが発生し、どうすればこれを解決できますか?
これは、保存したデータの種類と使用したデータの種類によって異なります。特に、単にSQLファイルにダンプする場合はなおさらです。圧縮はさておき、データベースが適切に設計されていれば、ダンプよりも少ないスペースで済みます。
たとえば、int
データ型は常に4バイトを使用します。この段落の各文字、スペース、ピリオド、またはコンマのサイズは1バイトですが、各数値は32ビットとして保存されます。int
サイズは常に4バイトです。ただし、これにより、プラス20億からマイナス20億の数値範囲、つまり10桁の長さになる可能性のある数値が可能になります。言い換えると、ここに表示されているようにその情報を書面でダンプしている場合、9999を超える、または-999未満の数値は、保存されている形式よりも実質的に「大きい」サイズになるため、データベースがほとんど数値である場合その後、それは不一致を説明することができます。(つまり、100以下または-10以上の数字は、書面では事実上「小さい」サイズになりますが、それを除けば、常にsmallint(int2)があります-本当にうるさい場合は、tinyintがあると思いますそのバイトがあなたにとって非常に意味がある場合は拡張)。
別の考えはおそらくdnaデータベースです。ACGとTの文字が4つの可能性しか意味しない場合は、各「文字」を2ビットの情報に保存できます。1バイトに8ビットがあるので、すべてを効果的に保存できます。サイズの4分の1。
いずれにせよ、データベースが使用する形式が何であれ、数値、バイナリ、日付、浮動小数点数、列挙型などです。データベースがプレーンテキストでない場合は、ダンプが元のテキストよりも大きくなる可能性があります。
13GBサイズのデータベースがあります
それは何サイズですか?/ data /ディレクトリが占めるサイズは?それはダンプとは大きく異なります。ダンプはデータのテキスト表現であり、バイナリ表現よりも多くのスペースを占めることが予想されます(たとえば、タイムスタンプフィールドは内部で8バイトを占めます。ダンプでは、確実に8を超える文字列として表されます。文字)。一方、バイナリデータには追加情報(さらに重要なことに、ダンプに入らないインデックスデータ)が含まれています。したがって、バイナリサイズとダンプサイズを比較することはまったく関係ありません
サイズが重要な場合は、カスタム形式を使用してみませんか?--format = c
デフォルトでは圧縮を使用します。
pg_dump mydb -oOxU postgres | bzip2 > out.sql.bz2