Phiên bản được hỗ trợ:hiện tại(17)16 / 15 / 14 / 13
Phiên bản phát triển:18 / Devel
Phiên bản kèo bóng đá pháp được hỗ trợ:12 / 11 / 10 / 9.6 / 9.5 / 9.4 / 9.3 / 9.2 / 9.1 / 9.0 / 8.4 / 8.3 / 8.2 / 7.3 / 7.2
Tài kèo bóng đá pháp này dành cho phiên bản không được hỗ trợ của PostgreSQL.
Bạn có thể muốn xem cùng một trang chohiện tạiPhiên bản hoặc một trong kèo bóng đá pháp phiên bản được hỗ trợ khác được liệt kê ở trên thay thế.

24.1. Hút bụi định kỳ

PostgreSQLCơ sở dữ kèo bóng đá pháp yêu cầu bảo trì định kỳ được gọi làHút bụi. Đối với nhiều cài đặt, nó là đủ để cho phép hút bụi bởiDaemon Autovacuum, được mô tả trongPhần 24.1.6. Bạn có thể cần điều chỉnh kèo bóng đá pháp tham số tự động hóa được mô tả ở đó để có được kết quả tốt nhất cho tình huống của bạn.VACUUMkèo bóng đá pháp lệnh, thường được thực thi theo lịch trình củaCronhoặcLập lịch tác vụScript. Để thiết lập hút bụi được quản lý thủ công đúng cách, điều cần thiết là phải hiểu kèo bóng đá pháp vấn đề được thảo luận trong một vài tiểu mục tiếp theo.

24.1.1. Khái niệm cơ bản hút bụi

PostgreSQL'sVACUUMLệnh phải xử lý mỗi bảng một cách thường xuyên vì nhiều lý do:

  1. Để phục hồi hoặc tái sử dụng không gian đĩa bị chiếm bởi kèo bóng đá pháp hàng đã cập nhật hoặc bị xóa.
  2. Để cập nhật số kèo bóng đá pháp thống kê dữ kèo bóng đá pháp được sử dụng bởiPostgreSQLTruy vấn kế hoạch.
  3. Để cập nhật bản đồ hiển thị, tăng tốcPostgresql: Tài liệu:.
  4. Để bảo vệ chống lại việc mất dữ kèo bóng đá pháp rất cũ doID giao dịch adraparoundhoặcid multixact.

Mỗi lý do này ra lệnh thực hiệnVACUUMHoạt động có tần số và phạm vi khác nhau, như được giải thích trong kèo bóng đá pháp tiểu mục sau.

Có hai biến thể củaNút hút: StandardVACUUMNút kèo bóng đá pháp đầy đủ. Nút kèo bóng đá pháp đầy đủcó thể lấy lại nhiều kèo bóng đá pháp gian đĩa hơn nhưng chạy chậm hơn nhiều. Ngoài ra, dạng tiêu chuẩn củaVACUUMCó thể chạy song song với các hoạt động cơ sở dữ kèo bóng đá pháp sản xuất. (Các lệnh nhưChọn, Chèn, Cập nhậtXóasẽ tiếp tục hoạt động bình thường, mặc dù bạn sẽ không thể sửa đổi định nghĩa của bảng với kèo bóng đá pháp lệnh nhưBảng thay đổiTrong khi nó đang được hút bụi.)Nút kèo bóng đá pháp đầy đủyêu cầuAccess ExclusiveKhóa trên bảng nó đang hoạt động và do đó kèo bóng đá pháp thể được thực hiện song song với việc sử dụng bảng khác. Nói chung, do đó, quản trị viên nên cố gắng sử dụng tiêu chuẩnVACUUMvà tránhNút kèo bóng đá pháp đầy đủ.

VACUUMTạo một lượng lưu lượng I/O đáng kể, có thể gây ra hiệu suất kém cho kèo bóng đá pháp phiên hoạt động khác. Có kèo bóng đá pháp tham số cấu hình có thể được điều chỉnh để giảm tác động hiệu suất của việc hút bụi nền - xemPhần 19.4.4.

24.1.2. Phục hồi kèo bóng đá pháp gian đĩa

inPostgreSQL, anCập nhậthoặcXóacủa một hàng kèo bóng đá pháp ngay lập tức xóa phiên bản cũ của hàng. Cách tiếp cận này là cần thiết để đạt được những lợi ích của kiểm soát đồng thời đa nhân (MVCC, xemChương 13): Không được xóa phiên bản hàng trong khi nó vẫn có khả năng hiển thị cho kèo bóng đá pháp giao dịch khác. Nhưng cuối cùng, một phiên bản hàng đã lỗi thời hoặc bị xóa không còn được quan tâm đến bất kỳ giao dịch nào.VACUUM.

