Trình kiểm tra tính nhất quán của cơ sở dữ liệu trong postgresql


8

Có bất kỳ lệnh DBCC (Trình kiểm tra tính nhất quán cơ sở dữ liệu) nào trong PostgreSQL không? Tôi có thể tìm thấy các lệnh DBCC của máy chủ SQL nhưng không phải cho Postgres? Tôi đọc rằng postgresql có sẵn chức năng điều chỉnh độ hoàn hảo và không có lệnh DBCC nào có sẵn cho postgres. Có đúng không


2
câu hỏi trước đó dường như có liên quan chặt chẽ.
Jack nói hãy thử topanswers.xyz

Câu trả lời:


11

Không có lệnh hoặc công cụ kiểm tra tính nhất quán tích hợp trong PostgreSQL.

Quan điểm chung là không cần thiết, vì tham nhũng và không nhất quán không thể có trên một ngăn xếp phần cứng / phần mềm chất lượng. Nếu có vấn đề phát sinh, không có gì đảm bảo bất kỳ loại kiểm tra tính nhất quán nào sẽ tìm thấy chúng, vì vậy nó sẽ tạo ra cảm giác an toàn sai lầm. Tôi không đồng ý với tình cảm đó, nhưng đó là những gì dường như xuất hiện khi điều này được thảo luận định kỳ trên các tin tặc.

Như thường lệ, vấn đề cơ bản là không ai đặc biệt cần một công cụ kiểm tra tính nhất quán để đáp ứng nhu cầu tức thời của họ, vì vậy không ai dành thời gian để viết một cái để gãi ngứa và không ai tài trợ cho việc phát triển một hợp đồng thương mại hoặc nội bộ. Tình nguyện? : p

PostgreSQL (cho đến 9.3) không hỗ trợ tổng kiểm tra mức khối. Vì vậy, một trong những điều chính mà bạn sử dụng để xác minh đã không tồn tại và do đó không thể được xác minh. Một công cụ để quét tất cả các mối quan hệ và xác nhận tổng kiểm tra không tồn tại trong PostgreQuery 9.3, nhưng sẽ được thêm vào và có thể xuất hiện trong phiên bản tương lai. Trong thời gian đó, tất cả những gì bạn có thể làm là SELECT *từ mỗi mối quan hệ riêng lẻ - nhưng do thực tế là PostgreQuery sử dụng bộ đệm bộ đệm của hệ điều hành để đọc nên không có người bảo đảm nào thực sự buộc phải đọc khối đĩa bên dưới. Một công cụ mới sẽ là cần thiết để làm điều này.

PostgreSQL có xu hướng tránh lưu trữ thông tin dư thừa nếu có thể, do đó thường không có gì để kiểm tra, chỉ là một nguồn có thẩm quyền duy nhất. Trình kiểm tra tính nhất quán không thể làm được gì nhiều trừ khi cùng một thông tin xuất hiện hoặc có thể được lấy từ nhiều nơi khác nhau.

Cũng rất khó để thực hiện bất kỳ loại kiểm tra hữu ích nào đồng thời, trên cơ sở dữ liệu vẫn còn bận rộn và hoạt động. Hầu hết các cài đặt sẽ không sẵn sàng khóa toàn bộ cơ sở dữ liệu, hoặc ít nhất một số mối quan hệ chính tại một thời điểm, để chạy một số loại kiểm tra tính nhất quán. Vì vậy, trình kiểm tra sẽ cần có khả năng hoạt động trên cơ sở dữ liệu chịu sự điều chỉnh đồng thời, khiến việc viết nó trở nên khó khăn hơn và có thể phát hiện ít vấn đề hơn một cách đáng tin cậy.

