আমার কাছে g 2.1 মিলিয়ন সারি সহ একটি পোস্টগ্রিস টেবিল রয়েছে। আমি এটিতে নীচের আপডেটটি চালিয়েছি:
WITH stops AS (
SELECT id,
rank() OVER (ORDER BY offense_timestamp,
defendant_dl,
offense_street_number,
offense_street_name) AS stop
FROM consistent.master
WHERE citing_jurisdiction=1
)
UPDATE consistent.master
SET arrest_id=stops.stop
FROM stops
WHERE master.id = stops.id;
এই জিজ্ঞাসাটি চালাতে 39 ঘন্টা সময় নিয়েছে। আমি এটি একটি 4 (শারীরিক) কোর আই 7 কিউ 720 ল্যাপটপ প্রসেসরের উপর প্রচুর পরিমাণে র্যাম চালাচ্ছি, সময়ের বেশিরভাগ অংশ চালাচ্ছি না। এইচডিডি জায়গার কোনও সীমাবদ্ধতা নেই। সারণীটি সম্প্রতি শূন্য করা হয়েছে, বিশ্লেষণ করা হয়েছিল এবং পুনরায় সংশোধন করা হয়েছিল।
কোয়েরিটি চলমান পুরো সময়টি, কমপক্ষে প্রাথমিক WITHসম্পন্ন হওয়ার পরে , সিপিইউ ব্যবহার সাধারণত কম ছিল, এবং এইচডিডি ব্যবহার করা হয়েছিল 100%। এইচডিডি এত কঠোরভাবে ব্যবহৃত হচ্ছে যে অন্য কোনও অ্যাপ্লিকেশন স্বাভাবিকের চেয়ে বেশ ধীরে ধীরে চলছিল।
ল্যাপটপের পাওয়ার সেটিং উচ্চ কার্যকারিতা (উইন্ডোজ 7 এক্স 64) এ ছিল।
এখানে ব্যাখ্যা দিন:
Update on master (cost=822243.22..1021456.89 rows=2060910 width=312)
CTE stops
-> WindowAgg (cost=529826.95..581349.70 rows=2060910 width=33)
-> Sort (cost=529826.95..534979.23 rows=2060910 width=33)
Sort Key: consistent.master.offense_timestamp, consistent.master.defendant_dl, consistent.master.offense_street_number, consistent.master.offense_street_name
-> Seq Scan on master (cost=0.00..144630.06 rows=2060910 width=33)
Filter: (citing_jurisdiction = 1)
-> Hash Join (cost=240893.51..440107.19 rows=2060910 width=312)
Hash Cond: (stops.id = consistent.master.id)
-> CTE Scan on stops (cost=0.00..41218.20 rows=2060910 width=48)
-> Hash (cost=139413.45..139413.45 rows=2086645 width=268)
-> Seq Scan on master (cost=0.00..139413.45 rows=2086645 width=268)
citing_jurisdiction=1কয়েক হাজার কয়েক সারি বাদ দেয়। এমনকি এই WHEREধারাটি সহ, আমি এখনও 2 মিলিয়ন সারিতে অপারেটিং করছি operating
হার্ড ড্রাইভটি ট্রুক্রিপ্ট 7.1a এর সাথে পুরো ড্রাইভ-এনক্রিপ্টড। একটু নিচে যে গতি জিনিষ, কিন্তু না যথেষ্ট একটি ক্যোয়ারী নিতে কারণ যে অনেক ঘন্টা।
WITHঅংশ মাত্র 3 মিনিট চালানোর সময় লাগে।
arrest_idক্ষেত্র বিদেশী কী-এর জন্য কোন সূচক ছিল। এই টেবিলটিতে 8 টি সূচক এবং 2 বিদেশী কী রয়েছে। ক্যোয়ারির অন্যান্য ক্ষেত্রগুলি সূচীভূত।
arrest_idক্ষেত্র ছাড়া সীমাবদ্ধতা ছিল NOT NULL।
সারণীতে মোট 32 টি কলাম রয়েছে।
arrest_idবিভিন্ন ধরণের চরিত্রের (20) হয় । আমি বুঝতে পারি যে rank()একটি সংখ্যাসূচক মান উত্পন্ন হয়, তবে আমাকে পৃথকীকরণের অক্ষর ব্যবহার করতে হবে (20) কারণ আমার অন্যান্য সারি রয়েছে যেখানে citing_jurisdiction<>1এই ক্ষেত্রটির জন্য অ-সংখ্যাসূচক ডেটা ব্যবহার করা হয়।
arrest_idক্ষেত্র সহ সব সারি জন্য ফাঁকা ছিল citing_jurisdiction=1।
এটি একটি ব্যক্তিগত, উচ্চ প্রান্ত (1 বছর আগের হিসাবে) ল্যাপটপ। আমি একমাত্র ব্যবহারকারী অন্য কোনও অনুসন্ধান বা ক্রিয়াকলাপ চলছে না। লক করা অসম্ভব বলে মনে হচ্ছে।
এই টেবিলের কোথাও বা ডাটাবেসে অন্য কোথাও কোনও ট্রিগার নেই।
এই ডাটাবেসের অন্যান্য ক্রিয়াকলাপগুলি কখনই অস্বাভাবিক পরিমাণে সময় নেয় না। যথাযথ সূচকের সাথে, ক্যোরিগুলি SELECTসাধারণত বেশ দ্রুত হয়।
Seq Scanকিছুটা ভীতিজনক ...