Hình thức tiêu chuẩn củaNút hútXóa kèo bóng đá pháp phiên bản hàng chết trong kèo bóng đá pháp bảng và chỉ mục và đánh dấu không gian có sẵn để tái sử dụng trong tương lai. Tuy nhiên, nó sẽ không trả lại không gian cho hệ điều hành, ngoại trừ trong trường hợp đặc biệt khi một hoặc nhiều trang ở cuối bảng trở nên hoàn toàn miễn phí và có thể dễ dàng lấy khóa bảng độc quyền.Nút kèo bóng đá pháp đầy đủTích cực nén kèo bóng đá pháp bảng bằng cách viết một phiên bản hoàn chỉnh mới của tệp bảng không có không gian chết. Điều này giảm thiểu kích thước của bảng, nhưng có thể mất nhiều thời gian.

Mục tiêu thông thường của việc hút bụi thông thường là thực hiện tiêu chuẩnVACUUMS thường đủ để tránh cầnNút kèo bóng đá pháp đầy đủ. Daemon Autovacuum cố gắng hoạt động theo cách này, và trên thực tế sẽ kèo bóng đá pháp bao giờ phát hànhNút kèo bóng đá pháp đầy đủ. Theo cách tiếp cận này, ý tưởng không phải là giữ kèo bóng đá pháp bảng ở kích thước tối thiểu của chúng, mà là để duy trì việc sử dụng không gian đĩa ổn định: mỗi bảng chiếm không gian tương đương với kích thước tối thiểu của nó cộng với nhiều không gian được sử dụng giữa kèo bóng đá pháp lần chạy chân không.Nút kèo bóng đá pháp đầy đủcó thể được sử dụng để thu nhỏ một bảng trở lại kích thước tối thiểu của nó và trả lại kèo bóng đá pháp gian đĩa cho hệ điều hành, kèo bóng đá pháp có nhiều điểm nào nếu bảng sẽ phát triển trở lại trong tương lai. Do đó, tiêu chuẩn thường xuyên vừa phảiVACUUMChạy là một cách tiếp cận tốt hơn so với kèo bóng đá pháp thường xuyênNút kèo bóng đá pháp đầy đủChạy để duy trì kèo bóng đá pháp bảng cập nhật mạnh mẽ.

Một số quản trị viên thích tự lên lịch hút bụi, ví dụ như thực hiện tất cả công việc vào ban đêm khi tải thấp. Khó khăn khi thực hiện hút bụi theo một lịch trình cố định là nếu một bảng có sự tăng đột biến bất ngờ trong hoạt động cập nhật, nó có thể bị bồng bềnh đến mứcNút kèo bóng đá pháp đầy đủthực sự cần thiết để đòi lại kèo bóng đá pháp gian. Sử dụng daemon Autovacuum làm giảm bớt vấn đề này, vì lịch trình daemon hút bụi tự động để đáp ứng với hoạt động cập nhật.Nút húts dự kiến ​​sẽ thực hiện phần lớn công việc khi tải là điển hình.

Đối với những người không sử dụng autovacuum, một cách tiếp cận điển hình là lên lịch cho toàn cơ sở dữ kèo bóng đá phápNút hútMột lần một ngày trong khoảng thời gian sử dụng thấp, được bổ sung bằng cách hút bụi thường xuyên hơn của kèo bóng đá pháp bảng được cập nhật nhiều khi cần thiết. .Nút hútmỗi người; Chương trìnhVACUUMDBcó thể hữu ích.

Tip

trơnNút hútcó thể không thỏa đáng khi một bảng chứa số lượng lớn kèo bóng đá pháp phiên bản hàng chết do cập nhật lớn hoặc xóa hoạt động. Nếu bạn có một bảng như vậy và bạn cần phải đòi lại không gian đĩa dư mà nó chiếm, bạn sẽ cần sử dụngNút kèo bóng đá pháp đầy đủhoặc cách kháccụmhoặc một trong kèo bóng đá pháp biến thể viết bảng củaBảng thay đổi. kèo bóng đá pháp lệnh này viết lại toàn bộ bản sao mới của bảng và xây dựng kèo bóng đá pháp chỉ mục mới cho nó.Access Exclusivekhóa. Lưu ý rằng họ cũng tạm thời sử dụng không gian đĩa phụ xấp xỉ bằng kích thước của bảng, vì kèo bóng đá pháp bản sao cũ của bảng và kèo bóng đá pháp chỉ mục không thể được phát hành cho đến khi kèo bóng đá pháp bản mới hoàn tất.

TIP

Nếu bạn có một bảng có toàn bộ nội dung bị xóa trên cơ sở định kỳ, hãy xem xét việc thực hiện nó vớicắt ngắnthay vì sử dụngXóatheo sau làVACUUM. cắt ngắnXóa toàn bộ nội dung của bảng ngay lập tức mà kèo bóng đá pháp yêu cầu tiếp theoVACUUMhoặcNút kèo bóng đá pháp đầy đủĐể đòi lại kèo bóng đá pháp gian đĩa chưa sử dụng. Nhược điểm là ngữ nghĩa MVCC nghiêm ngặt bị vi phạm.

24.1.3. Cập nhật số kèo bóng đá pháp thống kê kế hoạch

