Cài đặt và thiết lập ban đầu của PostgreSQL. Cài đặt PostgreSQL - Windows, Mac OS X, Linux

Đã khá nhiều thời gian trôi qua kể từ bài viết cuối cùng về cài đặt PostgreSQL 8.3 trên Windows XP. Tôi hy vọng rằng cô ấy đã giúp một số người thực hiện hành động đơn giản này. Bài báo đã lan truyền đến các trang khác, một số trong số đó đã ném ghi chú của tác giả ra khỏi đó một cách đơn giản và khiêm tốn. Tuy nhiên, đã đến lúc phải viết lại điều tương tự, mặc dù khi đó việc cài đặt PostgreSQL không gây ra bất kỳ vấn đề nào, cũng như hiện tại nó không gây ra chúng.

Vấn đề là bạn cần có ít nhất một số kiến ​​thức cơ bản về quản trị PostgreSQL để có thể cài đặt một máy chủ PostgreSQL. Diễn đàn liên tục đặt câu hỏi mà không cần biết những điều sơ đẳng và cơ bản. Người chơi poker và chủ sở hữu của chương trình Holdem Manager đặc biệt tràn lan, những người không những không biết gì ngoài poker mà còn không muốn biết. Ví dụ, tôi không đến một diễn đàn poker mà không đọc các quy tắc của poker và tôi không yêu cầu giải thích cho tôi hiểu về cách để thắng một triệu. Tôi cũng không quan tâm lắm đến việc hỗ trợ người dùng các chương trình thương mại miễn phí, đặc biệt là vì những người dùng này sẽ không bao giờ làm bất cứ điều gì hữu ích cho cộng đồng PostgreSQL, chỉ đóng vai trò là người tiêu dùng.

Vì thế! Dành riêng cho những người bị Windows ....

Các phiên bản PostgreSQL 9.x và dữ liệu nguồn

Bắt đầu với phiên bản 9.0 cho Windows, các phiên bản đã biên dịch của cả 32 bit và 64 bit đều được cung cấp. Bài viết này đề cập đến việc cài đặt phiên bản 64 bit của PostgreSQL 9.0.1 trên phiên bản 64 bit của Windows 7 Home Basic. Việc cài đặt được thực hiện với tư cách là người dùng có quyền quản trị. Tôi không thấy lý do hoặc bất kỳ trở ngại nào tại sao việc cài đặt phiên bản 32 bit lại khác với phiên bản 64 bit, cũng như bất kỳ sự khác biệt cơ bản nào giữa Windows 7 Home Basic và các phiên bản Windows 7 khác.

Đi

Chúng tôi lấy kho lưu trữ với cài đặt PostgreSQL. Tôi đã lấy phiên bản 9.0.1 trực tiếp từ trang này. Chúng tôi lưu vào bất kỳ thư mục tạm thời nào, ví dụ: c: \ tmp. Chúng tôi khởi chạy. Sau cảnh báo tiêu chuẩn của Windows rằng chúng tôi đang cố gắng chạy ứng dụng từ nhà phát triển bên thứ ba, mà chúng tôi trả lời trong câu khẳng định, quá trình cài đặt bắt đầu:

Như bạn có thể thấy, hình ảnh đầu tiên xuất hiện là Windows đang cấu hình thư viện Visual C ++. Nếu không biết chi tiết, tôi sẽ mạo hiểm giả định rằng thư viện này được phân phối với PostgreSQL dành cho Windows, vì PostgreSQL trên nền tảng Windows được biên dịch bằng Visual C ++. Tuy nhiên, hình ảnh sau sẽ xuất hiện, có liên quan hơn đến cài đặt:


Đây là hộp thoại đầu tiên nhắc bạn bắt đầu cài đặt. Nhấp vào Tiếp theo và nhận được cửa sổ sau:


Hộp thoại này nhắc bạn chỉ định thư mục nơi PostgreSQL sẽ được cài đặt. Cá nhân tôi khá hài lòng với đường dẫn được đề xuất bởi trình cài đặt mặc định, vì vậy tôi đã nhấp vào Tiếp theo và nhận được cửa sổ sau:


Hộp thoại này yêu cầu bạn chỉ định thư mục nơi các tệp cơ sở dữ liệu sẽ được lưu trữ. Điều này khá thuận tiện và các nhà phát triển đã giả định một cách hợp lý rằng nhiều người có thể muốn lưu trữ dữ liệu trên các đĩa khác, chẳng hạn như những đĩa nhanh hơn, để tăng hiệu suất cơ sở dữ liệu. Trước đây, tất nhiên, điều này cũng có thể được cấu hình thông qua tệp cấu hình, nhưng bây giờ nó có thể được thực hiện ở giai đoạn cài đặt. Cá nhân tôi khá hài lòng với đường dẫn được đề xuất bởi trình cài đặt mặc định, vì vậy tôi đã nhấp vào Tiếp theo và nhận được cửa sổ sau:


Chà, ở đây chúng ta đến với nguồn câu hỏi đầu tiên và vô số câu hỏi trên diễn đàn. Chỉ cần một loạt người hỏi những gì mật khẩu để nhập? Có thực sự khó đọc những gì được viết không? Vâng, vâng, tôi hiểu rằng ai đó ở trường ngủ một cách ngu ngốc trong các bài học tiếng Anh và ai đó đã học tiếng Đức, nhưng có công cụ ngôn ngữ của Google, nơi trong hầu hết các trường hợp, bạn có thể nhanh chóng nhận được bản dịch hoàn toàn có nghĩa của một cụm từ tiếng Anh khó hiểu! Nghỉ giải lao một lần nữa? Được rồi, tôi đang dịch cụ thể cho những điều này: " Vui lòng cung cấp mật khẩu cho siêu người dùng cơ sở dữ liệu (postgres) và tài khoản dịch vụ (postgres). Nếu tài khoản dịch vụ đã tồn tại trên Windows, bạn phải nhập mật khẩu hiện tại của tài khoản. Nếu tài khoản này không tồn tại, nó sẽ được tạo khi bạn nhấp vào Tiếp theo "

Vẫn chưa rõ? Sau đó, đối với những người chưa đọc tài liệu, tôi giải thích trên đầu ngón tay. Có tài khoản người dùng trong Windows. Chắc chắn bạn hiện đang làm việc dưới một trong số họ, vì tài khoản luôn có tên người dùng. Vì vậy, PostgreSQL trên Windows không chạy với tư cách quản trị viên mà còn thay mặt tài khoản người dùng có tên là postgres. Điều này được thực hiện chủ yếu vì lý do bảo mật, để không có loài gây hại nào có thể có được quyền quản trị viên, ngay cả khi bằng cách nào đó chúng tìm thấy lỗ hổng bảo mật trong chính PostgreSQL. Hơn nữa. Bản thân DBMS PostgreSQL có một người dùng đặc biệt như vậy - superuser, người có quyền tối đa bên trong DBMS, tức là có thể tạo hoặc xóa bất kỳ cơ sở dữ liệu nào và bất kỳ người dùng nào. Nó cũng được đặt tên là postgres. Mặc dù thực tế là tên người dùng của tài khoản PostgreSQL và superuser giống nhau, nhưng chúng là những người dùng khác nhau, không liên quan đến nhau theo bất kỳ cách nào. Nhưng để bạn không bị nhầm lẫn với các mật khẩu khác nhau sau này, bạn được đề nghị đặt cùng một mật khẩu cho cả hai.

Nhiều người hỏi: điều gì sẽ xảy ra nếu chúng ta cài đặt lại PostgreSQL, nhưng lại quên mật khẩu cũ? Không biết có phải họ không để quên đầu ở nhà khi đi làm hay đi dạo? Bạn không thể gọi nó là gì khác hơn là sự kiêu ngạo. Tuy nhiên, hãy đọc kỹ phần Câu hỏi thường gặp đặc biệt, có một câu trả lời cho câu hỏi có thể làm gì trong trường hợp này.


Cửa sổ này nhắc bạn chỉ định một cổng TCP / IP khác cho PostgreSQL. Tôi thấy không có lý do gì để thay đổi một cái được cung cấp theo mặc định. Chúng tôi nhấp vào Tiếp theo:


Cửa sổ này nhắc bạn chọn ngôn ngữ mà cụm cơ sở dữ liệu sẽ được khởi tạo và sau này sẽ được sử dụng theo mặc định khi tạo các cơ sở dữ liệu khác. Đây là một bước khá quan trọng, bởi vì ngôn ngữ xác định một tham số quan trọng như mã hóa dữ liệu trong cơ sở dữ liệu. Trong hình bạn có thể thấy rằng tôi đã chọn "Russia, Russia". Trong trường hợp này, mã hóa cơ sở dữ liệu của bạn sẽ là windows-1251. Đây có thể là chính xác những gì bạn cần, nhưng hầu hết mọi người vẫn thích làm việc với mã hóa UTF-8. Mã hóa này sẽ được đặt nếu bạn chọn ngôn ngữ mặc định trong cửa sổ này: "theo mặc định". Hãy suy nghĩ cẩn thận trước khi chọn một ngôn ngữ. Nếu bạn đang cài đặt PostgreSQL để chạy một ứng dụng, hãy đọc tài liệu về ứng dụng đó, có thể ứng dụng đó yêu cầu một mã hóa cụ thể. Sau khi bạn đã chọn một ngôn ngữ, hãy nhấp vào Tiếp theo:


Người cài đặt vui vẻ nói với bạn. rằng anh ấy đã sẵn sàng để cuối cùng bắt đầu cài đặt. Chúng tôi nhấp vào Tiếp theo. Quá trình sao chép tệp vào thư mục được chỉ định trước đó bắt đầu. Sau đó, trong cùng một cửa sổ, bạn sẽ thấy:


nơi tôi khuyên bạn nên chú ý đến các từ: "Khởi tạo cụm cơ sở dữ liệu" (Tôi khởi tạo cụm cơ sở dữ liệu), nghĩa là việc sao chép tệp đã hoàn thành và cơ sở dữ liệu đầu tiên đang được tạo, sau đó sẽ được sử dụng làm mẫu cho tất cả cơ sở dữ liệu khác. Sau một thời gian, dòng chữ này chuyển thành "start database server" (khởi động máy chủ cơ sở dữ liệu), có nghĩa là khởi động dịch vụ máy chủ PostgreSQL. Sau đó, cửa sổ hoàn tất cài đặt xuất hiện:


Ở đây, chúng tôi cũng được mời chạy công cụ cài đặt các thành phần bổ sung PostgreSQL, nhưng tôi không quan tâm, vì vậy tôi bỏ chọn hộp và nhấp vào Kết thúc

Đó là tất cả! Cài đặt hoàn tất! Riêng các đồng chí hoang tưởng có thể khởi chạy Task Manager, bấm vào tab Services và đảm bảo PostgreSQL đang chạy:


Câu hỏi về pgAdminIII

Nhiều người đặt một câu hỏi. Vì vậy, tôi đã khởi chạy pgAdminIII, lối tắt xuất hiện trong menu Bắt đầu ngay sau khi cài đặt và ở đó nó vẽ cho tôi một bức tranh nơi máy chủ PostgreSQL bị gạch chéo bằng dấu thập đỏ, như sau:


"Xin người tốt giúp đỡ, cô ấy phải làm sao?"

Chà, ít nhất hãy thiết lập một kết nối với máy chủ để bắt đầu, thật ngu ngốc khi nhấp đúp vào chính biểu tượng máy chủ này, bị gạch chéo bằng chữ thập đỏ. Một cửa sổ sẽ xuất hiện trong đó bạn sẽ được yêu cầu nhập mật khẩu cho người dùng postgres, cùng một mật khẩu mà bạn đã nhập trước đó trong quá trình cài đặt. Nếu bạn nhập đúng, dấu X màu đỏ sẽ biến mất và cửa sổ pgAdminIII sẽ như sau:


Kết nối với máy chủ PostgreSQL bằng tiện ích dòng lệnh psql

Tôi hiển thị trong hình ảnh:


Xin lưu ý rằng tiện ích EXPLICITLY cần chỉ định người dùng nào sẽ kết nối với máy chủ và nhập lại cùng một mật khẩu đã được viết ở trên.

Cũng chú ý đến thông báo cảnh báo về sự không khớp giữa mã hóa hiện tại trong bảng điều khiển và mã hóa máy chủ. Thực tế là theo cài đặt của chúng tôi, trước đây chúng tôi đã chọn ngôn ngữ Russia, Russia, dẫn đến việc lựa chọn mã hóa windows-1251, nhưng bảng điều khiển Windows (dòng lệnh) hoạt động ở mã hóa cp866 và điều này phải được hiểu và thực hiện tài khoản trong công việc tiếp theo

Bây giờ chúng ta sẽ xem xét quá trình cài đặt phiên bản mới của DBMS PostgreSQL 9.5 hệ điều hành Windows 7, cũng như tìm hiểu những điểm mới trong phiên bản này và nơi bạn có thể tải xuống.

Vào ngày 7 tháng 1 năm 2016, một phiên bản mới của PostgreSQL DBMS đã được phát hành, cụ thể là PostgreSQL 9.5, nhưng trước khi tiếp tục xem xét các tính năng mới, tôi đề xuất nhớ lại PostgreSQL nói chung là gì, sau đó chuyển sang cài đặt và xem xét phiên bản mới.

PostgreSQL là gì?

PostgreSQL là một hệ quản trị cơ sở dữ liệu quan hệ đối tượng (DBMS) miễn phí và được sử dụng rộng rãi. PostgreSQL được triển khai cho nhiều hệ điều hành, chẳng hạn như: Linux, Solaris, Windows. Nó sử dụng phần mở rộng thủ tục của ngôn ngữ SQL PL / pgSQL.

PostgreSQL 9.5 có gì mới?

Phiên bản này có rất nhiều tính năng mới sẽ rất hữu ích cho các nhà phát triển, sau đây là một số tính năng:

  • CHÈN, VỀ CẬP NHẬT XUNG ĐỘT(UPSERT) - tính năng này cho phép bạn xử lý tình huống khi không thể thêm dữ liệu qua INSERT, chẳng hạn do vi phạm tính duy nhất hoặc không hợp lệ của một giá trị trong một trong các trường. Nói cách khác, thay vì ném một lỗi, bạn có thể chỉ cần bỏ qua việc thực thi câu lệnh, tức là không làm gì hoặc thay đổi dữ liệu được liên kết với trường khóa, tức là trong trường hợp bản ghi đã tồn tại, thay vì CHÈN, hãy thực hiện CẬP NHẬT;
  • CÀI ĐẶT ROLLUP, CUBE và NHÓM- các toán tử này mở rộng khả năng của GROUP BY, cụ thể là chúng cho phép bạn tạo báo cáo, tức là viết các truy vấn trong đó bạn có thể thêm các hàng tổng phụ và tổng, đồng thời kết hợp các kết quả của nhiều nhóm thành một tập dữ liệu duy nhất. Trong Microsoft SQL Server, các toán tử tương tự đã tồn tại từ khá lâu và chúng tôi đã xem xét chúng chi tiết trong tài liệu này;
  • Bảo mật cấp hàng(RLS) được gọi là " Chính sách bảo mật cấp hàng" I E. bây giờ bạn có thể hạn chế quyền truy cập vào dữ liệu trong bảng;
  • Chỉ số BRIN là một loại chỉ mục mới được thiết kế để xử lý các bảng rất lớn, trong đó các cột nhất định được sắp xếp tự nhiên;
  • Sắp xếp nhanh- trong PostgreSQL 9.5, việc sắp xếp hiện sử dụng cái gọi là " chìa khóa rút gọn”, Cho phép bạn sắp xếp dữ liệu văn bản và dữ liệu NUMERIC nhanh hơn nhiều lần.

