2009-07-21 39 views
13

Chúng tôi đã có một applicationg chạy bằng cách sử dụng MySql. Chúng tôi thấy MySql không phù hợp với ứng dụng của chúng tôi sau khi chúng tôi nhận thấy rằng nó không hỗ trợ một số khả năng GIS mà PostGIS có (lưu ý: mysql chỉ hỗ trợ tìm kiếm GIS hình chữ nhật nhỏ nhất).Tại sao PostgreSQL quá chậm trên Windows?

Vì vậy, chúng tôi đã thay đổi DB của mình thành PostgreSQL. Sau đó chúng tôi phát hiện ra rằng Postgresql 8.2 chạy trên Windows chậm hơn rất nhiều so với Mysql 5.1. Bởi chậm hơn, tôi có nghĩa là chậm hơn khoảng 4-5 lần.

Tại sao điều này? Có gì trong cấu hình mà chúng ta cần phải thay đổi không?

tôi thấy một số ý kiến ​​từ các trang web khác như this:

UPDATE: Chúng tôi thấy rằng nguyên nhân của sự chậm trễ là do sự BLOB rằng chúng tôi đang chèn vào DB. Chúng ta cần có khả năng chèn BLOB với tốc độ liên tục 10-15 MB/s. Chúng tôi đang sử dụng lo_read của libpq và lo_write cho mỗi BLOB mà chúng tôi đang chèn/đọc. Đó có phải là cách tốt nhất không? Có ai đã sử dụng Pgsql để chèn BLOB lớn ở tốc độ cao trước đây không?

EDIT: Tôi nghe nói rằng PgSql vừa mới được chuyển sang Windows. Đây có phải là một trong những lý do?

+1

1. Phiên bản mới nhất là 8.4 (được phát hành trong tháng này) - nâng cấp, kiểm tra, báo cáo. 2. "Các trang web khác" này là kho lưu trữ danh sách gửi thư chính thức của dự án PostgreSQL. Nhưng mặt khác, bài đăng bạn liên kết đến rất cũ và đề cập đến một phiên bản rất cũ và không còn được hỗ trợ (8.0). –

Trả lời

21

Có những trường hợp PostgreSQL trên Windows trả thêm phí bổ sung so với các giải pháp khác, do sự cân bằng được thực hiện khi chúng tôi chuyển.

Ví dụ: PostgreSQL sử dụng quy trình cho mỗi kết nối, MySQL sử dụng chuỗi. Trên Unix, điều này thường không phải là một sự khác biệt hiệu năng đáng chú ý, nhưng trên Windows tạo ra các quy trình mới là rất tốn kém (do thiếu hệ thống gọi fork()). Vì lý do này, việc sử dụng kết nối liên tục hoặc trình kết nối kết nối là nhiều hơn quan trọng hơn đối với Windows khi sử dụng PostgreSQL.

Một vấn đề khác mà tôi đã thấy là PostgreSQL đầu tiên trên Windows sẽ mặc định đảm bảo rằng nó đang ghi thông qua bộ nhớ đệm ghi - ngay cả khi pin được sao lưu. AFAIK, MySQL không làm điều này, và nó sẽ ảnh hưởng rất lớn đến hiệu suất ghi. Bây giờ, điều này thực sự cần thiết nếu bạn có một phần cứng không an toàn, chẳng hạn như một ổ đĩa giá rẻ. Nhưng nếu bạn có bộ nhớ cache ghi đè pin, bạn muốn thay đổi điều này thành fsync thông thường. Các phiên bản hiện tại của PostgreSQL (chắc chắn 8.3) sẽ mặc định là open_datasync thay vào đó, nên loại bỏ sự khác biệt này.

Bạn cũng không đề cập gì về cách bạn đã điều chỉnh cấu hình của cơ sở dữ liệu.Theo mặc định, tệp cấu hình được gửi kèm với PostgreSQL là rất bảo thủ. Nếu bạn không thay đổi bất cứ điều gì ở đó, bạn chắc chắn cần phải nhìn vào nó. Có một số lời khuyên điều chỉnh có sẵn trên PostgreSQL wiki.

Để cung cấp thêm chi tiết, bạn sẽ phải cung cấp nhiều chi tiết hơn về chính xác những gì chạy chậm và cách bạn đã điều chỉnh cơ sở dữ liệu của mình. Tôi muốn đề nghị một email đến danh sách gửi thư chung pgsql.

+0

bạn nói đúng. sau khi tôi thay đổi cấu hình mặc định một chút, nó trở nên nhanh hơn một chút. – sivabudh

+0

Phiên bản mới nhất tìm kiếm trên Windows để thực hiện như thế nào? Câu trả lời của bạn có thay đổi nhiều vào ngày hôm nay không? –

+0

Trong khi hiệu suất đã được cải thiện chắc chắn, những khoảng trống kiến ​​trúc vẫn còn. –

7

Trong khi cổng Windows của PostgreSQL tương đối gần đây, sự hiểu biết của tôi là nó thực hiện cũng như các phiên bản khác. Nhưng nó chắc chắn là một cổng; hầu như tất cả các nhà phát triển làm việc chủ yếu hoặc độc quyền trên Unix/Linux/BSD.

Bạn thực sự không nên chạy 8,2 trên Windows. Theo tôi, 8.3 là bản phát hành Windows đầu tiên thực sự sẵn sàng sản xuất; 8.4 là tốt hơn. 8.2 là khá lạc hậu, và bạn sẽ gặt hái nhiều lợi ích nếu bạn có thể quản lý để nâng cấp.

Một điều cần xem xét khác là điều chỉnh. PostgreSQL yêu cầu điều chỉnh nhiều hơn MySQL để đạt được hiệu suất tối ưu. Bạn có thể muốn cân nhắc việc đăng bài lên một trong số mailing lists để được trợ giúp về tinh chỉnh cơ bản hơn.

+1

PostgreSQL yêu cầu điều chỉnh nhiều hơn MySQL: thực sự nó đã phải chịu một cấu hình sử dụng bộ nhớ rất bảo thủ theo mặc định. Tôi không biết nếu nó vẫn còn như vậy, nhưng thường thì đó là nghi can đầu tiên. –

0

PostgreSQL đã chậm hơn MySQL đến một điểm nhất định (nó thực sự nhanh hơn khi bạn có một cơ sở dữ liệu cực kỳ lớn). Chỉ cần FYI, điều này không gây ra vấn đề của bạn nhưng hãy ghi nhớ điều đó.

Các vấn đề liên quan