ThePostgreSQLTruy vấn kế hoạch dựa vào thông tin thống kê về nội dung của kèo bóng đá pháp bảng để tạo kèo bóng đá pháp kế hoạch tốt cho kèo bóng đá pháp truy vấn. Những thống kê này được thu thập bởiPhân tíchLệnh, có thể được gọi bởi chính nó hoặc là một bước tùy chọn trongVACUUM. Điều quan trọng là phải có số kèo bóng đá pháp thống kê chính xác hợp lý, nếu không các lựa chọn kém về kế hoạch có thể làm giảm hiệu suất cơ sở dữ kèo bóng đá pháp.

Daemon Autovacuum, nếu được bật, sẽ tự động phát hànhPhân tíchkèo bóng đá pháp lệnh bất cứ khi nào nội dung của bảng đã thay đổi đủ. Tuy nhiên, kèo bóng đá pháp quản trị viên có thể thích dựa vào lịch trình thủ côngPhân tíchHoạt động, đặc biệt nếu người ta biết rằng hoạt động cập nhật trên bảng sẽ không ảnh hưởng đến số kèo bóng đá pháp thống kê củaHồithú vịCột. Lịch trình daemonPhân tíchNghiêm túc như là một hàm của số lượng hàng được chèn hoặc cập nhật; Nó không có kiến ​​thức về việc kèo bóng đá pháp điều đó sẽ dẫn đến những thay đổi thống kê có ý nghĩa.

Tuples thay đổi trong các phân vùng và trẻ em kế thừa không kích hoạt phân tích trên bảng cha mẹ. Nếu bảng cha mẹ trống hoặc hiếm khi thay đổi, nó có thể không bao giờ được xử lý bằng ô tô và số kèo bóng đá pháp thống kê cho cây kế thừa nói chung sẽ không được thu thập.Phân tíchTrên bảng cha mẹ theo cách thủ công để cập nhật số kèo bóng đá pháp thống kê.

Như với việc hút bụi để phục hồi không gian, các bản cập nhật thống kê thường xuyên hữu ích hơn cho các bảng được cập nhật nhiều so với các bảng được cập nhật hiếm khi. Nhưng ngay cả đối với một bảng được cập nhật mạnh mẽ, có thể không cần cập nhật thống kê nếu phân phối dữ kèo bóng đá pháp thống kê không thay đổi nhiều.Dấu thời gianCột chứa thời gian cập nhật hàng sẽ có giá trị tối đa tăng liên tục khi kèo bóng đá pháp hàng được thêm và cập nhật; Một cột như vậy có thể sẽ cần kèo bóng đá pháp bản cập nhật thống kê thường xuyên hơn, giả sử, một cột chứa kèo bóng đá pháp URL cho kèo bóng đá pháp trang được truy cập trên một trang web.

Có thể chạyPhân tíchTrên các bảng cụ thể và thậm chí chỉ là các cột cụ thể của bảng, do đó, tính linh hoạt tồn tại để cập nhật một số số kèo bóng đá pháp thống kê thường xuyên hơn so với các cột khác nếu ứng dụng của bạn yêu cầu. Tuy nhiên, trong thực tế, tốt nhất là chỉ cần phân tích toàn bộ cơ sở dữ kèo bóng đá pháp, bởi vì nó là một hoạt động nhanh.Phân tíchSử dụng lấy mẫu ngẫu nhiên thống kê của kèo bóng đá pháp hàng của bảng thay vì đọc từng hàng.

tip

Mặc dù điều chỉnh trên mỗi cộtPhân tíchTần suất có thể không hiệu quả, bạn có thể thấy đáng để điều chỉnh mỗi cột của mức độ chi tiết của các số kèo bóng đá pháp thống kê được thu thập bởiPhân tích. kèo bóng đá pháp cột được sử dụng nhiều trongWHERECác điều khoản và có phân phối dữ kèo bóng đá pháp không đều có thể yêu cầu biểu đồ dữ kèo bóng đá pháp hạt mịn hơn so với các cột khác. Nhìn thấyThay đổi bảng thống kêhoặc thay đổi mặc định toàn cơ sở dữ kèo bóng đá pháp bằng cách sử dụngdefault_statistic_targetTham số cấu hình.

Ngoài ra, theo mặc định, có thông tin hạn chế có sẵn về tính chọn lọc của các chức năng. Tuy nhiên, nếu bạn tạo một chỉ mục biểu thức sử dụng cuộc gọi chức năng, các số kèo bóng đá pháp thống kê hữu ích sẽ được thu thập về hàm, điều này có thể cải thiện đáng kể các kế hoạch truy vấn sử dụng chỉ mục biểu thức.

TIP

Daemon Autovacuum kèo bóng đá pháp phát hànhPhân tíchCác lệnh cho các bảng nước ngoài, vì nó không có phương tiện để xác định mức độ thường xuyên có thể hữu ích. Nếu các truy vấn của bạn yêu cầu số kèo bóng đá pháp thống kê trên các bảng nước ngoài để lập kế hoạch phù hợp, thì bạn nên chạy thủ công theo cách thủ côngPhân tíchkèo bóng đá pháp lệnh trên kèo bóng đá pháp bảng đó trên một lịch trình phù hợp.

TIP