Bạn có thể tìm thêm thông tin về tất cả những đổi mới trong PostgreSQL 9.5 trên trang trong " Wiki PostgreSQL»Đây là Có gì mới trong PostgreSQL 9.5.

Tải xuống PostgreSQL 9.5 cho Windows 7 ở đâu?

Sau khi bạn đã đến trang, bạn phải nhấp vào " Tải xuống»

Sau đó, bạn sẽ được chuyển hướng đến trang lựa chọn phiên bản PostgreSQL, trong trường hợp của chúng tôi, chúng tôi đang ở " Phiên bản 9.5.0" chọn " Winx86-32"dành cho Windows 32-bit hoặc" Winx86-64»Cho 64 bit. Tôi có Windows 7 32-bit, đó là lý do tại sao tôi nhấp vào nút "Win x86-32".

Do đó, tệp sẽ được tải xuống, chúng tôi sẽ sử dụng tệp này để cài đặt PostgreSQL.

Cài đặt PostgreSQL 9.5 trên Windows 7

Vì vậy, chúng ta hãy chuyển sang cài đặt PostgreSQL 9.5, nhân tiện, chúng tôi đã xem xét cài đặt PostgreSQL, ví dụ: cho người mới bắt đầu, tôi đã chỉ ra cách bạn có thể cài đặt PostgreSQL trên Linux OpenSUSE 13.2 và trong tài liệu "Cài đặt PostgreSQL 9.4 trên CentOS 7.1 ", chúng tôi đã phân tích, cách bạn có thể triển khai cái gọi là máy chủ DBMS sử dụng PostgreSQL và hệ điều hành Linux bằng cách sử dụng ví dụ về bản phân phối CentOS 7.1. Chúng tôi đã không xem xét việc cài đặt PostgreSQL trên hệ điều hành Windows, vì vậy hôm nay chúng tôi sẽ cài đặt PostgreSQL 9.5 trên Windows 7.

Bước 1

Chạy tệp đã tải xuống postgresql-9.5.0-1-windows.exe). Kết quả là chương trình cài đặt sẽ khởi động và cửa sổ đầu tiên là cửa sổ " lời chào hỏi", nhấp chuột" Tiếp theo».

Bước 2

Trong cửa sổ tiếp theo, chúng tôi chỉ định thư mục mà PostgreSQL cần được cài đặt, tôi sẽ để mặc định ( những thứ kia. lái xe C), nhấn " Tiếp theo».

Bước 3

Tiếp theo, chỉ định thư mục mà các tệp cơ sở dữ liệu sẽ được đặt theo mặc định. Nói cách khác, ở đây trong quá trình cài đặt, bạn có thể thay đổi thư mục lưu trữ tệp cơ sở dữ liệu, điều này có thể được yêu cầu trong trường hợp số lượng cơ sở dữ liệu lớn hoặc kích thước của chúng, tức là như bạn hiểu thì khối lượng sẽ rất đáng kể, trong những trường hợp này, tốt hơn là chỉ định một đĩa riêng có đủ khối lượng. Trong trường hợp của tôi, đây là một cài đặt thử nghiệm, vì vậy tôi sẽ để nó theo mặc định, nhấp vào " Tiếp theo».

Bước 4

Sau đó, chúng tôi phát minh, nhập và ghi nhớ mật khẩu cho người dùng postgres ( bạn phải nhập cùng một mật khẩu vào hai trường để xác nhận), người dùng cụ thể này thuộc loại " siêu người dùng" I E. quản trị viên chính, nhấp vào " Tiếp theo».

Bước 5

Bước 6

Sau đó, chúng tôi chỉ định Ngôn ngữ ( tham số này xác định mã hóa dữ liệu trong cơ sở dữ liệu), nếu bạn để nó theo mặc định, thì mã hóa dữ liệu trong cơ sở dữ liệu sẽ là UTF-8, nhưng nếu bạn cần mã hóa khác, giả sử Windows-1251, thì bạn cần chọn " Nga”, Tôi sẽ để mặc định, tức là " ngôn ngữ mặc định", nhấp chuột" Tiếp theo».

Bước 7

Mọi thứ đã sẵn sàng để cài đặt, hãy nhấp vào " Tiếp theo».

Quá trình cài đặt đã bắt đầu, quá trình này sẽ chỉ mất vài phút.

Bước 8

Quá trình cài đặt sẽ hoàn tất và trên cửa sổ cuối cùng, chúng tôi sẽ được nhắc chạy công cụ ( Trình tạo ngăn xếp) để cài đặt thêm các thành phần PostgreSQL, nếu bạn không muốn cài đặt thêm gì thì phải bỏ chọn hộp kiểm tương ứng, nhấp vào " Kết thúc».

Khởi động pgAdmin và kiểm tra xem PostgreSQL 9.5 có hoạt động không

Trình cài đặt PostgreSQL 9.5 bao gồm pgAdmin 1.22.0, tức là Ngoài ra, không cần phải cài đặt riêng pgAdmin trên máy mà bạn cài đặt PostgreSQL 9.5.

Nếu ai chưa biết pgAdmin là một môi trường quản trị và lập trình đồ họa đặc biệt cho PostgreSQL DBMS.

Để bắt đầu pgAdmin, hãy nhấn " Bắt đầu -> Tất cả các chương trình -> PostgreSQL 9.5 -> pgAdmin III»

Chúng tôi sẽ có một máy chủ cục bộ được hiển thị, chúng tôi phải kết nối với nó, nhấp đúp vào " PostgreSQL 9.5 (localhost: 5432)».

Sau đó, bạn cần nhập mật khẩu mà chúng tôi đã nghĩ ra khi cài đặt PostgreSQL 9.5 ( để không phải nhập mật khẩu mỗi lần, bạn có thể chọn hộp "Lưu mật khẩu"). Nhấp chuột " ĐƯỢC RỒI».

Nếu hộp kiểm " Lưu mật khẩu»Bạn đã thiết lập nó, sau đó một cửa sổ sẽ xuất hiện cảnh báo bạn rằng việc lưu mật khẩu là không an toàn, vì mật khẩu sẽ được lưu trữ dưới dạng văn bản thuần túy trong tệp pgpass.conf nằm trong thư mục hồ sơ người dùng Windows. Nhấp chuột " ĐƯỢC RỒI».

Để xem phiên bản PostgreSQL, hãy viết một truy vấn SQL đơn giản dựa trên cơ sở dữ liệu được tạo theo mặc định, tức là trong postgres.

Đối với tôi đó là tất cả, chúc bạn may mắn!

PostgreSQL không thể được sử dụng trực tiếp ra khỏi hộp để sử dụng với 1C Enterprise. Điều cần thiết là một phiên bản điều chỉnh từ 1C, biến PostgreSQL thành một tủ khóa và bạn cần hiểu rằng các khóa sẽ được áp dụng cho toàn bộ bảng cùng một lúc. Nếu bạn cần khóa ở mức bản ghi, chúng tôi bật chế độ khóa được quản lý ở 1C và ghi chúng vào cấu hình có tay cầm. Kết luận: bạn cần tải xuống bộ phân phối đặc biệt từ trang web 1C hoặc mang nó trên đĩa ITS.

Cài đặt

Bản thân việc cài đặt không gây ra bất kỳ khó khăn cụ thể nào, bạn cần chú ý đến việc khởi tạo chính xác cơ sở dữ liệu, cụ thể là cài đặt miền địa phương, sau này chỉ có thể thay đổi điều này bằng cách khởi tạo lại. Ví dụ: cơ sở dữ liệu 1C có cài đặt khu vực Ukraina sẽ không tải vào DBMS có cài đặt ngôn ngữ Nga. Và sau đó các vấn đề về sắp xếp là không cần thiết. Do đó, chúng tôi thực hiện init phù hợp với ngôn ngữ mong muốn.

Đối với tiếng Nga

initdb --locale = ru_RU.UTF-8 --lc-collate = ru_RU.UTF-8 --lc-ctype = ru_RU.UTF-8 --encoding = UTF8 -D / db / postgresql

Đối với người Ukraina

initdb --locale = uk_UA.UTF-8 --lc-collate = uk_UA.UTF-8 --lc-ctype = uk_UA.UTF-8 --encoding = UTF8 -D / db / postgresql

trong đó / db / postgresql là thư mục dữ liệu PostgreSQL của bạn. Tất nhiên, mã hóa là UTF-8.

Tùy chọn chi tiết để tạo lại cụm

1. Cần phải cấp toàn quyền cho thư mục mà chúng ta đã cài đặt PostgreSQL, thường thì nó là C: \ Program Files \ PostgreSQL

2. Từ dưới quyền của quản trị viên, chúng tôi khởi chạy cmd. Nếu bạn đang làm điều này trong win7, hãy chạy với tư cách Quản trị viên.

3.Tạo một thư mục nơi cụm sẽ được lưu trữ. Ví dụ d: \ postgredata.

md d: \ postgredata

4.Chúng tôi khởi tạo cụm theo cách thủ công, chỉ định đường dẫn nơi nó sẽ được đặt.

“C: \ Program Files \ PostgreSQL \ 9.1.2-1.1C \ bin \ initdb.exe” -D d: \ postgredata --locale = Russian_Russia --encoding = UTF8 -U postgres

5.Xóa dịch vụ PostgreSQL đã được cài đặt trong quá trình cài đặt.

sc xóa pgsql-9.1.2-1.1C-x64

Trong đó pgsql-9.1.2-1.1C-x64 là tên của dịch vụ. Nếu bạn không biết tên chính xác, bạn có thể xem các thuộc tính của dịch vụ “Máy chủ cơ sở dữ liệu PostgreSQL…” (Khởi động - Bảng điều khiển - Công cụ quản trị - Dịch vụ)

6.Tạo một dịch vụ mới cho biết cụm của chúng tôi

“C: \ Program Files \ PostgreSQL \ 9.1.2-1.1C \ bin \ pg_ctl” đăng ký -N pgsql -U postgresql -P password -D d: / postgredata

7.Bây giờ chúng tôi đi đến các dịch vụ. Khởi động - Bảng điều khiển - Công cụ quản trị - Dịch vụ và bắt đầu dịch vụ của chúng tôi.

Lỗi DBMS: LỖI: mã hóa mới (UTF8) không tương thích với mã hóa của cơ sở dữ liệu mẫu (WIN1251).

GỢI Ý: Sử dụng mã hóa giống như trong cơ sở dữ liệu mẫu hoặc sử dụng template0 làm mẫu.

Bạn đã chọn sai ngôn ngữ khi cài đặt DBMS (WIN1251) cho máy chủ và máy khách, bạn cần thay đổi thành UTF-8 trong cấu hình hoặc cài đặt lại DBMS với các tham số sau:

Chú ý trong khi cài đặt, KHÔNG chọn ngôn ngữ cài đặt hệ điều hành, chọn Nga, Nga từ danh sách

Cấu hình PostgreSQL

Bạn nên nhớ khuyến nghị 1C không sử dụng cấu trúc FULL OUTER JOIN trong các truy vấn và thay thế nó bằng cách sử dụng, ví dụ: kết hợp nhiều phép nối bên trái. Ngoài ra còn có một vấn đề đã biết với việc giảm hiệu suất trong các truy vấn sử dụng phép nối với bảng ảo SliceLast, bạn nên tạo các truy vấn riêng biệt cho nó và lưu trữ kết quả trong các bảng tạm thời.

Cấu hình được định cấu hình bằng cách chỉnh sửa tệp postgresql.conf.

Các thông số quan trọng nhất

effect_cache_size = 0,5 dung lượng RAM

fsync = tắt tắt tính năng xả vào đĩa sau mỗi giao dịch

sync_commit = tắt vô hiệu hóa ghi nhật ký đồng bộ (rủi ro tương tự như fsync)

wal_buffers = 0,25 dung lượng RAM

Sau khi cấu hình, đừng quên khởi động lại dịch vụ:

khởi động lại dịch vụ postgresql

Cấu hình mạng

Để kết nối các máy khách 1C với máy chủ từ bên ngoài và máy chủ cơ sở dữ liệu hoạt động, trên tường lửa, các cổng sau phải được mở:

Server Agent (ragent) & tcp: 1540 Master Cluster Manager (rmngr) & tcp: 1541 Phạm vi cổng mạng, để phân bổ động các quy trình worker & tcp: 1560 & 1591, tcp: 5432 & Postgresql. Hãy tạo quy tắc thông qua giao diện chuẩn hoặc sử dụng lệnh:

netsh advfirewall firewall thêm rule name = "1Cv8-Server" dir = in action = allow protocol = TCP localport = 1540,1541,5432,1560-1590 enable = yes profile = ANY remoteip = ANY interfacetype = LAN

Bây giờ chúng ta có thể dễ dàng khởi chạy ứng dụng khách 1C: Enterprise từ một máy tính khác, thêm infobase newdb hiện có. Đừng quên về giấy phép, bảo vệ phần mềm / phần cứng.

Sao lưu

Tạo một kết xuất cơ sở dữ liệu được thực hiện bằng lệnh

su postgres -c "pg_dump -U postgres -Fc -Z9 -f baza1.sql baza1"

Khôi phục từ một bãi chứa

su postgres -c "pg_restore -U postgres -c -d baza1 -v baza1.sql"

Bảo dưỡng định kỳ

su postgres -c "/ usr / bin /uumdb --dbname = $ i --analyze --full --quiet"

Xem hoạt động PostgreSQL

Đôi khi, việc xem máy chủ hiện đang làm gì sẽ rất hữu ích. Thiết kế này sẽ giúp:

watch -n 1 "ps auxww | grep ^ postgres"

PostgreSQL là một hệ thống cơ sở dữ liệu quan hệ đối tượng có các đặc điểm của cơ sở dữ liệu thương mại truyền thống, với các phần mở rộng sẽ có sẵn cho thế hệ tiếp theo của DBMS (hệ quản trị cơ sở dữ liệu).

Cài đặt

