2013-04-13 13 views
7

Tôi đang lưu trữ một số tài liệu XML lớn trong các trường TEXT trong Postgres và tôi đang cố gắng tìm hiểu cách thức TOAST hiệu quả đang nén chúng. Tôi có một tài liệu XML 2.2MB có thể nén xuống 51kb vì vậy tôi muốn hiểu mức độ gần gũi của tỷ lệ nén TOAST có thể phù hợp với nó để đưa ra quyết định cuối cùng về cách tôi sẽ lưu trữ các tài liệu này theo thời gian.Làm thế nào tôi có thể biết được một trường TEXT lớn trong Postgres như thế nào?

Có chức năng nào trong Postgres cho phép tôi xác định kích thước nén TOAST của một cột và hàng cụ thể như thế này không?

Trả lời

7

Bạn muốn pg_column_size cho kích thước ĐÃ CHUYỂN, octet_length cho kích thước không được nướng. pg_column_size nằm trong số system administration functions section of the documentation. Xem tài liệu và this question để biết thêm chi tiết.

Ví dụ:

craig=> CREATE TABLE toastdemo(x text); 
CREATE TABLE 
craig=> insert into toastdemo(x) select * from repeat('abcdef',1000); 
INSERT 0 1 
craig=> select pg_column_size(x), pg_column_size(repeat('abcdef',1000)) FROM toastdemo; 
pg_column_size | pg_column_size 
----------------+---------------- 
      84 |   6004 
(1 row) 
+0

Cảm ơn! Dựa trên những con số này, nó rất dễ so sánh. Nó nén một tài liệu 2.2mb xuống 81kb đó là hoàn hảo cho nhu cầu của tôi so với giao dịch với các tập tin zip được lưu trữ bên ngoài. – brightball

+0

@aramisbear Đó là về những gì tôi mong đợi; TOAST sử dụng lược đồ nén LZ-vị trí đơn giản với chi phí CPU thấp không có bằng sáng chế chưa hết hạn và tỷ lệ nén tương đối thấp. Đã có cuộc thảo luận về việc di chuyển để giảm phát (chương trình thông thường được sử dụng bởi zip và gzip) trong tương lai, nhưng bạn đang nhận được một kết quả đủ tốt với sơ đồ hiện có của các âm thanh. –

2

Bạn thực sự có thể kiểm tra các tập tin:

SELECT oid AS table_name, reltoastrelid AS toast_tbl_name 
FROM pg_class 
WHERE oid = 'mytbl'::regclass 

này tạo ra các OIDs của bảng và bảng bánh mì nướng liên kết với nó (nếu có). Chúng phục vụ như tên tập tin trong hệ thống tập tin trong thư mục dữ liệu của bạn. Bạn chỉ có thể đi và nhìn chúng. Trong thư mục dữ liệu của bạn:

find . -name '216738' 

Và đây là một trích dẫn từ the manual about the compression technique:

Kỹ thuật nén sử dụng là một khá đơn giản và rất nhanh thành viên của gia đình LZ các kỹ thuật nén. Xem src/backend/utils/adt/pg_lzcompress.c để biết chi tiết.