Daemon Autovacuum kèo bóng đá pháp phát hànhPhân tíchlệnh cho kèo bóng đá pháp bảng được phân vùng. Cha mẹ kế thừa sẽ chỉ được phân tích nếu chính cha mẹ bị thay đổi - thay đổi đối với kèo bóng đá pháp bảng con không kích hoạt tự động trên bảng cha.Phân tíchTrên các bảng đó để cập nhật số kèo bóng đá pháp thống kê.

24.1.4. Cập nhật bản đồ hiển thị

Vacuum duy trì Akèo bóng đá việtĐối với mỗi bảng để theo dõi các trang nào chỉ chứa các bộ dữ kèo bóng đá pháp được biết là có thể hiển thị cho tất cả các giao dịch hoạt động (và tất cả các giao dịch trong tương lai, cho đến khi trang được sửa đổi một lần nữa). Điều này có hai mục đích.

Thứ hai, nó cho phépPostgreSQLĐể trả lời một số truy vấn chỉ sử dụng chỉ mục, kèo bóng đá pháp tham chiếu đến bảng cơ bản. TừPostgreSQLChỉ mục kèo bóng đá pháp chứa thông tin khả năng hiển thị Tuple, một chỉ mục thông thường tìm nạp bộ tuple heap cho mỗi mục chỉ mục phù hợp, để kiểm tra xem có nên nhìn thấy bởi giao dịch hiện tại hay kèo bóng đá pháp. MỘTQuét chỉ có chỉ mục, mặt khác, kiểm tra bản đồ hiển thị trước. Nếu người ta biết rằng tất cả các bộ dữ kèo bóng đá pháp trên trang đều có thể nhìn thấy, có thể bỏ qua heap.

24.1.5. Ngăn chặn kèo bóng đá pháp lỗi bao quanh ID giao dịch

PostgreSQL'sMVCCngữ nghĩa giao dịch phụ thuộc vào việc có thể so sánh ID giao dịch (XID) Số: Phiên bản hàng có XID chèn lớn hơn XID của giao dịch hiện tại làTrong tương laivà kèo bóng đá pháp nên hiển thị cho giao dịch hiện tại. Nhưng vì ID giao dịch có kích thước giới hạn (32 bit), một cụm chạy trong một thời gian dài (hơn 4 tỷ giao dịch) sẽ bị ảnh hưởngID giao dịch adraparoundTóm lại, mất dữ kèo bóng đá pháp thảm khốc.

Lý do hút bụi định kỳ giải quyết vấn đề làVACUUMSẽ đánh dấu kèo bóng đá pháp hàng làFrozen, chỉ ra rằng chúng được chèn vào một giao dịch đủ xa trong quá khứ rằng kèo bóng đá pháp tác động của giao dịch chèn chắc chắn sẽ được hiển thị cho tất cả kèo bóng đá pháp giao dịch hiện tại và tương lai. XID bình thường được so sánh bằng cách sử dụng modulo-232Số học. Điều này có nghĩa là đối với mỗi XID thông thường, có hai tỷ XID làMạnhHồivà hai tỷ đó làMới hơnxông; Một cách khác để nói rằng kèo bóng đá pháp gian XID bình thường là hình tròn kèo bóng đá pháp có điểm cuối.Trong quá khứĐối với hai tỷ giao dịch tiếp theo, bất kể chúng tôi đang nói đến XID bình thường nào. Nếu phiên bản hàng vẫn tồn tại sau hơn hai tỷ giao dịch, nó sẽ đột nhiên xuất hiện trong tương lai.PostgreSQLDự trữ một xid đặc biệt,frozentransactionid, không tuân theo kèo bóng đá pháp quy tắc so sánh XID thông thường và luôn được coi là cũ hơn mọi XID thông thường. kèo bóng đá pháp phiên bản hàng đông lạnh được xử lý như thể XID chèn làfrozentransactionid, để chúng có vẻ làTrong quá khứ31340_31484

ghi chú

inPostgreSQLPhiên bản trước 9.4, đóng băng được thực hiện bằng cách thực sự thay thế XID chèn của một hàng bằngfrozentransactionid, có thể nhìn thấy trong hàngxminCột hệ thống. kèo bóng đá pháp phiên bản mới hơn chỉ cần đặt bit cờ, bảo tồn bản gốc của hàngxminđể sử dụng pháp y có thể. Tuy nhiên, hàng vớixminbằngfrozentransactionid(2) vẫn có thể được tìm thấy trong cơ sở dữ kèo bóng đá pháppg_upgrade'D từ kèo bóng đá pháp phiên bản Pre-9.4.

Ngoài ra, danh mục hệ thống có thể chứa kèo bóng đá pháp hàng vớixminbằngbootstraptransactionid(1), chỉ ra rằng chúng đã được chèn trong giai đoạn đầu tiên củainitDB. GiốngfrozentransactionId, XID đặc biệt này được coi là cũ hơn mọi XID thông thường.

VACUUM_FREEZE_MIN_AGEĐiều khiển giá trị xid phải bao nhiêu trước khi kèo bóng đá pháp hàng mang XID sẽ bị đóng băng. Việc tăng cài đặt này có thể tránh được công việc không cần thiết nếu kèo bóng đá pháp hàng sẽ bị đóng băng sẽ sớm được sửa đổi lại, nhưng việc giảm cài đặt này làm tăng số lượng giao dịch có thể trôi qua trước khi bảng phải được hút lại.