Để cài đặt PostgreSQL, hãy chạy lệnh sau trong một thiết bị đầu cuối:

sudo apt-get install postgresql

Ngay sau khi cài đặt, bạn có thể cấu hình máy chủ PostgreSQL để phù hợp với nhu cầu của mình, mặc dù thiết lập mặc định là hoàn toàn khả thi.

Cài đặt

Theo mặc định, các kết nối qua TCP / IP bị chặn. PostgreSQL hỗ trợ nhiều phương pháp xác thực. Phương pháp xác thực IDENTđược sử dụng để postgres và người dùng cục bộ chưa được định cấu hình bằng bất kỳ thứ gì khác. Tham khảo xem bạn có định sử dụng bất kỳ loại thay thế Kerberos nào không.

Cuộc thảo luận sau đây giả định rằng bạn sẽ cho phép kết nối TCP / IP và đang sử dụng xác thực máy khách MD5. Các tệp cấu hình PostgreSQL được lưu trữ trong thư mục / etc / postgresql / /chính. Ví dụ: nếu bạn đã cài đặt PostgreSQL 8.4, các tệp cấu hình sẽ được lưu trữ trong thư mục /etc/postgresql/8.4/main.

Để thiết lập xác thực danh tính thêm các mục nhập vào tệp /etc/postgresql/8.4/main/pg_ident.conf. Tệp có chứa các bình luận chi tiết để hướng dẫn bạn.

Để cho phép kết nối TCP / IP, hãy chỉnh sửa tệp /etc/postgresql/8.4/main/postgresql.conf. Tìm dòng

#listen_addresses = "localhost"

và thay thế nó bằng:

Listen_addresses = "localhost"

Để cho phép các máy tính khác kết nối với máy chủ PostgreSQL của bạn, hãy thay thế "localhost" bằng địa chỉ IP của máy chủ của bạn hoặc cách khác bằng 0.0.0.0 để kết nối tất cả các giao diện.

Bạn cũng có thể chỉnh sửa bất kỳ thông số nào khác nếu bạn biết mình đang làm gì! Xem nhận xét tệp cấu hình hoặc tài liệu PostgreSQL để biết chi tiết.

Bây giờ vì chúng ta có thể kết nối với máy chủ PostgreSQL của mình, bước tiếp theo là đặt mật khẩu cho người dùng postgres. Chạy lệnh sau trong một thiết bị đầu cuối để kết nối với cơ sở dữ liệu mẫu PostgreSQL tiêu chuẩn:

sudo -u postgres psql template1

Lệnh này sẽ kết nối với cơ sở dữ liệu PostgreSQL template1 với tư cách là người dùng postgres. Sau khi kết nối với máy chủ PostgreSQL, bạn sẽ thấy mình đang ở trong bảng điều khiển SQL. Bạn có thể chạy lệnh SQL sau trong bảng điều khiển psqlđể đặt mật khẩu người dùng postgres:

ALTER USER postgres với mật khẩu được mã hóa "your_password";

Sau khi đặt mật khẩu, hãy thay đổi tệp /etc/postgresql/8.4/main/pg_hba.conf để sử dụng xác thực MD5 cho người dùng postgres:

Địa phương tất cả postgres md5

Cuối cùng, bạn sẽ cần khởi động lại dịch vụ PostgreSQL để áp dụng các cài đặt mới. Từ thiết bị đầu cuối, hãy chạy như sau để khởi động lại PostgreSQL:

sudo /etc/init.d/postgresql-8.4 khởi động lại

Dù sao thì quá trình thiết lập ở trên vẫn chưa hoàn tất. Vui lòng tham khảo Hướng dẫn dành cho quản trị viên PostgreSQL để biết các cài đặt khác.

Một chút về cấu hình PostgreSQL

* Có giải pháp thay thế cho MSSQL không?
* PostgreSQL - một phanh hay một DBMS xuất sắc?
* Làm thế nào để làm cho PostgreSQL chạy với tốc độ tối đa?

Bài viết này không tuyên bố là hoàn chỉnh trong tất cả các tùy chọn cấu hình PostgreSQL và tôi không đề cập đến tất cả các chế độ hoạt động của cơ sở dữ liệu trong thử nghiệm so sánh. Đối với những ai quan tâm, tôi khuyên bạn nên nghiên cứu cuốn sách tại liên kết.

Giới thiệu

Tôi đã làm việc nhiều với PostgreSQL và thấy nó là một hệ thống cơ sở dữ liệu tuyệt vời. Tôi có một cơ sở dữ liệu làm việc nhiều gigabyte (không phải 1C) xử lý ngay lập tức một lượng lớn dữ liệu. PostgreSQL tận dụng rất tốt các chỉ mục, xử lý tốt đồng thời, chức năng thủ tục được lưu trữ là hàng đầu, có các công cụ quản trị và hiệu suất hoạt động hiệu quả và cộng đồng đã tạo ra các tiện ích hữu ích. Nhưng tôi đã rất ngạc nhiên khi biết rằng nhiều quản trị viên 1C có ý kiến ​​về PostgreSQL không ngang bằng, rằng nó chậm và hầu như không tốt hơn phiên bản tệp của cơ sở dữ liệu, và chỉ MSSQL mới có thể cứu được ngày.

Sau khi nghiên cứu vấn đề, tôi đã tìm thấy nhiều bài viết về cài đặt từng bước PostgreSQL cho người giả, cả trên Linux và Windows. Nhưng phần lớn các bài báo mô tả cài đặt là "cài đặt - tạo cơ sở", và hoàn toàn không đề cập đến vấn đề cấu hình. Trong phần còn lại, cấu hình chỉ được đề cập ở mức độ "quy định các giá trị như vậy", thực tế mà không giải thích tại sao.

Và nếu cách tiếp cận "cài đặt một nút" có thể áp dụng cho MSSQL và nói chung cho nhiều sản phẩm dành cho Windows, thì thật không may, nó không áp dụng cho PostgreSQL. Cài đặt mặc định giới hạn nghiêm ngặt việc sử dụng bộ nhớ để bạn có thể cài đặt nó ngay cả trên máy tính và nó không ảnh hưởng đến phần còn lại của phần mềm ở đó. PostgreSQL phải được cấu hình cho một hệ thống cụ thể và chỉ khi đó, nó mới có thể tự hiển thị tốt nhất. Trong những trường hợp đặc biệt khó, bạn có thể điều chỉnh cài đặt PostgreSQL, cơ sở dữ liệu và hệ thống tệp cho nhau, nhưng điều này áp dụng ở mức độ lớn hơn đối với các hệ thống Linux, nơi có nhiều tùy chọn hơn để cấu hình mọi thứ và mọi thứ.

Cần nhắc lại rằng đối với 1C, tập hợp PostgreSQL từ các nhà phát triển DBMS, chỉ được tập hợp từ các văn bản nguồn 1C đã được vá, sẽ không hoạt động. Các bộ lắp ráp tương thích làm sẵn được cung cấp bởi 1C (thông qua đĩa ITS và một tài khoản cho những người đăng ký hỗ trợ) và EterSoft

Thử nghiệm đã được thực hiện trên Windows, nhưng tất cả các đề xuất cấu hình không dành riêng cho nền tảng và áp dụng cho bất kỳ hệ điều hành nào.

Kiểm tra và so sánh

Khi kiểm tra, tôi không đặt nhiệm vụ kiểm tra ở tất cả các chế độ và kịch bản, chỉ kiểm tra sơ bộ cấu hình thành công.

Để thử nghiệm, tôi đã sử dụng cấu hình sau:
Máy chủ: Win7, Core i5-760 2,8MHz, 4 nhân, RAM 12GB, VMWare 10
Ảo: Win7 x64, 2 lõi, RAM 4GB, ổ cứng vật lý riêng biệt để lưu trữ cơ sở dữ liệu (không phải SSD)
MS SQL Express 2014
PostgreSQL EtherSoft 9.2.1
1C 8.3.5 1383

Cơ sở dữ liệu đã được sử dụng, dt-dỡ 780Mb.
Sau khi khôi phục cơ sở dữ liệu:
kích thước tệp 1CD trong phiên bản tệp - 10GB,
Kích thước cơ sở dữ liệu PostgreSQL - 8GB,
Kích thước cơ sở dữ liệu MSSQL - 6,7GB.

Đối với thử nghiệm, tôi đã sử dụng yêu cầu lựa chọn các thỏa thuận đối tác (21k) với lựa chọn các chi tiết bổ sung từ các sổ đăng ký khác nhau; đối với mỗi thỏa thuận, một lựa chọn riêng biệt thực sự được thực hiện từ các sổ đăng ký. Tôi đã sử dụng cấu hình có sẵn - được sửa đổi nhiều trên cơ sở Kế toán 3.0.

Trong quá trình thử nghiệm, tôi đã thực hiện yêu cầu với một và hai khách hàng nhiều lần cho đến khi thu được kết quả ổn định. Tôi đã bỏ qua những lần chạy đầu tiên.

Thử nghiệm một khách hàng:

Lựa chọn trên máy chủ từ phiên bản tệp với vị trí của đế trên SSD - 31 giây
Lựa chọn từ phiên bản tệp trong máy ảo (từ đĩa cứng) - 46 giây
Lấy mẫu từ cơ sở dữ liệu MSSQL - lần vượt qua đầu tiên - 25 giây hoặc 9 giây (dường như tùy thuộc vào mức độ liên quan của bộ đệm DBMS) (mức tiêu thụ bộ nhớ của quy trình DBMS là khoảng 1,3 GB)
Tìm nạp từ PostgreSQL với cài đặt mặc định - 43 giây (tiêu thụ bộ nhớ không vượt quá 80MB cho mỗi kết nối)
Tìm nạp từ PostgreSQL được tối ưu hóa - 21 giây (mức tiêu thụ bộ nhớ là 120MB cho mỗi kết nối)

Thử nghiệm với hai khách hàng:

Lựa chọn trên máy chủ từ phiên bản tệp với vị trí của cơ sở dữ liệu trên SSD - 34 giây mỗi
Lựa chọn từ phiên bản tệp trong máy ảo (từ đĩa cứng) - 56 giây mỗi phiên bản
Lấy mẫu từ cơ sở dữ liệu MSSQL - mỗi giây 50 hoặc 20 (dường như tùy thuộc vào mức độ liên quan của bộ đệm DBMS)
Mẫu từ PostgreSQL với cài đặt mặc định - 60 giây cho mỗi cài đặt
Lấy mẫu từ PostgreSQL được tối ưu hóa - 40 giây mỗi lần

Ghi chú thử nghiệm:

  1. Sau khi bổ sung lõi thứ ba, các biến thể PostgreSQL và MSSQL bắt đầu hoạt động trong thử nghiệm "hai ứng dụng khách" gần như với hiệu suất của thử nghiệm "ứng dụng khách duy nhất", tức là song song thành công. Điều gì đã ngăn cản họ thực hiện song song công việc trên hai lõi vẫn còn là một bí ẩn đối với tôi.
  2. MSSQL chiếm rất nhiều bộ nhớ cùng một lúc, PostgreSQL yêu cầu ít hơn nhiều ở tất cả các chế độ và ngay sau khi hoàn thành truy vấn, nó đã giải phóng gần như tất cả.
  3. MSSQL chạy như một quá trình duy nhất. PostgreSQL bắt đầu một quy trình riêng biệt cho mỗi kết nối + quy trình dịch vụ. Điều này cho phép ngay cả phiên bản 32-bit cũng tiết kiệm bộ nhớ khi xử lý các yêu cầu từ nhiều máy khách.
  4. Việc tăng bộ nhớ cho cài đặt PostgreSQL trên các giá trị bên dưới không dẫn đến sự gia tăng đáng kể về hiệu suất.
  5. Các thử nghiệm đầu tiên trong mọi trường hợp đều mất nhiều thời gian hơn so với các phép đo tiếp theo, tôi không thực hiện các phép đo đặc biệt, nhưng MSSQL chủ quan bắt đầu nhanh hơn.

Cấu hình PostgreSQL

Có một cuốn sách tuyệt vời bằng tiếng Nga về cấu hình và tối ưu hóa PostgreSQL: Mọi người chăn nuôi voi đều đánh dấu liên kết này rất hợp lý. Cuốn sách mô tả nhiều kỹ thuật để tối ưu hóa DBMS, tạo ra các hệ thống phân tán và chịu được lỗi. Nhưng bây giờ chúng ta sẽ xem xét một thứ hữu ích cho mọi người - cấu hình sử dụng bộ nhớ. PostgreSQL sẽ không sử dụng nhiều bộ nhớ hơn mức cho phép của cài đặt và với cài đặt mặc định PostgreSQL sử dụng bộ nhớ tối thiểu. Trong trường hợp này, bạn không nên chỉ định nhiều bộ nhớ hơn khả năng sử dụng - hệ thống sẽ bắt đầu sử dụng tệp hoán đổi với tất cả các hậu quả đáng buồn sau đó đối với hiệu suất máy chủ. Một số mẹo để định cấu hình PostgreSQL được cung cấp trên ITS CD.

Trên Windows, các tệp cấu hình PostgreSQL nằm trong thư mục cài đặt trong thư mục Dữ liệu:

  • postgresql.conf- tệp chính có cài đặt DBMS
  • pg_hba.conf- tệp có cài đặt truy cập cho máy khách. Đặc biệt, ở đây bạn có thể chỉ định người dùng nào từ địa chỉ IP nào có thể kết nối với cơ sở dữ liệu nhất định và liệu có cần kiểm tra mật khẩu của người dùng hay không và nếu cần, bằng phương pháp nào.
  • pg_ident.conf- một tệp có chức năng chuyển đổi tên người dùng từ hệ thống sang nội bộ (không chắc rằng hầu hết người dùng sẽ cần nó)

Các tệp văn bản có thể được chỉnh sửa bằng notepad. Các dòng bắt đầu bằng # được coi là bình luận và bị bỏ qua.

Các thông số liên quan đến dung lượng bộ nhớ có thể được bổ sung bằng các hậu tố kB, MB, GB - kilobyte, megabyte, gigabyte, ví dụ: 128MB. Các thông số mô tả khoảng thời gian có thể được bổ sung bằng các hậu tố ms, s, min, h, d - mili giây, giây, phút, giờ, ngày, ví dụ: 5 phút

Nếu bạn quên mật khẩu để đăng bài - không thành vấn đề, bạn có thể viết thư pg_hba.conf hàng:

Lưu trữ tất cả tin cậy 127.0.0.1/32

Và kết nối bởi bất kỳ người dùng nào (ví dụ: postgres) tới DBMS trên máy cục bộ tại 127.0.0.1 mà không cần kiểm tra mật khẩu.

Tối ưu hóa sử dụng bộ nhớ

Cài đặt sử dụng bộ nhớ nằm trong postgresql.conf

