PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

PostgreSQL - cơ sở dữ liệu được khôi phục nhỏ hơn ban đầu

Câu trả lời ngắn gọn là lưu trữ cơ sở dữ liệu được tối ưu hóa về tốc độ hơn là dung lượng.

Ví dụ:nếu bạn chèn 100 hàng vào một bảng, sau đó xóa mọi hàng có ID được đánh số lẻ, DBMS có thể viết ra một bảng mới chỉ có 50 hàng, nhưng sẽ hiệu quả hơn nếu chỉ cần đánh dấu các hàng đã xóa là không gian trống. và sử dụng lại chúng khi bạn chèn một hàng tiếp theo. Do đó, bảng này chiếm gấp đôi dung lượng so với nhu cầu hiện tại.

Việc Postgres sử dụng "MVCC", thay vì khóa, để quản lý giao dịch khiến điều này thậm chí có khả năng xảy ra cao hơn, vì CẬP NHẬT thường liên quan đến việc ghi một hàng mới vào bộ nhớ, sau đó đánh dấu hàng cũ đã bị xóa khi không có giao dịch nào đang xem xét nó.

Bằng cách kết xuất và khôi phục cơ sở dữ liệu, bạn đang tạo lại một DB mà không có tất cả dung lượng trống này. Về cơ bản đây là những gì VACUUM FULL lệnh does - nó ghi lại dữ liệu hiện tại thành một tệp mới, sau đó xóa tệp cũ.

Có một tiện ích mở rộng được phân phối với Postgres được gọi là pg_freespace cho phép bạn kiểm tra một số điều này. ví dụ. bạn có thể liệt kê kích thước bảng chính (không bao gồm các chỉ mục và cột được lưu trữ trong các bảng "TOAST" riêng biệt) và dung lượng trống được sử dụng bởi mỗi bảng với thông tin bên dưới:

Select oid::regclass::varchar as table,
      pg_size_pretty(pg_relation_size(oid)/1024 * 1024) As size,
      pg_size_pretty(sum(free)) As free
 From (
   Select c.oid,
       (pg_freespace(c.oid)).avail As free
     From pg_class c
     Join pg_namespace n on n.oid = c.relnamespace
    Where c.relkind = 'r'
      And n.nspname Not In ('information_schema', 'pg_catalog')
 ) tbl
 Group By oid
 Order By pg_relation_size(oid) Desc, sum(free) Desc;


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cách xử lý lỗi Ruby on Rails:Vui lòng cài đặt bộ điều hợp postgresql:`gem install activerecord-postgresql-adapter '

  2. Postgres Lỗi phương pháp org.postgresql.jdbc.PgConnection.createClob () không được triển khai

  3. Lỗi PostgreSQL:Fatal:tên người dùng vai trò không tồn tại

  4. Tạo chỉ mục duy nhất một phần với sqlalchemy trên Postgres

  5. PSQLException:Tập kết quả này đã bị đóng