VACUUMsử dụngkèo bóng đá việtĐể xác định trang nào của bảng phải được quét. Thông thường, nó sẽ bỏ qua kèo bóng đá pháp trang không có bất kỳ phiên bản hàng chết nào ngay cả khi kèo bóng đá pháp trang đó vẫn có thể có phiên bản hàng có giá trị XID cũ.Nút hútS sẽ kèo bóng đá pháp luôn đóng băng mọi phiên bản hàng cũ trong bảng. Định kỳ,VACUUMsẽ thực hiệnMáy hút bụi hung hăng, Chỉ bỏ qua kèo bóng đá pháp trang đó không chứa hàng chết cũng như bất kỳ giá trị XID hoặc MXID nào.VACUUM_FREEZE_TABLE_AGEđiều khiển khiVACUUM33820_33971VACUUM_FREEZE_TABLE_AGEtrừVACUUM_FREEZE_MIN_AGE. Cài đặtVACUUM_FREEZE_TABLE_AGEđến 0 lựcVACUUMĐể sử dụng chiến lược tích cực hơn này cho tất cả kèo bóng đá pháp lần quét.

Thời gian tối đa mà một bảng có thể kèo bóng đá pháp có giá trị là hai tỷ giao dịch trừVACUUM_FREEZE_MIN_AGEGiá trị tại thời điểm của chân không tích cực cuối cùng. Nếu nó không được đưa ra lâu hơn thế, mất dữ kèo bóng đá pháp có thể dẫn đến.autovacuum_freeze_max_age. (Điều này sẽ xảy ra ngay cả khi Autovacuum bị vô hiệu hóa.)

Điều này ngụ ý rằng nếu một bảng kèo bóng đá pháp được hút bụi, Autovacuum sẽ được gọi trên đó khoảng một lầnautovacuum_freeze_max_agetrừVACUUM_FREEZE_MIN_AGEGiao dịch. Đối với kèo bóng đá pháp bảng thường xuyên được hút bụi cho mục đích cải tạo không gian, điều này ít quan trọng.autovacuum_freeze_max_agehoặc giảmVACUUM_FREEZE_MIN_AGE.

Tối đa hiệu quả choVACUUM_FREEZE_TABLE_AGElà 0,95 *autovacuum_freeze_max_age; Một cài đặt cao hơn thế sẽ được giới hạn tối đa.autovacuum_freeze_max_agesẽ kèo bóng đá pháp có ý nghĩa vì một loại autovacuum chống Wraparound sẽ được kích hoạt tại thời điểm đó, và số nhân 0,95 để lại một số phòng thở để chạy thủ côngVACUUMTrước khi điều đó xảy ra. Như một nguyên tắc,VACUUM_FREEZE_TABLE_AGEnên được đặt thành một giá trị phần nào bên dướiautovacuum_freeze_max_age, để lại khoảng cách đủ để được lên lịch thường xuyênNút húthoặc Autovacuum được kích hoạt bởi hoạt động xóa và cập nhật bình thường được chạy trong cửa sổ đó. Thiết lập nó quá gần có thể dẫn đến kèo bóng đá pháp ô tô chống quá pháp, mặc dù bảng gần đây đã được hút bụi để đòi lại không gian, trong khi kèo bóng đá pháp giá trị thấp hơn dẫn đến hút bụi tích cực thường xuyên hơn.

Nhược điểm duy nhất của việc tăngautovacuum_freeze_max_age(vàVACUUM_FREEZE_TABLE_AGEcùng với nó) làPG_XACTpg_commit_tsSubDirectories của cụm cơ sở dữ kèo bóng đá pháp sẽ có nhiều không gian hơn, vì nó phải lưu trữ trạng thái cam kết và (nếuTrack_Commit_Timestampđược bật) dấu thời gian của tất cả kèo bóng đá pháp giao dịch trở lạiautovacuum_freeze_max_ageHorizon. Trạng thái cam kết sử dụng hai bit cho mỗi giao dịch, vì vậy nếuautovacuum_freeze_max_ageđược đặt thành giá trị được phép tối đa là hai tỷ,PG_XACTcó thể được dự kiến ​​sẽ tăng lên khoảng nửa gigabyte vàpg_commit_tsđến khoảng 20GB. Nếu điều này là tầm thường so với tổng kích thước cơ sở dữ kèo bóng đá pháp của bạn, cài đặtautovacuum_freeze_max_ageGiá trị được phép tối đa của nó được khuyến nghị. Nếu kèo bóng đá pháp, hãy đặt nó tùy thuộc vào những gì bạn sẵn sàng cho phépPG_XACTpg_commit_tsLưu trữ. (Mặc định, 200 triệu giao dịch, có nghĩa là khoảng 50MBPG_XACTLưu trữ và khoảng 2GBpg_commit_tslưu trữ.)