Giá trị tối ưu của các tham số phụ thuộc vào dung lượng RAM trống, kích thước của cơ sở dữ liệu và các phần tử riêng lẻ của cơ sở dữ liệu (bảng và chỉ mục), mức độ phức tạp của các truy vấn (về nguyên tắc, bạn nên dựa vào các truy vấn khá phức tạp - nhiều kết nối trong truy vấn là một kịch bản điển hình) và số lượng máy khách hoạt động đồng thời. Nhân tiện, PostgreSQL lưu trữ các bảng và chỉ mục cơ sở dữ liệu trong các tệp riêng biệt (\ data \ base \\) và kích thước của các đối tượng có thể được ước tính. Bạn cũng có thể sử dụng tiện ích pgAdmin đi kèm để kết nối với cơ sở dữ liệu, mở "Lược đồ" - "công khai" và tạo báo cáo thống kê cho phần tử "Bảng".



Tiếp theo, tôi sẽ đưa ra các giá trị chỉ định để bạn có thể bắt đầu thiết lập. Sau khi thiết lập ban đầu, bạn nên chạy máy chủ ở các chế độ hoạt động và theo dõi mức tiêu thụ bộ nhớ. Tùy thuộc vào kết quả thu được, có thể cần điều chỉnh các giá trị tham số.

Khi thiết lập máy chủ để thử nghiệm, tôi đã dựa trên các tính toán sau:
RAM chỉ 4GB. Người tiêu dùng - Hệ điều hành Windows, máy chủ 1C, PostgreSQL và bộ đệm đĩa hệ thống. Tôi tiếp tục thực tế là có thể cấp phát tối đa 2,5 GB RAM cho DBMS

Giá trị có thể được chỉ định bằng các hậu tố kB, MB, GB (giá trị tính bằng kilobyte, megabyte hoặc gigabyte). Sau khi thay đổi các giá trị, bạn cần khởi động lại dịch vụ PostgreSQL.

shared_buffers - Bộ đệm chia sẻ máy chủ

Kích thước của bộ đệm đọc / ghi PostgreSQL được chia sẻ bởi tất cả các kết nối. Nếu dữ liệu không có trong bộ nhớ cache, nó sẽ được đọc từ đĩa (có lẽ nó sẽ được lưu vào bộ nhớ cache của Hệ điều hành)

Nếu không có đủ không gian đệm để lưu trữ dữ liệu công việc được sử dụng thường xuyên, dữ liệu đó sẽ liên tục được ghi vào và đọc từ bộ nhớ cache hoặc đĩa của hệ điều hành, điều này sẽ có tác động rất tiêu cực đến hiệu suất.

Nhưng đây không phải là tất cả bộ nhớ cần thiết cho công việc, bạn không nên chỉ định giá trị quá lớn, nếu không sẽ không còn bộ nhớ cho việc thực thi thực tế các yêu cầu của khách hàng (và càng nhiều thì mức tiêu thụ bộ nhớ càng cao) và cho hệ điều hành và các ứng dụng khác, ví dụ, máy chủ xử lý 1C. Máy chủ cũng dựa vào bộ đệm của hệ điều hành và cố gắng không lưu trong bộ đệm của nó những gì có nhiều khả năng được hệ thống lưu trong bộ đệm.

Bài kiểm tra được sử dụng

shared_buffers = 512MB

work_mem- bộ nhớ để sắp xếp, tổng hợp dữ liệu, v.v.

Được phân bổ theo yêu cầu, có thể nhiều lần đối với các yêu cầu phức tạp. Nếu không có đủ bộ nhớ, PostgreSQL sẽ sử dụng các tệp tạm thời. Nếu giá trị quá cao, có thể có quá mức RAM và hệ điều hành sẽ bắt đầu sử dụng tệp hoán trang với hiệu suất giảm tương ứng.

Có một khuyến nghị khi tính toán lấy dung lượng bộ nhớ khả dụng trừ đi shared_buffers và chia cho số lượng yêu cầu được thực hiện đồng thời. Trong trường hợp truy vấn phức tạp, số chia phải được tăng lên, tức là giảm kết quả. Đối với trường hợp đang được xem xét, dựa trên 5 người dùng đang hoạt động (2,5Gb-0,5Gb (shared_buffers)) / 5 = 400Mb. Nếu DBMS coi các truy vấn quá phức tạp hoặc nếu có thêm người dùng xuất hiện, thì giá trị sẽ cần được giảm xuống.

Đối với các truy vấn đơn giản, giá trị nhỏ là đủ - lên đến vài megabyte, nhưng đối với các truy vấn phức tạp (và đây là trường hợp điển hình cho 1C), sẽ cần nhiều hơn. Khuyến nghị - đối với bộ nhớ 1-4GB, bạn có thể sử dụng các giá trị 32-128MB. Trong bài kiểm tra tôi đã sử dụng

work_mem = 128MB

Maint_work_mem- bộ nhớ cho các lệnh thu gom rác, thống kê, tạo chỉ mục.

Bạn nên đặt giá trị bằng 50-75% kích thước của bảng hoặc chỉ mục lớn nhất, nhưng để có đủ bộ nhớ cho hệ thống và ứng dụng. Bạn nên đặt các giá trị lớn hơn work_mem. Trong bài kiểm tra tôi đã sử dụng
Maint_work_mem = 192MB

temp_buffers- đệm cho các đối tượng tạm thời, chủ yếu cho các bảng tạm thời.

Bạn có thể cài đặt khoảng 16 MB. Trong bài kiểm tra tôi đã sử dụng
temp_buffers = 32MB

effect_cache_size- kích thước gần đúng của bộ đệm đĩa của hệ thống tệp.

Trình tối ưu hóa sử dụng giá trị này khi xây dựng kế hoạch truy vấn, để ước tính khả năng dữ liệu nằm trong bộ đệm ẩn (với quyền truy cập ngẫu nhiên nhanh) hoặc trên đĩa chậm. Trong Windows, lượng bộ nhớ hiện tại được phân bổ cho bộ đệm có thể được xem trong trình quản lý tác vụ.

Autovacuum - "thu gom rác"

PostgreSQL, như một đại diện điển hình của các DBMS "đã được phiên bản hóa" (trái ngược với việc chặn), không chặn độc lập khi thay đổi dữ liệu bảng và bản ghi từ việc đọc các giao dịch (trong trường hợp 1C, máy chủ 1C tự thực hiện điều này). Thay vào đó, một bản sao của bản ghi có thể thay đổi được tạo ra, bản ghi này sẽ hiển thị cho các giao dịch tiếp theo, trong khi các bản ghi hiện tại tiếp tục thấy dữ liệu có liên quan khi bắt đầu giao dịch của họ. Kết quả là, các bảng tích lũy dữ liệu lỗi thời - các phiên bản trước đó của các bản ghi đã thay đổi. Để DBMS có thể sử dụng không gian giải phóng, cần phải thực hiện "thu dọn rác" - để xác định bản ghi nào không còn được sử dụng nữa. Điều này có thể được thực hiện một cách rõ ràng bằng một lệnh SQL MÁY HÚT BỤI hoặc đợi cho đến khi bảng được xử lý bởi bộ thu gom rác tự động - AUTOVACUUM. Ngoài ra, cho đến một phiên bản nhất định, thu thập rác được kết hợp với thu thập thống kê (bộ lập lịch sử dụng dữ liệu về số lượng bản ghi trong bảng và phân phối các giá trị trường được lập chỉ mục để xây dựng kế hoạch truy vấn tối ưu). Một mặt, việc thu gom rác là cần thiết để các bảng không phát triển và sử dụng không gian đĩa một cách hiệu quả. Mặt khác, quá trình thu gom rác đột ngột bắt đầu sẽ đặt thêm tải lên đĩa và bảng, dẫn đến tăng thời gian thực hiện truy vấn. Một hiệu ứng tương tự được tạo ra bằng cách thu thập số liệu thống kê tự động (rõ ràng, nó có thể được khởi chạy bằng lệnh PHÂN TÍCH hoặc cùng với việc thu gom rác PHÂN TÍCH CHÂN KHÔNG). Và mặc dù PostgreSQL cải thiện các cơ chế này từ phiên bản này sang phiên bản khác để giảm thiểu tác động tiêu cực đến hiệu suất (ví dụ: trong các phiên bản trước đó, tính năng thu gom rác đã chặn hoàn toàn quyền truy cập vào bảng, kể từ phiên bản 9.0, hoạt động MÁY HÚT BỤI tăng tốc), có một cái gì đó để cấu hình.

Bạn có thể tắt hoàn toàn autovacuum bằng tham số:

autovacuum = tắt

Ngoài ra, để Autovacuum hoạt động, tham số track_counts = on là bắt buộc, nếu không sẽ không hoạt động.

Cả hai tùy chọn đều được bật theo mặc định. Trên thực tế, autovacuum không thể bị vô hiệu hóa hoàn toàn - ngay cả khi autovacuum = tắt, đôi khi (sau một số lượng lớn giao dịch) autovacuum sẽ khởi động.

Bình luận: MÁY HÚT BỤI thường không làm giảm kích thước của tệp bảng, chỉ đánh dấu các vùng trống, có thể sử dụng lại. Nếu bạn muốn giải phóng thêm dung lượng và giảm thiểu dung lượng ổ đĩa bị chiếm dụng, bạn sẽ cần lệnh CHÂN KHÔNG ĐẦY ĐỦ. Tùy chọn này khóa quyền truy cập vào bảng trong suốt thời gian chạy và thông thường không bắt buộc. Bạn có thể đọc thêm về cách sử dụng lệnh VACUUM trong tài liệu (bằng tiếng Anh).

Nếu Autovacuum không bị tắt hoàn toàn, bạn có thể định cấu hình ảnh hưởng của nó đối với việc thực thi truy vấn với các tham số sau:

autovacuum_max_workers- số quá trình làm sạch tối đa chạy song song.

autovacuum_naptime - khoảng thời gian tối thiểu trước đó autovacuum sẽ không bắt đầu. Giá trị mặc định là 1 phút. Bạn có thể tăng nó lên, sau đó nếu dữ liệu thay đổi thường xuyên, phân tích sẽ được thực hiện ít thường xuyên hơn.

autovacuum_vacuum_threshold, - số lượng bản ghi đã sửa đổi hoặc bị xóa trong bảng cần thiết để bắt đầu quá trình thu gom rác MÁY HÚT BỤI hoặc thu thập số liệu thống kê PHÂN TÍCH. Giá trị mặc định là 50.

autovacuum_vacuum_scale_factor , autovacuum_analyze_scale_factor - hệ số từ kích thước của bảng trong bản ghi, được thêm vào autovacuum_vacuum_thresholdautovacuum_analyze_threshold tương ứng. Các giá trị mặc định lần lượt là 0,2 (tức là 20% số lượng mục nhập) và 0,1 (10%).

Hãy xem xét một ví dụ với một bảng có 10.000 mục nhập. Sau đó, với cài đặt mặc định, sau 50 + 10000 * 0,1 = 1050 bản ghi được thay đổi hoặc xóa, thu thập thống kê sẽ được bắt đầu PHÂN TÍCH và sau những thay đổi năm 2050 - thu gom rác MÁY HÚT BỤI.

Nếu bạn tăng ngưỡng và scale_factor, phần phụ trợ sẽ ít chạy hơn, nhưng các bảng nhỏ có thể phát triển đáng kể. Nếu cơ sở dữ liệu chủ yếu bao gồm các bảng nhỏ, sự gia tăng tổng thể về dung lượng đĩa có thể đáng kể, vì vậy bạn có thể tăng các giá trị này một cách khôn ngoan.

Do đó, có thể hợp lý khi tăng khoảng thời gian autovacuum_naptime và tăng một chút ngưỡng và scale_factor. Trong cơ sở dữ liệu được tải, nó có thể là một giải pháp thay thế để tăng đáng kể scale_factor (giá trị 1 sẽ cho phép các bảng "phình to" lên một nửa) và đưa việc thực thi hàng ngày vào bộ lập lịch PHÂN TÍCH CHÂN KHÔNG trong khoảng thời gian tải cơ sở dữ liệu tối thiểu.

default_st Statistics_target - đặt số lượng thống kê được thu thập bằng lệnh PHÂN TÍCH. Giá trị mặc định là 100. Các giá trị lớn hơn làm tăng thời gian thực thi của lệnh ANALYZE, nhưng cho phép bộ lập lịch xây dựng các kế hoạch thực thi truy vấn hiệu quả hơn. Có khuyến nghị tăng lên 300.

Có thể quản lý hiệu suất AUTOVACUUM, làm cho nó dài hơn nhưng ít đánh thuế vào hệ thống hơn.

chân không_cost_page_hit- kích thước của "hình phạt" đối với việc xử lý một khối nằm trong shared_buffers. Liên quan đến sự cần thiết phải chặn quyền truy cập vào bộ đệm. Giá trị mặc định 1

chân không_cost_page_miss - kích thước của "hình phạt" để xử lý một khối trên đĩa. Liên kết với khóa bộ đệm, tìm kiếm dữ liệu trong bộ đệm, đọc dữ liệu từ đĩa. Giá trị mặc định 10

chân không_cost_trang_dirty- kích thước của "hình phạt" đối với việc sửa đổi khối. Liên quan đến nhu cầu chuyển dữ liệu đã sửa đổi vào đĩa. Giá trị mặc định 20

chân không_cost_limit- số lượng "hình phạt" tối đa, sau đó quá trình xây dựng có thể bị "đóng băng" trong thời gian chân không_cost_delay. Mặc định 200

chân không_cost_delay- thời gian để "đóng băng" quá trình thu gom rác khi đạt tới chân không_cost_limit. Giá trị mặc định 0ms

autovacuum_vacuum_cost_delay- thời gian để "đóng băng" quá trình thu gom rác cho autovacuum. Mặc định là 20ms. Nếu được đặt thành -1, chân không_cost_delay sẽ được sử dụng

autovacuum_vacuum_cost_limit- "hình phạt" tối đa cho autovacuum. Giá trị mặc định là -1 - giá trị của chân không_cost_limit được sử dụng

Báo cáo sử dụng chân không_cost_page_hit = 6, chân không_cost_limit = 100, autovacuum_vacuum_cost_delay = 200ms giảm tác động của AUTOVACUUM lên đến 80%, nhưng tăng gấp ba lần thời gian thực thi.

Thiết lập ghi đĩa

Khi một giao dịch hoàn tất, PostgreSQL bắt đầu ghi dữ liệu vào một nhật ký giao dịch WAL (ghi trước nhật ký) đặc biệt, và sau đó vào cơ sở dữ liệu sau khi dữ liệu nhật ký được đảm bảo sẽ được ghi vào đĩa. Cơ chế mặc định là fsync khi PostgreSQL cưỡng bức dữ liệu (của nhật ký) từ bộ nhớ cache của đĩa hệ điều hành vào đĩa và chỉ sau khi ghi thành công (nhật ký) thì máy khách mới được thông báo rằng giao dịch đã hoàn tất thành công. Sử dụng nhật ký giao dịch cho phép bạn hoàn tất giao dịch hoặc khôi phục cơ sở dữ liệu nếu xảy ra lỗi trong quá trình ghi dữ liệu.

