Theo dõi tiến độ xây dựng chỉ mục trong PostgreSQL


36

Có cách nào để theo dõi tiến trình tạo chỉ mục trong PostgreSQL không. Tôi đang tạo một chỉ mục trên một bảng lớn và tôi muốn xem điều này xảy ra nhanh như thế nào.

Có cách nào để theo dõi điều này?


nếu bạn đang sử dụng psql, bạn nên thử \
time

Câu trả lời:


21

Theo trang Bảo trì Chỉ mục của Postgres Wiki , bạn có thể tìm hiểu trạng thái hiện tại của tất cả các chỉ mục của mình với:

SELECT
  t.tablename,
  indexname,
  c.reltuples AS num_rows,
  pg_size_pretty(pg_relation_size(quote_ident(t.tablename)::text)) AS table_size,
  pg_size_pretty(pg_relation_size(quote_ident(indexrelname)::text)) AS index_size,
  CASE WHEN indisunique THEN 'Y'
    ELSE 'N'
  END AS UNIQUE,
  idx_scan AS number_of_scans,
  idx_tup_read AS tuples_read,
  idx_tup_fetch AS tuples_fetched
FROM pg_tables t
  LEFT OUTER JOIN pg_class c ON t.tablename=c.relname
  LEFT OUTER JOIN
    ( SELECT c.relname AS ctablename, ipg.relname AS indexname, x.indnatts AS number_of_columns, idx_scan, idx_tup_read, idx_tup_fetch, indexrelname, indisunique FROM pg_index x
      JOIN pg_class c ON c.oid = x.indrelid
      JOIN pg_class ipg ON ipg.oid = x.indexrelid
      JOIN pg_stat_all_indexes psai ON x.indexrelid = psai.indexrelid )
    AS foo
  ON t.tablename = foo.ctablename
WHERE t.schemaname='public'
ORDER BY 1,2;

Cột num_rowscho biết có bao nhiêu hàng được bao phủ bởi chỉ mục của bạn và index_sizesẽ tăng lên khi chỉ mục đang được xây dựng.


8
Tôi nghi ngờ điều này có thể không hoạt động cho một chỉ mục mới , có thể không hiển thị trong danh mục cho đến khi giao dịch tạo ra nó được cam kết.
mustaccio

@mustaccio bạn đúng rồi. Tôi đang tạo một chỉ mục mất nhiều thời gian và lệnh trên chỉ hiển thị các chỉ mục đã được tạo; nó sẽ không hiển thị các chỉ mục trong đó 'CREATE INDEX' vẫn đang được tiến hành.
cam80

1
REINDEX BẢNG chặn truy vấn này. Ít nhất, nó đã làm khi tôi chạy nó vào ngày 9.6.
RonJohn

10

Vì vậy, không cách nào tốt để làm điều đó, nhưng nếu bạn thực sự cần biết ... trước tiên hãy tính lượng không gian mà chỉ mục sẽ sử dụng, dựa trên kích thước dữ liệu * hàng + chi phí. Sau đó, bạn có thể sử dụng một cái gì đó như pfiles hoặc pgtruss để tìm các tệp đang được ghi bên trong $ PGDATA; nếu các chỉ mục của bạn trên 1GB, thì đó sẽ là một loạt các tệp như nnnnn.n, trong đó bộ n đầu tiên là nhất quán và n tăng cuối cùng cho mỗi tệp GB. Khi bạn biết có bao nhiêu tệp được tạo, bạn có thể xem sự tăng trưởng và tìm hiểu mức độ hoàn thiện của bạn. Ước tính thô, nhưng có lẽ nó giúp.


4

Không, không có, ngay cả khi bạn đang xây dựng nó ở chế độ CONCURRENT. Mặc dù trong quá khứ tôi đã để ý đến kích thước của tệp trong thư mục cơ sở dữ liệu, nhưng điều này không thực sự hữu ích vì bạn chỉ có thể đoán nó sẽ lớn đến mức 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.