জেনেরিক, সমর্থিত পদ্ধতি বলে মনে হচ্ছে না, তবে কিছু কৌশল রয়েছে যা স্বতন্ত্র অনুসন্ধানের অগ্রগতির মূল্যায়ন করতে সীমিত প্রসঙ্গে ব্যবহার করা যেতে পারে। এখানে তাদের কিছু.
সিকোয়েন্স
যখন কোনও নির্বাচন বা আপডেট আপডেটের কোয়েরিতে কোনও অন্তর্ভুক্ত থাকে nextval(sequence_name)
বা কোনও ইনসার্টের একটি গন্তব্য কলাম থাকে nextval
ডিফল্ট হিসাবে, তখন সিক্যুয়েন্স মানটি অন্য সেশনে বারবার জিজ্ঞাসা করা যেতে পারে SELECT sequence_name.last_value
। এটি কাজ করে কারণ ক্রমগুলি লেনদেনের দ্বারা আবদ্ধ নয়। যখন এক্সিকিউশন প্ল্যানটি এমন হয় যে ক্যোয়ারের সময় ক্রমটি রৈখিকভাবে বৃদ্ধি করা হয়, তখন এটি অগ্রগতি সূচক হিসাবে ব্যবহার করা যেতে পারে।
pgstattuple
Pgstattuple contrib মডিউল ফাংশন যে সরাসরি তথ্য পেজ এ উঁকি করতে পারেন। দেখা যাচ্ছে যে যখন টিপলগুলি একটি খালি টেবিলের মধ্যে inোকানো হয় এবং এখনও প্রতিশ্রুতিবদ্ধ হয় না, তখন তারা ফাংশন dead_tuple_count
থেকে ক্ষেত্রের মধ্যে গণনা করা হয় pgstattuple
।
9.1 সহ ডেমো: একটি খালি টেবিল তৈরি করুন
CREATE TABLE tt AS (n numeric);
এর মধ্যে 10M সারি sertোকানো যাক:
INSERT INTO tt SELECT * FROM random() from generate_series(1,10000000);
অন্য সেশনে, সন্নিবেশের সময় প্রতি সেকেন্ডে pgstattuple পরীক্ষা করুন:
$ while true;
do psql -Atc "select dead_tuple_count from pgstattuple('tt')";
sleep 1;
done
ফলাফল:
0
69005
520035
1013430
1492210
1990415
2224625
2772040
3314460
3928660
4317345
4743770
5379430
6080950
6522915
7190395
7953705
8747725
9242045
0
সন্নিবেশ শেষ হয়ে গেলে এটি 0 এ ফিরে আসে (সমস্ত টিপল দৃশ্যমান এবং লাইভ হয়)।
এই কৌশলটি ব্যবহার করা যেতে পারে যখন টেবিলটি নতুনভাবে তৈরি করা হয় না, তবে প্রাথমিকটির dead_tuple_count
শূন্য-অমূল্যের মান হওয়ার সম্ভাবনা থাকে এবং এটি একই সাথে পরিবর্তিত হতে পারে যদি অটোভ্যাকুমের মতো অন্যান্য লেখার ক্রিয়াকলাপ চলছে (সম্ভবতঃ? কোন স্তরের স্তর সম্পর্কে নিশ্চিত নয়) স্বতঃব্যাকুয়ামের সাথে প্রত্যাশার সম্মতি)।
তবে সারণিটি বিবৃতি নিজেই ( CREATE TABLE ... AS SELECT
বা SELECT * INTO newtable
) তৈরি করে তৈরি করা হয়েছে, কারণ সৃষ্টিটি লেনদেন হয়েছে। কাজের দিকটি হ'ল কোনও সারি ছাড়াই টেবিল তৈরি করা (যুক্ত LIMIT 0
) এবং পরবর্তী লেনদেনে এটি পপুলেট করা।
দ্রষ্টব্য যেটি pgstattuple
নিখরচায় আসে না: এটি প্রতিটি কলে পুরো টেবিলটি স্ক্যান করে। এছাড়াও এটি সুপারউসারদের মধ্যে সীমাবদ্ধ।
কাস্টম কাউন্টার
পাভেল স্টিহুলের ব্লগে তিনি সিতে প্রয়োগ করা একটি পাল্টা ফাংশন সরবরাহ করেন যা নির্দিষ্ট সংখ্যক মৃত্যুদন্ড কার্যকর করার বিজ্ঞপ্তি দেয়। এক্সিকিউটারকে এটি কল করতে আপনাকে কোনওভাবে ক্যোয়ারির সাথে ফাংশনটি একত্রিত করতে হবে। প্রশ্নগুলির সময় নোটিশগুলি প্রেরণ করা হয় এবং তাদের পৃথক সেশনের প্রয়োজন নেই, কেবলমাত্র একটি এসকিউএল ক্লায়েন্ট যা তাদের প্রদর্শন করে ( psql
স্পষ্ট প্রার্থী হয়ে)।
নোটিশ বাড়াতে INSERT INTO এর উদাহরণ:
/* transformation */
INSERT INTO destination_table
SELECT (r).*
FROM (SELECT counter(to_destination_table(_source), 1000, true) r
FROM source _source) x
ফাংশনগুলির জন্য স্ট্যাকওভারফ্লো সম্পর্কিত সম্পর্কিত প্রশ্ন:
দীর্ঘকাল ধরে চলমান PostgreSQL ফাংশন থেকে ক্লায়েন্টে কীভাবে অগ্রগতি প্রতিবেদন করবেন
ভবিষ্যতের বিকল্পগুলি?
মে 2017 পর্যন্ত, বিকাশকারীদের সম্প্রদায়ের কাছে একটি প্রতিশ্রুতিবদ্ধ প্যাচ জমা দেওয়া হয়েছে:
[প্যাচ ভি 2] দীর্ঘকাল ধরে চলমান এসকিউএল অনুসন্ধানগুলির অগ্রগতি পর্যবেক্ষণ করার জন্য অগ্রগতি কমান্ড
যা PostgreSQL 11 বা তার পরে জেনেরিক সমাধান হিসাবে শেষ হতে পারে। ব্যবহারকারীরা যারা ওয়ার্ক-ইন-প্রগ্রেস বৈশিষ্ট্যে অংশ নিয়েছে বলে মনে করছেন তারা প্যাচের সর্বশেষতম সংস্করণ প্রয়োগ করতে পারেন এবং প্রস্তাবিত PROGRESS
আদেশটি ব্যবহার করতে পারেন।
pv
আগে কমান্ডটি দেখতে পেতাম না, এবং এটি আমার ডেবিয়ান সার্ভারে ডিফল্টরূপে ইনস্টল করা হয়নি, তবে এটি রেপোতে রয়েছে। বিবরণে বলা হয়েছে যে "পিভি (পাইপ ভিউয়ার) দুটি প্রক্রিয়াগুলির মধ্যে যে কোনও সাধারণ পাইপলাইনে beোকানো যেতে পারে যাতে ডেটা কীভাবে দ্রুত চলে যাচ্ছে" এর চাক্ষুষ ইঙ্গিত দেয়। একটি খুব দরকারী আদেশ!