Trong các hệ thống bận rộn với khối lượng ghi lớn, có thể hợp lý khi di chuyển nhật ký giao dịch sang một đĩa vật lý riêng biệt (nhưng không phải sang một phân vùng khác trên cùng một đĩa!). Để thực hiện việc này, bạn cần dừng DBMS, di chuyển thư mục pg_xlog đến một vị trí khác và tạo một liên kết tượng trưng ở vị trí cũ, ví dụ, bằng cách sử dụng tiện ích đường giao nhau. Far Manager (Alt-F6) cũng có thể tạo liên kết. Trong trường hợp này, bạn cần đảm bảo rằng vị trí mới có quyền truy cập cho người dùng đang chạy PostgreSQL (thường là postgres).

Với một số lượng lớn các hoạt động sửa đổi dữ liệu, có thể cần phải tăng giá trị của các phân đoạn điểm kiểm tra, kiểm soát lượng dữ liệu có thể chờ được chuyển từ nhật ký đến cơ sở dữ liệu. Giá trị mặc định là 3. Hãy nhớ rằng không gian được phân bổ cho nhật ký được tính theo công thức (điểm kiểm tra * 2 + 1) * 16 MB, với giá trị 32, sẽ yêu cầu hơn 1 GB dung lượng đĩa .

PostgreSQL chuyển dữ liệu từ bộ đệm tệp hệ điều hành sang đĩa sau mỗi lần kết thúc giao dịch ghi. Một mặt, điều này đảm bảo rằng dữ liệu trên đĩa luôn được cập nhật, mặt khác, hiệu suất giảm xuống với một số lượng lớn các giao dịch. Tắt hoàn toàn fsync có thể bằng cách chỉ định

fsync = tắt
full_page_writes = off

Bạn chỉ có thể làm điều này nếu bạn hoàn toàn tin tưởng vào thiết bị và UPS (nguồn điện liên tục). Nếu không, trong trường hợp hệ thống gặp sự cố, sẽ có nguy cơ nhận được cơ sở dữ liệu bị hỏng. Và trong mọi trường hợp, bộ điều khiển RAID có pin để cung cấp năng lượng cho bộ nhớ của dữ liệu được viết dưới đây cũng sẽ không ảnh hưởng gì.

Một giải pháp thay thế chắc chắn sẽ là sử dụng tham số

sync_commit = tắt

Trong trường hợp này, sau khi phản hồi thành công để hoàn thành giao dịch, có thể mất một khoảng thời gian trước khi nó được ghi an toàn vào đĩa. Trong trường hợp tắt đột ngột, cơ sở dữ liệu sẽ không bị phá hủy, nhưng dữ liệu của các giao dịch cuối cùng có thể bị mất.

Nếu bạn hoàn toàn không tắt fsync, bạn có thể chỉ định phương thức đồng bộ hóa trong một tham số. Bài viết từ đĩa ITS đề cập đến tiện ích pg_test_fsync, nhưng nó không có trong bản dựng PostgreSQL của tôi. Theo 1C, trong trường hợp của họ trong Windows, phương pháp này đã cho thấy một cách tối ưu open_datasync(Rõ ràng, phương pháp này được sử dụng theo mặc định).

Nếu nhiều giao dịch ghi nhỏ được sử dụng (trong trường hợp 1C, đây có thể là bản cập nhật hàng loạt của thư mục bên ngoài giao dịch), sự kết hợp của các tham số commit_delay (thời gian trễ hoàn thành giao dịch tính bằng micro giây, mặc định là 0) và commit_siblings (mặc định 5) có thể giúp đỡ. Khi các tùy chọn được bật, việc hoàn thành giao dịch có thể bị trì hoãn bởi thời gian commit_delay, nếu ít nhất các giao dịch commit_siblings hiện đang thực hiện. Trong trường hợp này, kết quả của tất cả các giao dịch đã hoàn thành sẽ được ghi cùng nhau để tối ưu hóa việc ghi đĩa.

Các thông số khác ảnh hưởng đến hiệu suất

wal_buffers- dung lượng bộ nhớ trong shared_buffers cho nhật ký giao dịch. Khuyến nghị - với 1-4GB bộ nhớ khả dụng, hãy sử dụng các giá trị 256KB-1MB. Tài liệu nói rằng việc sử dụng giá trị "-1" sẽ tự động nhận giá trị tùy thuộc vào giá trị của shared_buffers.

random_page_cost- "chi phí" của việc đọc ngẫu nhiên, được sử dụng khi tìm kiếm dữ liệu theo chỉ mục. Mặc định là 4.0. Đơn vị được lấy làm thời gian truy cập dữ liệu tuần tự. Đối với các mảng đĩa nhanh, đặc biệt là SSD, nên giảm giá trị xuống, trong trường hợp này, PostgreSQL sẽ sử dụng các chỉ mục tích cực hơn.

Các thông số từ phần QUERY TUNING, đặc biệt là những thông số liên quan đến việc ngăn bộ lập lịch sử dụng các phương pháp tìm kiếm cụ thể, chỉ được thay đổi nếu bạn hoàn toàn hiểu rõ mình đang làm gì. Rất dễ dàng để tối ưu hóa một loại truy vấn và làm hỏng hiệu suất của tất cả các loại khác. Hiệu quả của việc thay đổi hầu hết các tham số trong phần này phụ thuộc vào dữ liệu trong cơ sở dữ liệu, các truy vấn trên dữ liệu này (nghĩa là trên phiên bản 1C được sử dụng, bao gồm cả) và phiên bản của DBMS.

Sự kết luận

PostgreSQL là một cơ sở dữ liệu mạnh mẽ trong tầm tay phù hợp, nhưng cần được điều chỉnh cẩn thận. Nó có thể được sử dụng kết hợp với 1C và có được hiệu suất tốt, và phần thưởng miễn phí của nó sẽ là một phần thưởng rất tốt.

Phê bình và bổ sung cho bài viết này được hoan nghênh.

Liên kết hữu ích

http://postgresql.leopard.in.ua/ - trang web của cuốn sách " Làm việc với điều chỉnh và mở rộng PostgreSQL ", hướng dẫn đầy đủ và dễ hiểu nhất theo quan điểm của tôi về cấu hình và quản trị PostgreSQL

http://etersoft.ru/products/postgre - tại đây bạn có thể tải xuống bản dựng PostgreSQL tương thích 1C dành cho Windows cũng như các bản phân phối và phiên bản khác nhau của Linux. Đối với những người không có đăng ký ITS hoặc yêu cầu phiên bản cho phiên bản Linux, phiên bản này không được trình bày trên v8.1c.ru.

http://www.postgresql.org/docs/9.2/static/ - tài liệu PostgreSQL chính thức (bằng tiếng Anh)

Các bài viết từ đĩa ITS về cấu hình PostgreSQL

Lịch sử chỉnh sửa bài viết

  • 29/01/2015 - phiên bản đầu tiên được xuất bản
  • 31/01/2015 - bài báo đã được bổ sung một phần về AUTOVACUUM, một liên kết đến tài liệu gốc đã được thêm vào.

Trong tương lai, tôi dự định thử nghiệm hoạt động của DBMS ở chế độ thêm và thay đổi dữ liệu.

  • hướng dẫn

Tôi muốn tạo một sổ tay Hướng dẫn Bắt đầu toàn diện tuyệt vời mà không có bất kỳ sự rườm rà nào, nhưng bao gồm các tính năng cơ bản dành cho người mới bắt đầu trong hệ thống PostgreSQL trên Linux.

PostgreSQL là một hệ quản trị cơ sở dữ liệu quan hệ đối tượng (ORDBMS) dựa trên POSTGRES, phiên bản 4.2, được phát triển bởi Khoa Khoa học Máy tính của Đại học California tại Berkeley.

PostgreSQL là mã nguồn mở hậu duệ của mã Berkeley gốc. Nó hỗ trợ hầu hết các tiêu chuẩn SQL và cung cấp nhiều tính năng hiện đại:

  • Truy vấn phức tạp
  • Kiểm soát đồng thời với đa vũ trụ
Ngoài ra, PostgreSQL có thể được người dùng mở rộng theo nhiều cách, ví dụ: bằng cách thêm mới
  • Loại dữ liệu
  • chức năng
  • các nhà khai thác
  • Chức năng tổng hợp
  • chỉ số phương pháp
  • ngôn ngữ thủ tục

Lắp ráp và cài đặt

Giống như tất cả những người hâm mộ PostgreSQL chính thống, tất nhiên chúng tôi sẽ xây dựng và không tải xuống các gói làm sẵn (ví dụ: kho Debian không có phiên bản mới nhất). Có rất nhiều phiên bản ở đây, tất nhiên tốt nhất là tải phiên bản mới nhất. Tại thời điểm viết bài này là phiên bản 9.2.2

wget http://ftp.postgresql.org/pub/source/v9.2.2/postgresql-9.2.2.tar.gz tar xzf postgresql-9.2.2.tar.gz
Bây giờ chúng ta có một thư mục với các nguồn của cơ sở dữ liệu tuyệt đẹp này.
Theo mặc định, các tệp cơ sở dữ liệu sẽ được cài đặt trong thư mục / usr / local / pgsql, nhưng thư mục này có thể được thay đổi bằng cách chỉ định

Tiền tố = / path / to / pgsql
trước lệnh ./configure
Bạn có thể chỉ định trình biên dịch C ++ trước khi xây dựng

Xuất CC = gcc
PostgeSQL có thể sử dụng thư viện readline nếu bạn không có nó và không muốn cài đặt nó, chỉ cần chỉ định tùy chọn

Không có dòng đọc
Tôi hy vọng mọi người có Autotools? Sau đó chuyển tiếp đến lắp ráp:

cd postgresql-9.2.2 ./configure --without-readline sudo làm cho quá trình cài đặt trở nên sạch sẽ
Tất cả các quý ông! Xin chúc mừng!

Cài đặt

Chúng tôi cần chỉ định kho dữ liệu của cơ sở dữ liệu của chúng tôi (cụm) và chạy nó.

Có một lưu ý - chủ sở hữu của thư mục dữ liệu và người dùng có thể chạy cơ sở dữ liệu không được root. Điều này được thực hiện vì sự bảo mật của hệ thống. Do đó, chúng tôi sẽ tạo một người dùng đặc biệt
sudo useradd postgres -p postgres -U -m
Và sau đó mọi thứ rõ ràng

sudo chown -R postgres: postgres / usr / local / pgsql
Quy trình quan trọng. Chúng ta phải khởi tạo cụm cơ sở dữ liệu. Chúng tôi phải làm điều này thay mặt cho người dùng postgres

Initdb -D / usr / local / pgsql / data
Bây giờ chúng ta cần thêm khởi động PostgreSQL để tự động khởi động. Có một tập lệnh được tạo sẵn cho việc này và nó nằm trong postgresql-9.2.2 / Contrib / start-scripts / linux
Bạn có thể mở tệp này và chú ý đến các biến sau:

  • tiếp đầu ngữ- đây là nơi chúng tôi đặt PostgreSQL và đặt nó trong ./configure
  • PGDATA là nơi lưu trữ cụm cơ sở dữ liệu và nơi người dùng postgres của chúng tôi có quyền truy cập vào
  • PGUSER- đây là cùng một người dùng mà mọi thứ sẽ thay mặt họ hoạt động
Nếu mọi thứ đều đúng, hãy thêm tập lệnh của chúng tôi vào init.d

sudo cp ./postgresql-9.2.2/contrib/start-scripts/linux /etc/init.d/postgres sudo update-rc.d postgres mặc định
Khởi động lại hệ thống để kiểm tra xem tập lệnh của chúng tôi có đang hoạt động hay không.
đi vào

/ usr / local / pgsql / bin / psql -U postgres
Và nếu cửa sổ làm việc với cơ sở dữ liệu xuất hiện, thì quá trình thiết lập đã thành công! Xin chúc mừng!
Theo mặc định, một cơ sở dữ liệu có tên là postgres được tạo.

# LOẠI CƠ SỞ DỮ LIỆU NGƯỜI DÙNG PHƯƠNG PHÁP ĐỊA CHỈ NGƯỜI DÙNG cục bộ tất cả máy chủ lưu trữ tin cậy tất cả tất cả máy chủ lưu trữ tin cậy 127.0.0.1/32 tất cả :: 1/128 máy chủ tin cậy
Dòng đầu tiên chịu trách nhiệm về kết nối cục bộ, dòng thứ hai - dành cho kết nối về giao thức IPv4 và dòng thứ ba - dành cho giao thức IPv6.
Tham số cuối cùng chỉ là phương thức ủy quyền. Chúng tôi sẽ xem xét nó (chỉ những cái chính)

  • Lòng tin- Quyền truy cập vào cơ sở dữ liệu có thể được thực hiện bởi bất kỳ ai dưới bất kỳ tên nào có liên quan đến nó.
  • Từ chối- từ chối vô điều kiện! Điều này phù hợp để lọc các địa chỉ IP nhất định.
  • mật khẩu mở khóa- Yêu cầu nhập mật khẩu. Không phù hợp với người dùng cục bộ, chỉ những người dùng được tạo bằng lệnh CREATE USER
  • danh tính- chỉ cho phép người dùng đã đăng ký trong tệp /usr/local/pgsql/data/pg_ident.conf kết nối với cơ sở dữ liệu.
Tôi sẽ nói sơ qua về những tiện ích chính sẽ hữu ích trong công việc của bạn.

Tiện ích cơ sở dữ liệu