Một nhược điểm của việc giảmVACUUM_FREEZE_MIN_AGECó thể gây raNút hútĐể thực hiện công việc vô dụng: đóng băng phiên bản hàng là một sự lãng phí thời gian nếu hàng được sửa đổi ngay sau đó (khiến nó có được XID mới). Vì vậy, cài đặt phải đủ lớn để kèo bóng đá pháp hàng không bị đóng băng cho đến khi chúng không thể thay đổi nữa.

Để theo dõi tuổi của các XID không đóng băng lâu đời nhất trong cơ sở dữ kèo bóng đá pháp,Nút hútLưu trữ số kèo bóng đá pháp thống kê XID trong các bảng hệ thốngPG_Classpg_database. Cụ thể,relfrozenxidCột của bảngpg_ classHàng chứa Xid đóng băng được sử dụng bởi sự hung hăng cuối cùngNút hútĐối với bảng đó. Tất cả kèo bóng đá pháp hàng được chèn bởi kèo bóng đá pháp giao dịch có XID cũ hơn XID cắt này được đảm bảo đã bị đóng băng.DatfrozenxidCột của cơ sở dữ kèo bóng đá pháppg_databaseHàng là giới hạn thấp hơn trên các XID không đóng băng xuất hiện trong cơ sở dữ kèo bóng đá pháp đó-nó chỉ là mức tối thiểu của mỗi bànrelfrozenxidGiá trị trong cơ sở dữ kèo bóng đá pháp. Một cách thuận tiện để kiểm tra thông tin này là thực hiện các truy vấn như:

Chọn C.OID :: RegClass as tabl

TheAgeCột đo số lượng giao dịch từ XID cắt đến XID của giao dịch hiện tại.

Nút hútThông thường chỉ quét kèo bóng đá pháp trang đã được sửa đổi kể từ chân không cuối cùng, nhưngrelfrozenxidChỉ có thể được nâng cao khi mọi trang của bảng có thể chứa XIDs kèo bóng đá pháp đóng băng được quét. Điều này xảy ra khirelfrozenxidnhiều hơnVACUUM_FREEZE_TABLE_AGEGiao dịch cũ, khiVACUUM'sFreezeTùy chọn được sử dụng hoặc khi tất cả kèo bóng đá pháp trang chưa có tất cả đóng gói để yêu cầu hút bụi để loại bỏ kèo bóng đá pháp phiên bản hàng chết. KhiVACUUMQuét mọi trang trong bảng chưa đóng gói, nó nên đặtAge (Relfrozenxid)với giá trị chỉ nhiều hơn một chút so vớiVACUUM_FREEZE_MIN_AGECài đặt đã được sử dụng (nhiều hơn bởi số lượng giao dịch bắt đầu kể từVACUUMBắt đầu). Nếu kèo bóng đá pháprelfrozenxid-AdvancingVACUUMđược cấp trên bảng cho đến khiautovacuum_freeze_max_ageđược đạt được, một Autovacuum sẽ sớm bị ép buộc cho bảng.

Nếu vì lý do nào đó Autovacuum không xóa XID cũ khỏi bảng, hệ thống sẽ bắt đầu phát ra các thông báo cảnh báo như thế này khi XIDS lâu đời nhất của cơ sở dữ kèo bóng đá pháp đạt mười một triệu giao dịch từ điểm bao quanh:

Cảnh báo: Cơ sở dữ kèo bóng đá pháp "MyDB" phải được hút bụi trong 10985967 Giao dịch

(một hướng dẫnVACUUMnên khắc phục sự cố, như được đề xuất bởi gợi ý; Nhưng lưu ý rằngNút hútphải được thực hiện bởi một siêu người dùng, nếu không nó sẽ không xử lý các danh mục hệ thống và do đó không thể tiến hành cơ sở dữ kèo bóng đá phápDatfrozenxid.) Nếu những cảnh báo này bị bỏ qua, hệ thống sẽ ngừng hoạt động và từ chối bắt đầu bất kỳ giao dịch mới nào khi còn ít hơn 1 triệu giao dịch cho đến khi kết thúc:

Lỗi: Cơ sở dữ kèo bóng đá pháp không chấp nhận các lệnh để tránh mất dữ kèo bóng đá pháp bao quanh trong cơ sở dữ kèo bóng đá pháp "MyDB"

Biên độ an toàn chuyển đổi 1 triệu tồn tại để cho quản trị viên phục hồi mà không mất dữ kèo bóng đá pháp, bằng cách thực hiện thủ công yêu cầuNút hútlệnh. Tuy nhiên, vì hệ thống sẽ không thực thi kèo bóng đá pháp lệnh khi nó đã chuyển sang chế độ tắt an toàn, nên cách duy nhất để làm điều này là dừng máy chủ và khởi động máy chủ ở chế độ người dùng đơn để thực thiNút hút. Chế độ tắt máy kèo bóng đá pháp được thực thi ở chế độ người dùng đơn.PostgresTrang tham khảo để biết chi tiết về việc sử dụng chế độ người dùng đơn.

24.1.5.1. Multixacts và Wraparound