Vẫn còn nhiều công cụ xác thực có thể làm nếu một công cụ được viết, đặc biệt là nếu nó được phép thực hiện nhiều khóa độc quyền quan hệ:

  • Kiểm tra xem tất cả các không gian bảng tồn tại trên đĩa.

  • Kiểm tra xem mỗi pg_classmục có tệp (s) tương ứng với mục relfilenodetrong không gian bảng chính xác.

  • Kiểm tra bản đồ khả năng hiển thị, bản đồ không gian trống, v.v., đảm bảo chúng có mặt khi chúng cần, có thể đọc được và có vẻ phù hợp với mối quan hệ mà chúng được liên kết.

  • Báo cáo các nút tập tin mồ côi trên đĩa. (Đây là những điều bình thường do DDL giao dịch và lười hủy liên kết, nhưng một người kiểm tra có thể buộc phải hủy liên kết và khóa tất cả các mối quan hệ trước khi chạy kiểm tra).

  • Đọc mọi khối của mỗi mối quan hệ và tìm kiếm các vấn đề rõ ràng. Đối với các mối quan hệ heap đó sẽ là những thứ như:

    • một xminlớn hơn xmax(sau khi xem xét XID bọc xung quanh)
    • Bộ dữ liệu được tạo bởi các giao dịch trong tương lai
    • chuỗi HOT bị hỏng / chuỗi ctid bị hỏng
    • cấu trúc bộ dữ liệu không khớp với các thuộc tính bảng
    • bất kỳ Datum nào không chạy khứ hồi _invà các _outchức năng không thay đổi hoặc gây ra lỗi
    • NULLCác trường bitmap được đặt trên NOT NULLcác thuộc tính bảng
    • Thực hiện lại các CHECKràng buộc không thành công
  • Kiểm tra lại khóa ngoại và ràng buộc loại trừ sau khi khóa tất cả các bảng có liên quan

... và có lẽ nhiều hơn nữa tôi không biết đủ về can đảm của PG để tìm hiểu, chẳng hạn như cố gắng phát hiện các trang bị rách, xác thực cấu trúc cây b, kiểm tra chỉ số GIN và GiST, kiểm tra độ tỉnh táo pg_control, và nhiều hơn nữa tôi sẽ không biết nơi để bắt đầu với.

Nếu bạn muốn có một công cụ như vậy, điều tốt nhất nên làm là học đủ để đưa ra một đề xuất cụ thể về cách thức hoạt động của nó - và dành thời gian để làm việc với nó, hoặc tài trợ cho người khác dành thời gian cho nó phát triển.

Cá nhân tôi thực sự rất vui khi có một cái gì đó có thể kiểm tra cụm cơ sở dữ liệu đã dừng bằng chế độ khởi động đặc biệt cho phần postgresphụ trợ, vì vậy tôi có thể (phần nào) xác thực các bản sao cơ sở dữ liệu vật lý được thực hiện với pg_basebackup, với pg_start_backup()rsync và pg_stop_backup, với cấp độ hệ thống tệp ảnh chụp nguyên tử, vv

Thay phiên, bạn có thể làm những gì hầu hết những người khác làm: Đảm bảo ngăn xếp phần cứng và phần mềm của bạn mạnh mẽ và được cấu hình đúng cách, giữ các bản sao lưu tốt và theo dõi nhật ký của bạn. Không có sự thay thế nào cho việc kiểm tra toàn bộ ngăn xếp trước khi đưa vào máy chủ - và để sao lưu tốt, cả vật lý (truyền phát / PITR) và logic (kết xuất). Thực hiện kiểm tra plug-pull trên cơ sở dữ liệu được tải - lặp đi lặp lại - trước khi đi vào hoạt động để đảm bảo hệ thống con I / O được cho là đáng tin cậy của bạn thực sự. Sử dụng nhiều hình thức sao lưu.


6

Có một dự án gọi là pgCheck trên pgFoundry . Lưu ý rằng trạng thái phát triển là 'Alpha' tuy nhiên.

Tôi có vẻ như hoạt động cuối cùng là vào đầu năm 2012 .

Nó đã được đề xuất ở nơi khác rằng

hầu hết mọi người sử dụng kết hợp cả hai khoảng trống cơ sở dữ liệu hoặc chọn * từ mỗi bảng; I E. cố gắng quét / xử lý mỗi hàng bằng cách nào đó

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.