pg_config
Trả về thông tin về phiên bản PostgreSQL hiện được cài đặt.
initdb
Khởi tạo một kho dữ liệu mới (cụm cơ sở dữ liệu). Một cụm là một tập hợp các cơ sở dữ liệu được quản lý bởi một phiên bản máy chủ duy nhất. initdb phải được chạy với tư cách là chủ sở hữu tương lai của máy chủ (như trên thay mặt cho postgres).
pg_ctl
Kiểm soát quá trình chạy của máy chủ PostgreSQL. Cho phép bạn khởi động, khởi động lại, dừng máy chủ, chỉ định tệp nhật ký, v.v.
psql
Khách hàng để làm việc với cơ sở dữ liệu dưa. Cho phép bạn thực hiện các hoạt động SQL.
tạo rab
Tạo một cơ sở dữ liệu mới. Theo mặc định, cơ sở dữ liệu được tạo thay mặt cho người dùng chạy lệnh. Tuy nhiên, để chỉ định một cái khác, tùy chọn -O phải được sử dụng (nếu người dùng có các đặc quyền cần thiết để làm như vậy). Trên thực tế, nó là một trình bao bọc SQL cho lệnh CREATE DATABASE.
dropdb
Xóa cơ sở dữ liệu. Nó là một trình bao bọc SQL cho lệnh DROP DATABASE.
tạo người dùng
Thêm một người dùng cơ sở dữ liệu mới. Nó là một trình bao bọc SQL cho lệnh CREATE ROLE.
dropuser
Xóa người dùng cơ sở dữ liệu. Nó là một trình bao bọc SQL cho lệnh DROP ROLE.
createelang
Thêm ngôn ngữ lập trình mới vào cơ sở dữ liệu PostgreSQL. Nó là một trình bao bọc SQL cho lệnh TẠO NGÔN NGỮ.
droplang
Xóa một ngôn ngữ lập trình. Nó là một trình bao bọc SQL cho lệnh DROP LANGUAGE.
pg_dump
Tạo bản sao lưu (kết xuất) cơ sở dữ liệu vào một tệp.
pg_restore
Khôi phục bản sao lưu (kết xuất) của cơ sở dữ liệu từ một tệp.
pg_dumpall
Tạo bản sao lưu (kết xuất) của toàn bộ cụm vào một tệp.
reindexdb
Lập chỉ mục lại cơ sở dữ liệu. Nó là một trình bao bọc SQL cho lệnh REINDEX.
clusterdb
Thực hiện gộp các bảng trong cơ sở dữ liệu. Nó là một trình bao bọc SQL cho lệnh CLUSTER.
chân không
Trình thu gom rác và trình tối ưu hóa cơ sở dữ liệu. Nó là một trình bao bọc SQL cho lệnh VACUUM.

Người quản lý cơ sở

Đối với trình quản lý để làm việc với cơ sở dữ liệu, tức là trình quản lý php là
  • hướng dẫn

Tôi muốn tạo một sổ tay Hướng dẫn Bắt đầu toàn diện tuyệt vời mà không có bất kỳ sự rườm rà nào, nhưng bao gồm các tính năng cơ bản dành cho người mới bắt đầu trong hệ thống PostgreSQL trên Linux.

PostgreSQL là một hệ quản trị cơ sở dữ liệu quan hệ đối tượng (ORDBMS) dựa trên POSTGRES, phiên bản 4.2, được phát triển bởi Khoa Khoa học Máy tính của Đại học California tại Berkeley.

PostgreSQL là mã nguồn mở hậu duệ của mã Berkeley gốc. Nó hỗ trợ hầu hết các tiêu chuẩn SQL và cung cấp nhiều tính năng hiện đại:

  • Truy vấn phức tạp
  • Kiểm soát đồng thời với đa vũ trụ
Ngoài ra, PostgreSQL có thể được người dùng mở rộng theo nhiều cách, ví dụ: bằng cách thêm mới
  • Loại dữ liệu
  • chức năng
  • các nhà khai thác
  • Chức năng tổng hợp
  • chỉ số phương pháp
  • ngôn ngữ thủ tục

Lắp ráp và cài đặt

Giống như tất cả những người hâm mộ PostgreSQL chính thống, tất nhiên chúng tôi sẽ xây dựng và không tải xuống các gói làm sẵn (ví dụ: kho Debian không có phiên bản mới nhất). Có rất nhiều phiên bản ở đây, tất nhiên tốt nhất là tải phiên bản mới nhất. Tại thời điểm viết bài này là phiên bản 9.2.2

wget http://ftp.postgresql.org/pub/source/v9.2.2/postgresql-9.2.2.tar.gz tar xzf postgresql-9.2.2.tar.gz
Bây giờ chúng ta có một thư mục với các nguồn của cơ sở dữ liệu tuyệt đẹp này.
Theo mặc định, các tệp cơ sở dữ liệu sẽ được cài đặt trong thư mục / usr / local / pgsql, nhưng thư mục này có thể được thay đổi bằng cách chỉ định

Tiền tố = / path / to / pgsql
trước lệnh ./configure
Bạn có thể chỉ định trình biên dịch C ++ trước khi xây dựng

Xuất CC = gcc
PostgeSQL có thể sử dụng thư viện readline nếu bạn không có nó và không muốn cài đặt nó, chỉ cần chỉ định tùy chọn

Không có dòng đọc
Tôi hy vọng mọi người có Autotools? Sau đó chuyển tiếp đến lắp ráp:

cd postgresql-9.2.2 ./configure --without-readline sudo làm cho quá trình cài đặt trở nên sạch sẽ
Tất cả các quý ông! Xin chúc mừng!

Cài đặt

Chúng tôi cần chỉ định kho dữ liệu của cơ sở dữ liệu của chúng tôi (cụm) và chạy nó.

Có một lưu ý - chủ sở hữu của thư mục dữ liệu và người dùng có thể chạy cơ sở dữ liệu không được root. Điều này được thực hiện vì sự bảo mật của hệ thống. Do đó, chúng tôi sẽ tạo một người dùng đặc biệt
sudo useradd postgres -p postgres -U -m
Và sau đó mọi thứ rõ ràng

sudo chown -R postgres: postgres / usr / local / pgsql
Quy trình quan trọng. Chúng ta phải khởi tạo cụm cơ sở dữ liệu. Chúng tôi phải làm điều này thay mặt cho người dùng postgres

Initdb -D / usr / local / pgsql / data
Bây giờ chúng ta cần thêm khởi động PostgreSQL để tự động khởi động. Có một tập lệnh được tạo sẵn cho việc này và nó nằm trong postgresql-9.2.2 / Contrib / start-scripts / linux
Bạn có thể mở tệp này và chú ý đến các biến sau:

  • tiếp đầu ngữ- đây là nơi chúng tôi đặt PostgreSQL và đặt nó trong ./configure
  • PGDATA là nơi lưu trữ cụm cơ sở dữ liệu và nơi người dùng postgres của chúng tôi có quyền truy cập vào
  • PGUSER- đây là cùng một người dùng mà mọi thứ sẽ thay mặt họ hoạt động
Nếu mọi thứ đều đúng, hãy thêm tập lệnh của chúng tôi vào init.d

sudo cp ./postgresql-9.2.2/contrib/start-scripts/linux /etc/init.d/postgres sudo update-rc.d postgres mặc định
Khởi động lại hệ thống để kiểm tra xem tập lệnh của chúng tôi có đang hoạt động hay không.
đi vào

/ usr / local / pgsql / bin / psql -U postgres
Và nếu cửa sổ làm việc với cơ sở dữ liệu xuất hiện, thì quá trình thiết lập đã thành công! Xin chúc mừng!
Theo mặc định, một cơ sở dữ liệu có tên là postgres được tạo.

# LOẠI CƠ SỞ DỮ LIỆU NGƯỜI DÙNG PHƯƠNG PHÁP ĐỊA CHỈ NGƯỜI DÙNG cục bộ tất cả máy chủ lưu trữ tin cậy tất cả tất cả máy chủ lưu trữ tin cậy 127.0.0.1/32 tất cả :: 1/128 máy chủ tin cậy
Dòng đầu tiên chịu trách nhiệm về kết nối cục bộ, dòng thứ hai - dành cho kết nối về giao thức IPv4 và dòng thứ ba - dành cho giao thức IPv6.
Tham số cuối cùng chỉ là phương thức ủy quyền. Chúng tôi sẽ xem xét nó (chỉ những cái chính)

  • Lòng tin- Quyền truy cập vào cơ sở dữ liệu có thể được thực hiện bởi bất kỳ ai dưới bất kỳ tên nào có liên quan đến nó.
  • Từ chối- từ chối vô điều kiện! Điều này phù hợp để lọc các địa chỉ IP nhất định.
  • mật khẩu mở khóa- Yêu cầu nhập mật khẩu. Không phù hợp với người dùng cục bộ, chỉ những người dùng được tạo bằng lệnh CREATE USER
  • danh tính- chỉ cho phép người dùng đã đăng ký trong tệp /usr/local/pgsql/data/pg_ident.conf kết nối với cơ sở dữ liệu.
Tôi sẽ nói sơ qua về những tiện ích chính sẽ hữu ích trong công việc của bạn.

Tiện ích cơ sở dữ liệu

pg_config
Trả về thông tin về phiên bản PostgreSQL hiện được cài đặt.
initdb
Khởi tạo một kho dữ liệu mới (cụm cơ sở dữ liệu). Một cụm là một tập hợp các cơ sở dữ liệu được quản lý bởi một phiên bản máy chủ duy nhất. initdb phải được chạy với tư cách là chủ sở hữu tương lai của máy chủ (như trên thay mặt cho postgres).
pg_ctl
Kiểm soát quá trình chạy của máy chủ PostgreSQL. Cho phép bạn khởi động, khởi động lại, dừng máy chủ, chỉ định tệp nhật ký, v.v.
psql
Khách hàng để làm việc với cơ sở dữ liệu dưa. Cho phép bạn thực hiện các hoạt động SQL.
tạo rab
Tạo một cơ sở dữ liệu mới. Theo mặc định, cơ sở dữ liệu được tạo thay mặt cho người dùng chạy lệnh. Tuy nhiên, để chỉ định một cái khác, tùy chọn -O phải được sử dụng (nếu người dùng có các đặc quyền cần thiết để làm như vậy). Trên thực tế, nó là một trình bao bọc SQL cho lệnh CREATE DATABASE.
dropdb
Xóa cơ sở dữ liệu. Nó là một trình bao bọc SQL cho lệnh DROP DATABASE.
tạo người dùng
Thêm một người dùng cơ sở dữ liệu mới. Nó là một trình bao bọc SQL cho lệnh CREATE ROLE.
dropuser
Xóa người dùng cơ sở dữ liệu. Nó là một trình bao bọc SQL cho lệnh DROP ROLE.
createelang
Thêm ngôn ngữ lập trình mới vào cơ sở dữ liệu PostgreSQL. Nó là một trình bao bọc SQL cho lệnh TẠO NGÔN NGỮ.
droplang
Xóa một ngôn ngữ lập trình. Nó là một trình bao bọc SQL cho lệnh DROP LANGUAGE.
pg_dump
Tạo bản sao lưu (kết xuất) cơ sở dữ liệu vào một tệp.
pg_restore
Khôi phục bản sao lưu (kết xuất) của cơ sở dữ liệu từ một tệp.
pg_dumpall
Tạo bản sao lưu (kết xuất) của toàn bộ cụm vào một tệp.
reindexdb
Lập chỉ mục lại cơ sở dữ liệu. Nó là một trình bao bọc SQL cho lệnh REINDEX.
clusterdb
Thực hiện gộp các bảng trong cơ sở dữ liệu. Nó là một trình bao bọc SQL cho lệnh CLUSTER.
chân không
Trình thu gom rác và trình tối ưu hóa cơ sở dữ liệu. Nó là một trình bao bọc SQL cho lệnh VACUUM.

Người quản lý cơ sở

Đối với trình quản lý để làm việc với cơ sở dữ liệu, tức là trình quản lý php là

Bài viết này không tuyên bố là hoàn chỉnh trong tất cả các tùy chọn cấu hình PostgreSQL và tôi không đề cập đến tất cả các chế độ hoạt động của cơ sở dữ liệu trong thử nghiệm so sánh. Đối với những ai quan tâm, tôi khuyên bạn nên nghiên cứu cuốn sách tại liên kết.

Giới thiệu

Tôi đã làm việc nhiều với PostgreSQL và thấy nó là một hệ thống cơ sở dữ liệu tuyệt vời. Tôi có một cơ sở dữ liệu làm việc nhiều gigabyte (không phải 1C) xử lý ngay lập tức một lượng lớn dữ liệu. PostgreSQL tận dụng tốt các chỉ mục, xử lý đồng thời tốt, chức năng thủ tục được lưu trữ là hàng đầu, có các công cụ quản trị và hiệu suất tốt và cộng đồng đã tạo ra các tiện ích hữu ích. Nhưng tôi đã rất ngạc nhiên khi biết rằng nhiều quản trị viên 1C có ý kiến ​​về PostgreSQL không ngang bằng, rằng nó chậm và hầu như không tốt hơn phiên bản tệp của cơ sở dữ liệu, và chỉ MSSQL mới có thể cứu được ngày.

Sau khi nghiên cứu vấn đề, tôi đã tìm thấy nhiều bài viết về cài đặt từng bước PostgreSQL cho người giả, cả trên Linux và Windows. Nhưng phần lớn các bài báo mô tả cài đặt là "cài đặt - tạo cơ sở", và hoàn toàn không đề cập đến vấn đề cấu hình. Trong phần còn lại, cấu hình chỉ được đề cập ở mức độ "quy định các giá trị như vậy", thực tế mà không giải thích tại sao.

Và nếu cách tiếp cận "cài đặt một nút" có thể áp dụng cho MSSQL và nói chung cho nhiều sản phẩm dành cho Windows, thì thật không may, nó không áp dụng cho PostgreSQL. Cài đặt mặc định giới hạn nghiêm ngặt việc sử dụng bộ nhớ để bạn có thể cài đặt nó ngay cả trên máy tính và nó không ảnh hưởng đến phần còn lại của phần mềm ở đó. PostgreSQL phải được cấu hình cho một hệ thống cụ thể và chỉ khi đó, nó mới có thể tự hiển thị tốt nhất. Trong những trường hợp đặc biệt khó, bạn có thể điều chỉnh cài đặt PostgreSQL, cơ sở dữ liệu và hệ thống tệp cho nhau, nhưng điều này áp dụng ở mức độ lớn hơn đối với các hệ thống Linux, nơi có nhiều tùy chọn hơn để cấu hình mọi thứ và mọi thứ.

Cần nhắc lại rằng đối với 1C, tập hợp PostgreSQL từ các nhà phát triển DBMS, chỉ được tập hợp từ các văn bản nguồn 1C đã được vá, sẽ không hoạt động. Các bộ lắp ráp tương thích làm sẵn được cung cấp bởi 1C (thông qua đĩa ITS và một tài khoản cho những người đăng ký hỗ trợ) và EterSoft

Thử nghiệm đã được thực hiện trên Windows, nhưng tất cả các đề xuất cấu hình không dành riêng cho nền tảng và áp dụng cho bất kỳ hệ điều hành nào.

Kiểm tra và so sánh

Khi kiểm tra, tôi không đặt nhiệm vụ kiểm tra ở tất cả các chế độ và kịch bản, chỉ kiểm tra sơ bộ cấu hình thành công.

Để thử nghiệm, tôi đã sử dụng cấu hình sau:
Máy chủ: Win7, Core i5-760 2,8MHz, 4 nhân, RAM 12GB, VMWare 10
Ảo: Win7 x64, 2 lõi, RAM 4GB, ổ cứng vật lý riêng biệt để lưu trữ cơ sở dữ liệu (không phải SSD)
MS SQL Express 2014
PostgreSQL EtherSoft 9.2.1
1C 8.3.5 1383