ID Multixactđược sử dụng để hỗ trợ khóa hàng bằng nhiều giao dịch. Vì chỉ có kèo bóng đá pháp gian giới hạn trong tiêu đề tuple để lưu trữ thông tin khóa, thông tin đó được mã hóa dưới dạngnhiều ID giao dịchhoặc hoàn toàn là ID Multixact, bất cứ khi nào có nhiều giao dịch đồng thời khóa một hàng. Thông tin về ID giao dịch nào được bao gồm trong bất kỳ ID đa dạng cụ thể nào được lưu trữ riêng trongpg_multixactSubDirectory và chỉ ID đa biến xuất hiện trongxmaxTrường trong tiêu đề tuple. Giống như ID giao dịch, ID Multixact được triển khai dưới dạng bộ đếm 32 bit và lưu trữ tương ứng, tất cả đều yêu cầu quản lý lão hóa cẩn thận, dọn dẹp lưu trữ và xử lý bao quanh.

Bất cứ khi nàoNút hútQuét bất kỳ phần nào của bảng, nó sẽ thay thế bất kỳ ID multixact nào mà nó gặp phải cũ hơnbởi một giá trị khác, có thể là giá trị bằng kèo bóng đá pháp, ID giao dịch duy nhất hoặc ID Multixact mới hơn. Đối với mỗi bảng,pg_ class.relminmxidLưu trữ ID đa biến lâu đời nhất có thể vẫn xuất hiện trong bất kỳ tuple nào của bảng đó. Nếu giá trị này cũ hơnVACUUM_MULTIXACT_FREEZE_TABLE_AGE, một khoảng trống mạnh mẽ là bị ép buộc. Như đã thảo luận trong phần trước, một khoảng trống hung hăng có nghĩa là chỉ những trang được biết là toàn bộ sẽ bị bỏ qua.MXID_AGE ()có thể được sử dụng trênpg_ class.relMinMXIDĐể tìm tuổi của nó.

hung hăngVACUUMquét, bất kể nguyên nhân gây ra chúng, cho phép nâng cao giá trị cho bảng đó. Cuối cùng, vì tất cả các bảng trong tất cả các cơ sở dữ kèo bóng đá pháp được quét và các giá trị đaxact lâu đời nhất của chúng được nâng cao, có thể loại bỏ bộ lưu trữ trên đĩa cho các multixact cũ hơn.

Là một thiết bị an toàn, quét chân kèo bóng đá pháp tích cực sẽ xảy ra đối với bất kỳ bảng nào có Multixact-Age lớn hơnautovacuum_multixact_freeze_max_age. Quét chân không tích cực cũng sẽ diễn ra dần dần cho tất cả kèo bóng đá pháp bảng, bắt đầu với những bảng có độ tuổi đa dạng lâu đời nhất, nếu lượng không gian lưu trữ thành viên được sử dụng vượt quá 50% không gian lưu trữ có địa chỉ.

24.1.6. Daemon Autovacuum

PostgreSQLCó tính năng tùy chọn nhưng rất được khuyến khích gọi làAutovacuum, có mục đích là tự động hóa việc thực hiệnVACUUMPhân tíchlệnh. Khi được bật, kiểm tra autovacuum cho các bảng đã có một số lượng lớn các bộ dữ kèo bóng đá pháp được chèn, cập nhật hoặc xóa.Track_countsđược đặt thànhTRUE. Trong cấu hình mặc định, tự động hóa được bật và kèo bóng đá pháp tham số cấu hình liên quan được đặt một cách thích hợp.

TheHồiDaemon AutovacuumHàngThực tế bao gồm nhiều quy trình. Có một quy trình daemon liên tục, được gọi là​​Launcher autovacuum, chịu trách nhiệm bắt đầuCông nhân AutovacuumQuy trình cho tất cả các cơ sở dữ kèo bóng đá pháp. Trình khởi chạy sẽ phân phối công việc theo thời gian, cố gắng khởi động một công nhân trong mỗi cơ sở dữ kèo bóng đá pháp mỗi cơ sở dữ kèo bóng đá phápAutovacuum_naptimegiây. (Do đó, nếu cài đặt cónCơ sở dữ kèo bóng đá pháp, một công nhân mới sẽ được ra mắt mỗiautovacuum_naptime/ngiây.) Tối đaautovacuum_max_workerskèo bóng đá pháp quy trình công nhân được phép chạy cùng một lúc. Nếu có nhiều hơnautovacuum_max_workersCơ sở dữ kèo bóng đá pháp sẽ được xử lý, cơ sở dữ kèo bóng đá pháp tiếp theo sẽ được xử lý ngay khi công nhân đầu tiên hoàn thành. Mỗi quy trình của công nhân sẽ kiểm tra từng bảng trong cơ sở dữ kèo bóng đá pháp của nó và thực thiVACUUMvà/hoặcPhân tíchkhi cần.log_autovacuum_min_durationCó thể được đặt để giám sát hoạt động của công nhân tự động.

Nếu một số bảng lớn, tất cả đều đủ điều kiện để hút bụi trong một khoảng thời gian ngắn, tất cả các công nhân tự động có thể bị chiếm giữ với hút bụi các bảng đó trong một thời gian dài. Điều này sẽ dẫn đến các bảng và cơ sở dữ kèo bóng đá pháp khác không được hút bụi cho đến khi một công nhân có sẵn.Max_ConnectionshoặcSuperuser_reserved_connectionsGiới hạn.

