পোস্টগ্রেএসকিউএল সূচক নির্মাণের অগ্রগতি পর্যবেক্ষণ


36

PostgreSQL এ একটি সূচক তৈরির অগ্রগতি নিরীক্ষণের কোনও উপায় আছে কি? আমি একটি বড় টেবিলের উপর একটি সূচক তৈরি করছি এবং আমি দেখতে চাই যে এটি কত দ্রুত ঘটছে।

এটি নিরীক্ষণের কোন উপায় আছে?


আপনি যদি পিএসকিএল ব্যবহার করে থাকেন তবে আপনার সময়
sffz

উত্তর:


21

মতে Postgres উইকি এর সূচীতে রক্ষণাবেক্ষণ পাতা, আপনার সাথে আপনার সব ইনডেক্স বর্তমান অবস্থা জানতে পারবেন:

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;

কলামটি num_rowsসূচকটি নির্দেশ করে যে কতগুলি সারিগুলি আপনার সূচক দ্বারা আচ্ছাদিত রয়েছে এবং index_sizeসূচিটি তৈরি হওয়ার সাথে সাথে বৃদ্ধি পাবে।


8
আমি সন্দেহ করি এটি কোনও নতুন সূচকের পক্ষে কাজ নাও করতে পারে, যা লেনদেনটি প্রতিশ্রুতিবদ্ধ না হওয়া অবধি ক্যাটালগে দৃশ্যমান নাও হতে পারে।
মোস্তাকাসিও

@ মুস্তাকসিও আপনি ঠিক আছেন আমি একটি সূচি তৈরি করছি যা দীর্ঘ সময় নিচ্ছে, এবং উপরের কমান্ডটি ইতিমধ্যে তৈরি সূচিগুলি দেখায়; এটি এমন সূচিগুলি প্রদর্শন করবে না যেখানে 'ক্রিয়েট ইন্ডেক্স' এখনও চলছে।
কমলা 80

1
রেইনডেক্স টেবিল এই কোয়েরিকে অবরুদ্ধ করে। কমপক্ষে, আমি এটি .6..6 এ চালানোর সময় এটি করেছে did
রন জন

10

সুতরাং, এটি করার ভাল কোনও উপায় নেই তবে আপনার যদি সত্যই জানা দরকার ... প্রথমে ডাটা আকার * সারি + ওভারহেডের উপর ভিত্তি করে সূচীটিকে কতটা জায়গা নিতে হবে তা গণনা করুন। এরপরে inside পিজিডিটিএ ভিতরে লেখা থাকা ফাইলগুলি সন্ধানের জন্য আপনি পাইফাইলস বা পিগ্রিটাসের মতো কিছু ব্যবহার করতে পারেন; যদি আপনার সূচিগুলি 1 গিগাবাইটের বেশি হয় তবে এটি nnnnn.n এর মতো ফাইলগুলির একটি সিরিজ হবে যেখানে এন এর প্রথম সেটটি সামঞ্জস্যপূর্ণ এবং প্রতিটি জিবি ফাইলের জন্য সর্বশেষ এন ইনক্রিমেন্ট। একবার আপনি কতগুলি ফাইল তৈরি হয়ে গেছেন তা জানতে পেরে আপনি বৃদ্ধিটি দেখতে পারেন এবং শেষ করতে আপনি কতটা কাছাকাছি আছেন তা নির্ধারণ করতে পারেন। মোটামুটি অনুমান, তবে এটি সাহায্য করে।


4

না, আপনি যদি এটি কনক্যুরেন্ট মোডে তৈরি করছেন তাও নেই। যদিও অতীতে আমি ডাটাবেস ডিরেক্টরিতে ফাইলের আকারের দিকে নজর রেখেছি, এটি সত্যিই কার্যকর নয় কারণ আপনি এটি অনুমান করতে পারেন যে এটি কতটা বড় হতে চলেছে।


3

এটি আসন্ন পোস্টগ্রিসকিউএল 12 রিলিজে সম্ভব হবে (3 অক্টোবর, 2019 এ প্রকাশ করা উচিত)।

SELECT 
  now()::TIME(0), 
  a.query, 
  p.phase, 
  p.blocks_total, 
  p.blocks_done, 
  p.tuples_total, 
  p.tuples_done
FROM pg_stat_progress_create_index p 
JOIN pg_stat_activity a ON p.pid = a.pid;

Pg_stat_progress_create_index দেখুন এবং বিশদ বিবরণের জন্য Depesz এর ব্লগ পোস্টের জন্য দস্তাবেজগুলি দেখুন ।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.