Cơ sở dữ liệu đã được sử dụng, dt-dỡ 780Mb.
Sau khi khôi phục cơ sở dữ liệu:
kích thước tệp 1CD trong phiên bản tệp - 10GB,
Kích thước cơ sở dữ liệu PostgreSQL - 8GB,
Kích thước cơ sở dữ liệu MSSQL - 6,7GB.

Đối với thử nghiệm, tôi đã sử dụng yêu cầu lựa chọn các thỏa thuận đối tác (21k) với lựa chọn các chi tiết bổ sung từ các sổ đăng ký khác nhau; đối với mỗi thỏa thuận, một lựa chọn riêng biệt thực sự được thực hiện từ các sổ đăng ký. Tôi đã sử dụng cấu hình có sẵn - được sửa đổi nhiều trên cơ sở Kế toán 3.0.

Trong quá trình thử nghiệm, tôi đã thực hiện yêu cầu với một và hai khách hàng nhiều lần cho đến khi thu được kết quả ổn định. Tôi đã bỏ qua những lần chạy đầu tiên.

Thử nghiệm một khách hàng:

Lựa chọn trên máy chủ từ phiên bản tệp với vị trí của đế trên SSD - 31 giây
Lựa chọn từ phiên bản tệp trong máy ảo (từ đĩa cứng) - 46 giây
Lấy mẫu từ cơ sở dữ liệu MSSQL - lần vượt qua đầu tiên - 25 giây hoặc 9 giây (dường như tùy thuộc vào mức độ liên quan của bộ đệm DBMS) (mức tiêu thụ bộ nhớ của quy trình DBMS là khoảng 1,3 GB)
Tìm nạp từ PostgreSQL với cài đặt mặc định - 43 giây (tiêu thụ bộ nhớ không vượt quá 80MB cho mỗi kết nối)
Tìm nạp từ PostgreSQL được tối ưu hóa - 21 giây (mức tiêu thụ bộ nhớ là 120MB cho mỗi kết nối)

Thử nghiệm với hai khách hàng:

Lựa chọn trên máy chủ từ phiên bản tệp với vị trí của cơ sở dữ liệu trên SSD - 34 giây mỗi
Lựa chọn từ phiên bản tệp trong máy ảo (từ đĩa cứng) - 56 giây mỗi phiên bản
Lấy mẫu từ cơ sở dữ liệu MSSQL - mỗi giây 50 hoặc 20 (dường như tùy thuộc vào mức độ liên quan của bộ đệm DBMS)
Mẫu từ PostgreSQL với cài đặt mặc định - 60 giây cho mỗi cài đặt
Lấy mẫu từ PostgreSQL được tối ưu hóa - 40 giây mỗi lần

Ghi chú thử nghiệm:

  1. Sau khi bổ sung lõi thứ ba, các biến thể PostgreSQL và MSSQL bắt đầu hoạt động trong thử nghiệm "hai ứng dụng khách" gần như với hiệu suất của thử nghiệm "ứng dụng khách duy nhất", tức là song song thành công. Điều gì đã ngăn cản họ thực hiện song song công việc trên hai lõi vẫn còn là một bí ẩn đối với tôi.
  2. MSSQL chiếm rất nhiều bộ nhớ cùng một lúc, PostgreSQL yêu cầu ít hơn nhiều ở tất cả các chế độ và ngay sau khi hoàn thành truy vấn, nó đã giải phóng gần như tất cả.
  3. MSSQL chạy như một quá trình duy nhất. PostgreSQL bắt đầu một quy trình riêng biệt cho mỗi kết nối + quy trình dịch vụ. Điều này cho phép ngay cả phiên bản 32-bit cũng tiết kiệm bộ nhớ khi xử lý các yêu cầu từ nhiều máy khách.
  4. Việc tăng bộ nhớ cho cài đặt PostgreSQL trên các giá trị bên dưới không dẫn đến sự gia tăng đáng kể về hiệu suất.
  5. Các thử nghiệm đầu tiên trong mọi trường hợp đều mất nhiều thời gian hơn so với các phép đo tiếp theo, tôi không thực hiện các phép đo đặc biệt, nhưng MSSQL chủ quan bắt đầu nhanh hơn.

Cấu hình PostgreSQL

Có một cuốn sách tuyệt vời bằng tiếng Nga về cấu hình và tối ưu hóa PostgreSQL: Mọi người chăn nuôi voi đều đánh dấu liên kết này rất hợp lý. Cuốn sách mô tả nhiều kỹ thuật để tối ưu hóa DBMS, tạo ra các hệ thống phân tán và chịu được lỗi. Nhưng bây giờ chúng ta sẽ xem xét một thứ hữu ích cho mọi người - cấu hình sử dụng bộ nhớ. PostgreSQL sẽ không sử dụng nhiều bộ nhớ hơn mức cho phép của cài đặt và với cài đặt mặc định PostgreSQL sử dụng bộ nhớ tối thiểu. Trong trường hợp này, bạn không nên chỉ định nhiều bộ nhớ hơn khả năng sử dụng - hệ thống sẽ bắt đầu sử dụng tệp hoán đổi với tất cả các hậu quả đáng buồn sau đó đối với hiệu suất máy chủ. Một số mẹo để định cấu hình PostgreSQL được cung cấp trên ITS CD.

Trên Windows, các tệp cấu hình PostgreSQL nằm trong thư mục cài đặt trong thư mục Dữ liệu:

  • postgresql.conf- tệp chính có cài đặt DBMS
  • pg_hba.conf- tệp có cài đặt truy cập cho máy khách. Đặc biệt, ở đây bạn có thể chỉ định người dùng nào từ địa chỉ IP nào có thể kết nối với cơ sở dữ liệu nhất định và liệu có cần kiểm tra mật khẩu của người dùng hay không và nếu cần, bằng phương pháp nào.
  • pg_ident.conf- một tệp có chức năng chuyển đổi tên người dùng từ hệ thống sang nội bộ (không chắc rằng hầu hết người dùng sẽ cần nó)

Các tệp văn bản có thể được chỉnh sửa bằng notepad. Các dòng bắt đầu bằng # được coi là bình luận và bị bỏ qua.

Các thông số liên quan đến dung lượng bộ nhớ có thể được bổ sung bằng các hậu tố kB, MB, GB - kilobyte, megabyte, gigabyte, ví dụ: 128MB. Các thông số mô tả khoảng thời gian có thể được bổ sung bằng các hậu tố ms, s, min, h, d - mili giây, giây, phút, giờ, ngày, ví dụ: 5 phút

Nếu bạn quên mật khẩu để đăng bài - không thành vấn đề, bạn có thể viết thư pg_hba.conf hàng:

Lưu trữ tất cả tin cậy 127.0.0.1/32

Và kết nối bởi bất kỳ người dùng nào (ví dụ: postgres) tới DBMS trên máy cục bộ tại 127.0.0.1 mà không cần kiểm tra mật khẩu.

Tối ưu hóa sử dụng bộ nhớ

Cài đặt sử dụng bộ nhớ nằm trong postgresql.conf

Giá trị tối ưu của các tham số phụ thuộc vào dung lượng RAM trống, kích thước của cơ sở dữ liệu và các phần tử riêng lẻ của cơ sở dữ liệu (bảng và chỉ mục), mức độ phức tạp của các truy vấn (về nguyên tắc, bạn nên dựa vào các truy vấn khá phức tạp - nhiều kết nối trong truy vấn là một kịch bản điển hình) và số lượng máy khách hoạt động đồng thời. Nhân tiện, PostgreSQL lưu trữ các bảng và chỉ mục cơ sở dữ liệu trong các tệp riêng biệt (<каталог установки PG>\ data \ base \<идентификатор БД>\), và kích thước của các đối tượng có thể được ước tính. Bạn cũng có thể sử dụng tiện ích pgAdmin đi kèm để kết nối với cơ sở dữ liệu, mở "Lược đồ" - "công khai" và tạo báo cáo thống kê cho phần tử "Bảng".

Tiếp theo, tôi sẽ đưa ra các giá trị chỉ định để bạn có thể bắt đầu thiết lập. Sau khi thiết lập ban đầu, bạn nên chạy máy chủ ở các chế độ hoạt động và theo dõi mức tiêu thụ bộ nhớ. Tùy thuộc vào kết quả thu được, có thể cần điều chỉnh các giá trị tham số.

Khi thiết lập máy chủ để thử nghiệm, tôi đã dựa trên các tính toán sau:
RAM chỉ 4GB. Người tiêu dùng - Hệ điều hành Windows, máy chủ 1C, PostgreSQL và bộ đệm đĩa hệ thống. Tôi tiếp tục thực tế là có thể cấp phát tối đa 2,5 GB RAM cho DBMS

Giá trị có thể được chỉ định bằng các hậu tố kB, MB, GB (giá trị tính bằng kilobyte, megabyte hoặc gigabyte). Sau khi thay đổi các giá trị, bạn cần khởi động lại dịch vụ PostgreSQL.

shared_buffers - Bộ đệm chia sẻ máy chủ

Kích thước của bộ đệm đọc / ghi PostgreSQL được chia sẻ bởi tất cả các kết nối. Nếu dữ liệu không có trong bộ nhớ cache, nó sẽ được đọc từ đĩa (có lẽ nó sẽ được lưu vào bộ nhớ cache của Hệ điều hành)

Nếu không có đủ không gian đệm để lưu trữ dữ liệu công việc được sử dụng thường xuyên, dữ liệu đó sẽ liên tục được ghi vào và đọc từ bộ nhớ cache hoặc đĩa của hệ điều hành, điều này sẽ có tác động rất tiêu cực đến hiệu suất.

Nhưng đây không phải là tất cả bộ nhớ cần thiết cho công việc, bạn không nên chỉ định giá trị quá lớn, nếu không sẽ không còn bộ nhớ cho việc thực thi thực tế các yêu cầu của khách hàng (và càng nhiều thì mức tiêu thụ bộ nhớ càng cao) và cho hệ điều hành và các ứng dụng khác, ví dụ, máy chủ xử lý 1C. Máy chủ cũng dựa vào bộ đệm của hệ điều hành và cố gắng không lưu trong bộ đệm của nó những gì có nhiều khả năng được hệ thống lưu trong bộ đệm.

Bài kiểm tra được sử dụng

shared_buffers = 512MB

work_mem- bộ nhớ để sắp xếp, tổng hợp dữ liệu, v.v.

Được phân bổ theo yêu cầu, có thể nhiều lần đối với các yêu cầu phức tạp. Nếu không có đủ bộ nhớ, PostgreSQL sẽ sử dụng các tệp tạm thời. Nếu giá trị quá cao, có thể có quá mức RAM và hệ điều hành sẽ bắt đầu sử dụng tệp hoán trang với hiệu suất giảm tương ứng.

Có một khuyến nghị khi tính toán lấy dung lượng bộ nhớ khả dụng trừ đi shared_buffers và chia cho số lượng yêu cầu được thực hiện đồng thời. Trong trường hợp truy vấn phức tạp, số chia phải được tăng lên, tức là giảm kết quả. Đối với trường hợp đang được xem xét, dựa trên 5 người dùng đang hoạt động (2,5Gb-0,5Gb (shared_buffers)) / 5 = 400Mb. Nếu DBMS coi các truy vấn quá phức tạp hoặc nếu có thêm người dùng xuất hiện, thì giá trị sẽ cần được giảm xuống.

Đối với các truy vấn đơn giản, giá trị nhỏ là đủ - lên đến vài megabyte, nhưng đối với các truy vấn phức tạp (và đây là trường hợp điển hình cho 1C), sẽ cần nhiều hơn. Khuyến nghị - đối với bộ nhớ 1-4GB, bạn có thể sử dụng các giá trị 32-128MB. Trong bài kiểm tra tôi đã sử dụng

work_mem = 128MB

Maint_work_mem- bộ nhớ cho các lệnh thu gom rác, thống kê, tạo chỉ mục.

Bạn nên đặt giá trị bằng 50-75% kích thước của bảng hoặc chỉ mục lớn nhất, nhưng để có đủ bộ nhớ cho hệ thống và ứng dụng. Bạn nên đặt các giá trị lớn hơn work_mem. Trong bài kiểm tra tôi đã sử dụng
Maint_work_mem = 192MB

temp_buffers- đệm cho các đối tượng tạm thời, chủ yếu cho các bảng tạm thời.

Bạn có thể cài đặt khoảng 16 MB. Trong bài kiểm tra tôi đã sử dụng
temp_buffers = 32MB

effect_cache_size- kích thước gần đúng của bộ đệm đĩa của hệ thống tệp.

Trình tối ưu hóa sử dụng giá trị này khi xây dựng kế hoạch truy vấn, để ước tính khả năng dữ liệu nằm trong bộ đệm ẩn (với quyền truy cập ngẫu nhiên nhanh) hoặc trên đĩa chậm. Trong Windows, lượng bộ nhớ hiện tại được phân bổ cho bộ đệm có thể được xem trong trình quản lý tác vụ.

Autovacuum - "thu gom rác"

PostgreSQL, như một đại diện điển hình của các DBMS "đã được phiên bản hóa" (trái ngược với việc chặn), không chặn độc lập khi thay đổi dữ liệu bảng và bản ghi từ việc đọc các giao dịch (trong trường hợp 1C, máy chủ 1C tự thực hiện điều này). Thay vào đó, một bản sao của bản ghi có thể thay đổi được tạo ra, bản ghi này sẽ hiển thị cho các giao dịch tiếp theo, trong khi các bản ghi hiện tại tiếp tục thấy dữ liệu có liên quan khi bắt đầu giao dịch của họ. Kết quả là, các bảng tích lũy dữ liệu lỗi thời - các phiên bản trước đó của các bản ghi đã thay đổi. Để DBMS có thể sử dụng không gian giải phóng, cần phải thực hiện "thu dọn rác" - để xác định bản ghi nào không còn được sử dụng nữa. Điều này có thể được thực hiện một cách rõ ràng bằng một lệnh SQL MÁY HÚT BỤI hoặc đợi cho đến khi bảng được xử lý bởi bộ thu gom rác tự động - AUTOVACUUM. Ngoài ra, cho đến một phiên bản nhất định, thu thập rác được kết hợp với thu thập thống kê (bộ lập lịch sử dụng dữ liệu về số lượng bản ghi trong bảng và phân phối các giá trị trường được lập chỉ mục để xây dựng kế hoạch truy vấn tối ưu). Một mặt, việc thu gom rác là cần thiết để các bảng không phát triển và sử dụng không gian đĩa một cách hiệu quả. Mặt khác, quá trình thu gom rác đột ngột bắt đầu sẽ đặt thêm tải lên đĩa và bảng, dẫn đến tăng thời gian thực hiện truy vấn. Một hiệu ứng tương tự được tạo ra bằng cách thu thập số liệu thống kê tự động (rõ ràng, nó có thể được khởi chạy bằng lệnh PHÂN TÍCH hoặc cùng với việc thu gom rác PHÂN TÍCH CHÂN KHÔNG). Và mặc dù PostgreSQL cải thiện các cơ chế này từ phiên bản này sang phiên bản khác để giảm thiểu tác động tiêu cực đến hiệu suất (ví dụ: trong các phiên bản trước đó, tính năng thu gom rác đã chặn hoàn toàn quyền truy cập vào bảng, kể từ phiên bản 9.0, hoạt động MÁY HÚT BỤI tăng tốc), có một cái gì đó để cấu hình.