Bảng córelfrozenxidGiá trị nhiều hơnautovacuum_freeze_max_ageGiao dịch cũ luôn được hút bụi (điều này cũng áp dụng cho kèo bóng đá pháp bảng có độ tuổi đóng băng tối đa đã được sửa đổi thông qua kèo bóng đá pháp tham số lưu trữ; xem bên dưới). Nếu khôngVACUUMvượt quángưỡng chân kèo bóng đá pháp, bảng được hút bụi. Ngưỡng chân kèo bóng đá pháp được xác định là:

ngưỡng chân không = ngưỡng cơ sở chân không + Hệ số tỷ lệ chân không * Số lượng bộ dữ kèo bóng đá pháp

trong đó ngưỡng cơ sở chân kèo bóng đá pháp làautovacuum_vacuum_threshold, Hệ số tỷ lệ chân kèo bóng đá pháp làautovacuum_vacuum_scale_factorvà số lượng tổng làpg_ class.Reltuples. Số lượng các bộ dữ kèo bóng đá pháp lỗi thời được lấy từ người thu thập thống kê;Cập nhậtXóaHoạt động. (Nó chỉ là bán chính xác vì một số thông tin có thể bị mất dưới tải nặng.) NếurelfrozenxidGiá trị của bảng nhiều hơnVACUUM_FREEZE_TABLE_AGEGiao dịch cũ, một khoảng trống tích cực được thực hiện để đóng băng các bộ dữ kèo bóng đá pháp cũ và tiến bộrelfrozenxid; Nếu không, chỉ có kèo bóng đá pháp trang đã được sửa đổi kể từ lần chân không cuối cùng được quét.

Để phân tích, một điều kiện tương tự được sử dụng: ngưỡng, được định nghĩa là:

Phân tích ngưỡng = Phân tích ngưỡng cơ sở + Phân tích Hệ số tỷ lệ * Số lượng bộ dữ kèo bóng đá pháp

được so sánh với tổng số bộ dữ kèo bóng đá pháp được chèn, cập nhật hoặc xóa kể từ lần cuốiPhân tích.

Các bảng được phân vùng không trực tiếp lưu trữ các bộ dữ kèo bóng đá pháp và do đó không được xử lý bởi Autovacuum. .Phân tíchTrên kèo bóng đá pháp bảng được phân vùng và điều này có thể gây ra kèo bóng đá pháp kế hoạch dưới mức tối ưu cho kèo bóng đá pháp truy vấn tham chiếu thống kê bảng được phân vùng. Bạn có thể giải quyết vấn đề này bằng cách chạy thủ côngPhân tíchTrên các bảng được phân vùng khi chúng được điền lần đầu tiên và một lần nữa bất cứ khi nào phân phối dữ kèo bóng đá pháp trong các phân vùng của chúng thay đổi đáng kể.

Bảng tạm thời không thể được truy cập bằng AutovacUum. Do đó, nên thực hiện kèo bóng đá pháp hoạt động chân không và phân tích phù hợp thông qua kèo bóng đá pháp lệnh sql phiên.

Ngưỡng mặc định và kèo bóng đá pháp yếu tố tỷ lệ được lấy từPostgreSql.conf, nhưng có thể ghi đè chúng (và nhiều tham số điều khiển tự động khác) trên cơ sở mỗi bảng; nhìn thấyTham số lưu trữĐể biết thêm thông tin. Nếu một cài đặt đã được thay đổi thông qua kèo bóng đá pháp tham số lưu trữ của bảng, giá trị đó được sử dụng khi xử lý bảng đó;Phần 19.10Để biết thêm chi tiết về cài đặt toàn cầu.

Khi nhiều công nhân đang chạy, kèo bóng đá pháp tham số độ trễ chi phí tự động (xemPhần 19.4.4) làCân bằngTrong số tất cả kèo bóng đá pháp công nhân đang điều hành, do đó, tổng tác động I/O trên hệ thống là như nhau bất kể số lượng công nhân thực sự đang chạy. Tuy nhiên, bất kỳ bảng công nhân nào có bảng có bàn mỗi bànAutovacuum_vacuum_cost_delayhoặcAutovacuum_vacuum_cost_limitThông số lưu trữ đã được đặt kèo bóng đá pháp được xem xét trong thuật toán cân bằng.

Công nhân Autovacuum thường không chặn kèo bóng đá pháp lệnh khác. Nếu một quá trình cố gắng để có được một khóa xung đột vớiCập nhật chia sẻ độc quyền53951_54059Bảng 13.2. Tuy nhiên, nếu Autovacuum đang chạy để ngăn chặn ID giao dịchpg_stat_activityXem kết thúc bằng(để ngăn chặn sự bao bọc)), Autovacuum kèo bóng đá pháp tự động bị gián đoạn.

Cảnh báo

Thường xuyên chạy kèo bóng đá pháp lệnh có được khóa mâu thuẫn vớiCập nhật chia sẻ độc quyềnKhóa (ví dụ: phân tích) có thể ngăn chặn hiệu quả kèo bóng đá pháp ô tô không bao giờ hoàn thành.