Tôi đang làm việc trên một dự án phân tích dữ liệu từ các tệp đo lường vào cơ sở dữ liệu Posgres 9.3.5.
Tại lõi là một bảng (được phân chia theo tháng) chứa một hàng cho mỗi điểm đo:
CREATE TABLE "tblReadings2013-10-01"
(
-- Inherited from table "tblReadings_master": "sessionID" integer NOT NULL,
-- Inherited from table "tblReadings_master": "fieldSerialID" integer NOT NULL,
-- Inherited from table "tblReadings_master": "timeStamp" timestamp without time zone NOT NULL,
-- Inherited from table "tblReadings_master": value double precision NOT NULL,
CONSTRAINT "tblReadings2013-10-01_readingPK" PRIMARY KEY ("sessionID", "fieldSerialID", "timeStamp"),
CONSTRAINT "tblReadings2013-10-01_fieldSerialFK" FOREIGN KEY ("fieldSerialID")
REFERENCES "tblFields" ("fieldSerial") MATCH SIMPLE
ON UPDATE CASCADE ON DELETE RESTRICT,
CONSTRAINT "tblReadings2013-10-01_sessionFK" FOREIGN KEY ("sessionID")
REFERENCES "tblSessions" ("sessionID") MATCH SIMPLE
ON UPDATE CASCADE ON DELETE RESTRICT,
CONSTRAINT "tblReadings2013-10-01_timeStamp_check" CHECK ("timeStamp" >= '2013-10-01 00:00:00'::timestamp without time zone AND "timeStamp" < '2013-11-01 00:00:00'::timestamp without time zone)
)
Chúng tôi đang trong quá trình điền vào bảng với dữ liệu đã được thu thập. Mỗi tệp đại diện cho một giao dịch khoảng 48.000 điểm và có vài nghìn tệp. Chúng được nhập khẩu bằng cách sử dụng mộtINSERT INTO "tblReadings_master" VALUES (?,?,?,?);
Ban đầu, các tệp nhập với tốc độ hơn 1000 lần chèn / giây nhưng sau một thời gian (một lượng không nhất quán nhưng không bao giờ dài hơn 30 phút hoặc lâu hơn) tốc độ này giảm xuống còn 10-40 lần chèn / giây và quá trình Postgres xử lý CPU. Cách duy nhất để phục hồi tỷ lệ ban đầu là thực hiện chân không đầy đủ và phân tích. Điều này cuối cùng sẽ được lưu trữ khoảng 1.000.000.000 hàng mỗi bảng hàng tháng để việc hút bụi mất một thời gian.
EDIT: Đây là một ví dụ về việc nó chạy một thời gian trên các tệp nhỏ hơn và sau đó sau khi các tệp lớn hơn bắt đầu, nó đã thất bại. Các tệp lớn hơn trông thất thường hơn nhưng tôi nghĩ đó là do giao dịch chỉ được cam kết ở cuối tệp, khoảng 40 giây.
Sẽ có một giao diện người dùng web chọn một số mục nhưng không có cập nhật hoặc xóa và điều này được nhìn thấy mà không có kết nối hoạt động nào khác.
Câu hỏi của tôi là:
- Làm thế nào chúng ta có thể biết điều gì gây ra sự chậm chạp / đường ray CPU (cái này có trên Windows)?
- Chúng ta có thể làm gì để duy trì hiệu suất ban đầu?
LOAD DATA INFILE
); có thể sự chậm lại là do dân số / tổ chức chỉ mục sau mỗi lần chèn, xem liệu dữ liệu của bạn có cho phép bạn vô hiệu hóa một số (hoặc tất cả) chỉ mục, INSERT
mọi thứ và sau đó kích hoạt lại các chỉ mục; Tôi không nghĩ rằng nó thực sự có thể giúp ích, nhưng khóa bàn có thể là một lựa chọn khác.
VACUUM FULL
trên một bảng cụ thể hoặc đơn giản - VACUUM
trên toàn bộ cơ sở dữ liệu hoặc VACUUM FULL
trên toàn bộ cơ sở dữ liệu. Dù sao thực tế là nó giúp với hiệu suất là đáng ngờ. VACUUM lấy lại các hàng chết do CẬP NHẬT và XÓA, không cần thiết trong kịch bản chỉ CHỈ.