Bạn có thể tắt hoàn toàn autovacuum bằng tham số:

autovacuum = tắt

Ngoài ra, để Autovacuum hoạt động, tham số track_counts = on là bắt buộc, nếu không sẽ không hoạt động.

Cả hai tùy chọn đều được bật theo mặc định. Trên thực tế, autovacuum không thể bị vô hiệu hóa hoàn toàn - ngay cả khi autovacuum = tắt, đôi khi (sau một số lượng lớn giao dịch) autovacuum sẽ khởi động.

Bình luận: MÁY HÚT BỤI thường không làm giảm kích thước của tệp bảng, chỉ đánh dấu các vùng trống, có thể sử dụng lại. Nếu bạn muốn giải phóng thêm dung lượng và giảm thiểu dung lượng ổ đĩa bị chiếm dụng, bạn sẽ cần lệnh CHÂN KHÔNG ĐẦY ĐỦ. Tùy chọn này khóa quyền truy cập vào bảng trong suốt thời gian chạy và thông thường không bắt buộc. Bạn có thể đọc thêm về cách sử dụng lệnh VACUUM trong tài liệu (bằng tiếng Anh).

Nếu Autovacuum không bị tắt hoàn toàn, bạn có thể định cấu hình ảnh hưởng của nó đối với việc thực thi truy vấn với các tham số sau:

autovacuum_max_workers- số quá trình làm sạch tối đa chạy song song.

autovacuum_naptime - khoảng thời gian tối thiểu trước đó autovacuum sẽ không bắt đầu. Giá trị mặc định là 1 phút. Bạn có thể tăng nó lên, sau đó nếu dữ liệu thay đổi thường xuyên, phân tích sẽ được thực hiện ít thường xuyên hơn.

autovacuum_vacuum_threshold, - số lượng bản ghi đã sửa đổi hoặc bị xóa trong bảng cần thiết để bắt đầu quá trình thu gom rác MÁY HÚT BỤI hoặc thu thập số liệu thống kê PHÂN TÍCH. Giá trị mặc định là 50.

autovacuum_vacuum_scale_factor , autovacuum_analyze_scale_factor - hệ số từ kích thước của bảng trong bản ghi, được thêm vào autovacuum_vacuum_thresholdautovacuum_analyze_threshold tương ứng. Các giá trị mặc định lần lượt là 0,2 (tức là 20% số lượng mục nhập) và 0,1 (10%).

Hãy xem xét một ví dụ với một bảng có 10.000 mục nhập. Sau đó, với cài đặt mặc định, sau 50 + 10000 * 0,1 = 1050 bản ghi được thay đổi hoặc xóa, thu thập thống kê sẽ được bắt đầu PHÂN TÍCH và sau những thay đổi năm 2050 - thu gom rác MÁY HÚT BỤI.

Nếu bạn tăng ngưỡng và scale_factor, phần phụ trợ sẽ ít chạy hơn, nhưng các bảng nhỏ có thể phát triển đáng kể. Nếu cơ sở dữ liệu chủ yếu bao gồm các bảng nhỏ, sự gia tăng tổng thể về dung lượng đĩa có thể đáng kể, vì vậy bạn có thể tăng các giá trị này một cách khôn ngoan.

Do đó, có thể hợp lý khi tăng khoảng thời gian autovacuum_naptime và tăng một chút ngưỡng và scale_factor. Trong cơ sở dữ liệu được tải, nó có thể là một giải pháp thay thế để tăng đáng kể scale_factor (giá trị 1 sẽ cho phép các bảng "phình to" lên một nửa) và đưa việc thực thi hàng ngày vào bộ lập lịch PHÂN TÍCH CHÂN KHÔNG trong khoảng thời gian tải cơ sở dữ liệu tối thiểu.

default_st Statistics_target - đặt số lượng thống kê được thu thập bằng lệnh PHÂN TÍCH. Giá trị mặc định là 100. Các giá trị lớn hơn làm tăng thời gian thực thi của lệnh ANALYZE, nhưng cho phép bộ lập lịch xây dựng các kế hoạch thực thi truy vấn hiệu quả hơn. Có khuyến nghị tăng lên 300.

Có thể quản lý hiệu suất AUTOVACUUM, làm cho nó dài hơn nhưng ít đánh thuế vào hệ thống hơn.

chân không_cost_page_hit- kích thước của "hình phạt" đối với việc xử lý một khối nằm trong shared_buffers. Liên quan đến sự cần thiết phải chặn quyền truy cập vào bộ đệm. Giá trị mặc định 1

chân không_cost_page_miss - kích thước của "hình phạt" để xử lý một khối trên đĩa. Liên kết với khóa bộ đệm, tìm kiếm dữ liệu trong bộ đệm, đọc dữ liệu từ đĩa. Giá trị mặc định 10

chân không_cost_trang_dirty- kích thước của "hình phạt" đối với việc sửa đổi khối. Liên quan đến nhu cầu chuyển dữ liệu đã sửa đổi vào đĩa. Giá trị mặc định 20

chân không_cost_limit- số lượng "hình phạt" tối đa, sau đó quá trình xây dựng có thể bị "đóng băng" trong thời gian chân không_cost_delay. Mặc định 200

chân không_cost_delay- thời gian để "đóng băng" quá trình thu gom rác khi đạt tới chân không_cost_limit. Giá trị mặc định 0ms

autovacuum_vacuum_cost_delay- thời gian để "đóng băng" quá trình thu gom rác cho autovacuum. Mặc định là 20ms. Nếu được đặt thành -1, chân không_cost_delay sẽ được sử dụng

autovacuum_vacuum_cost_limit- "hình phạt" tối đa cho autovacuum. Giá trị mặc định là -1 - giá trị của chân không_cost_limit được sử dụng

Báo cáo sử dụng chân không_cost_page_hit = 6, chân không_cost_limit = 100, autovacuum_vacuum_cost_delay = 200ms giảm tác động của AUTOVACUUM lên đến 80%, nhưng tăng gấp ba lần thời gian thực thi.

Thiết lập ghi đĩa

Khi một giao dịch hoàn tất, PostgreSQL bắt đầu ghi dữ liệu vào một nhật ký giao dịch WAL (ghi trước nhật ký) đặc biệt, và sau đó vào cơ sở dữ liệu sau khi dữ liệu nhật ký được đảm bảo sẽ được ghi vào đĩa. Cơ chế mặc định là fsync khi PostgreSQL cưỡng bức dữ liệu (của nhật ký) từ bộ nhớ cache của đĩa hệ điều hành vào đĩa và chỉ sau khi ghi thành công (nhật ký) thì máy khách mới được thông báo rằng giao dịch đã hoàn tất thành công. Sử dụng nhật ký giao dịch cho phép bạn hoàn tất giao dịch hoặc khôi phục cơ sở dữ liệu nếu xảy ra lỗi trong quá trình ghi dữ liệu.

Trong các hệ thống bận rộn với khối lượng ghi lớn, có thể hợp lý khi di chuyển nhật ký giao dịch sang một đĩa vật lý riêng biệt (nhưng không phải sang một phân vùng khác trên cùng một đĩa!). Để thực hiện việc này, bạn cần dừng DBMS, di chuyển thư mục pg_xlog đến một vị trí khác và tạo một liên kết tượng trưng ở vị trí cũ, ví dụ, bằng cách sử dụng tiện ích đường giao nhau. Far Manager (Alt-F6) cũng có thể tạo liên kết. Trong trường hợp này, bạn cần đảm bảo rằng vị trí mới có quyền truy cập cho người dùng đang chạy PostgreSQL (thường là postgres).

Với một số lượng lớn các hoạt động sửa đổi dữ liệu, có thể cần phải tăng giá trị của các phân đoạn điểm kiểm tra, kiểm soát lượng dữ liệu có thể chờ được chuyển từ nhật ký đến cơ sở dữ liệu. Giá trị mặc định là 3. Hãy nhớ rằng không gian được phân bổ cho nhật ký được tính theo công thức (điểm kiểm tra * 2 + 1) * 16 MB, với giá trị 32, sẽ yêu cầu hơn 1 GB dung lượng đĩa .

PostgreSQL chuyển dữ liệu từ bộ đệm tệp hệ điều hành sang đĩa sau mỗi lần kết thúc giao dịch ghi. Một mặt, điều này đảm bảo rằng dữ liệu trên đĩa luôn được cập nhật, mặt khác, hiệu suất giảm xuống với một số lượng lớn các giao dịch. Tắt hoàn toàn fsync có thể bằng cách chỉ định

fsync = tắt
full_page_writes = off

Bạn chỉ có thể làm điều này nếu bạn hoàn toàn tin tưởng vào thiết bị và UPS (nguồn điện liên tục). Nếu không, trong trường hợp hệ thống gặp sự cố, sẽ có nguy cơ nhận được cơ sở dữ liệu bị hỏng. Và trong mọi trường hợp, bộ điều khiển RAID có pin để cung cấp năng lượng cho bộ nhớ của dữ liệu được viết dưới đây cũng sẽ không ảnh hưởng gì.

Một giải pháp thay thế chắc chắn sẽ là sử dụng tham số

sync_commit = tắt

Trong trường hợp này, sau khi phản hồi thành công để hoàn thành giao dịch, có thể mất một khoảng thời gian trước khi nó được ghi an toàn vào đĩa. Trong trường hợp tắt đột ngột, cơ sở dữ liệu sẽ không bị phá hủy, nhưng dữ liệu của các giao dịch cuối cùng có thể bị mất.

Nếu bạn hoàn toàn không tắt fsync, bạn có thể chỉ định phương thức đồng bộ hóa trong một tham số. Bài viết từ đĩa ITS đề cập đến tiện ích pg_test_fsync, nhưng nó không có trong bản dựng PostgreSQL của tôi. Theo 1C, trong trường hợp của họ trong Windows, phương pháp này đã cho thấy một cách tối ưu open_datasync(Rõ ràng, phương pháp này được sử dụng theo mặc định).

Nếu nhiều giao dịch ghi nhỏ được sử dụng (trong trường hợp 1C, đây có thể là bản cập nhật hàng loạt của thư mục bên ngoài giao dịch), sự kết hợp của các tham số commit_delay (thời gian trễ hoàn thành giao dịch tính bằng micro giây, mặc định là 0) và commit_siblings (mặc định 5) có thể giúp đỡ. Khi các tùy chọn được bật, việc hoàn thành giao dịch có thể bị trì hoãn bởi thời gian commit_delay, nếu ít nhất các giao dịch commit_siblings hiện đang thực hiện. Trong trường hợp này, kết quả của tất cả các giao dịch đã hoàn thành sẽ được ghi cùng nhau để tối ưu hóa việc ghi đĩa.

Các thông số khác ảnh hưởng đến hiệu suất

wal_buffers- dung lượng bộ nhớ trong shared_buffers cho nhật ký giao dịch. Khuyến nghị - với 1-4GB bộ nhớ khả dụng, hãy sử dụng các giá trị 256KB-1MB. Tài liệu nói rằng việc sử dụng giá trị "-1" sẽ tự động nhận giá trị tùy thuộc vào giá trị của shared_buffers.

random_page_cost- "chi phí" của việc đọc ngẫu nhiên, được sử dụng khi tìm kiếm dữ liệu theo chỉ mục. Mặc định là 4.0. Đơn vị được lấy làm thời gian truy cập dữ liệu tuần tự. Đối với các mảng đĩa nhanh, đặc biệt là SSD, nên giảm giá trị xuống, trong trường hợp này, PostgreSQL sẽ sử dụng các chỉ mục tích cực hơn.

Sách ở liên kết có một số cài đặt khác mà bạn có thể điều chỉnh. Bạn cũng nên đọc tài liệu PostgreSQL về việc gán các tham số cụ thể.

Các thông số từ phần QUERY TUNING, đặc biệt là những thông số liên quan đến việc ngăn bộ lập lịch sử dụng các phương pháp tìm kiếm cụ thể, chỉ được thay đổi nếu bạn hoàn toàn hiểu rõ mình đang làm gì. Rất dễ dàng để tối ưu hóa một loại truy vấn và làm hỏng hiệu suất của tất cả các loại khác. Hiệu quả của việc thay đổi hầu hết các tham số trong phần này phụ thuộc vào dữ liệu trong cơ sở dữ liệu, các truy vấn trên dữ liệu này (nghĩa là trên phiên bản 1C được sử dụng, bao gồm cả) và phiên bản của DBMS.

Sự kết luận

PostgreSQL là một cơ sở dữ liệu mạnh mẽ trong tầm tay phù hợp, nhưng cần được điều chỉnh cẩn thận. Nó có thể được sử dụng kết hợp với 1C và có được hiệu suất tốt, và phần thưởng miễn phí của nó sẽ là một phần thưởng rất tốt.

Phê bình và bổ sung cho bài viết này được hoan nghênh.

Liên kết hữu ích

http://postgresql.leopard.in.ua/ - trang web của cuốn sách " Làm việc với điều chỉnh và mở rộng PostgreSQL ", hướng dẫn đầy đủ và dễ hiểu nhất theo quan điểm của tôi về cấu hình và quản trị PostgreSQL

http://etersoft.ru/products/postgre - tại đây bạn có thể tải xuống bản dựng PostgreSQL tương thích 1C dành cho Windows cũng như các bản phân phối và phiên bản khác nhau của Linux. Đối với những người không có đăng ký ITS hoặc cần phiên bản cho phiên bản Linux không được trình bày trên v8.1c.ru.

http://www.postgresql.org/docs/9.2/static/ - tài liệu PostgreSQL chính thức (bằng tiếng Anh)

Các bài viết từ đĩa ITS về cấu hình PostgreSQL

Lịch sử chỉnh sửa bài viết

  • 29/01/2015 - phiên bản đầu tiên được xuất bản
  • 31/01/2015 - bài báo đã được bổ sung một phần về AUTOVACUUM, một liên kết đến tài liệu gốc đã được thêm vào.

Trong tương lai, tôi dự định thử nghiệm hoạt động của DBMS ở chế độ thêm và thay đổi dữ liệu.