যদি আমার দীর্ঘকাল ধরে চলমান পোস্টগ্রিজ কোয়েরি থাকে এবং নিয়মিত "কিল [পিড]" কাজ করে না, এবং পিজি_স্যান্সেল_ব্যাকএন্ড কাজ করে না, আমার কী করা উচিত?
যদি আমার দীর্ঘকাল ধরে চলমান পোস্টগ্রিজ কোয়েরি থাকে এবং নিয়মিত "কিল [পিড]" কাজ করে না, এবং পিজি_স্যান্সেল_ব্যাকএন্ড কাজ করে না, আমার কী করা উচিত?
উত্তর:
আপনি উচিত না kill -9 কোনো postgres প্রক্রিয়া যদি না আপনার লক্ষ্যে সমগ্র সার্ভার ডাউন জোরপূর্বক আনা হয়। আপনি যে কোনও প্রক্রিয়াটি শেল থেকে পিজি_স্যান্সেল_ব্যাকএন্ড () কলটির প্রতিক্রিয়া না জানিয়ে হত্যা করতে পারেন
kill <pid>
অর্থাৎ -9 নয়। নোট করুন যে আমি কয়েকবার দেখেছি যেখানে এমনকি কোনও নেটওয়ার্ক সংযোগের ডেটার জন্য কিছু লুপের জন্য অপেক্ষা করার প্রক্রিয়াটির কারণে এটি কাজ করে না। আমি যদি সঠিকভাবে স্মরণ করি তবে ক্লায়েন্ট প্রক্রিয়াটিকে হত্যা করা এটি যত্ন নিয়েছে।
http://www.postgresql.org/docs/current/static/server-shutdown.html
পিজি_স্যান্সেল_ব্যাকেন্ড প্রসেসে SIGINT প্রেরণের সমতুল্য।
পিজি_টারনেট_ব্যাকএন্ড একইভাবে SIGTERM- এর জন্য, তবে যদি pg_cancel_backend কাজ করছে না আমি পিজি_মিটারমিট_ব্যাকএন্ড কেন করব তা দেখছি না।
আপনি যদি এই বিকল্পগুলি ব্যবহার করে দেখে থাকেন তবে আপনি SIGQUIT চেষ্টা করতে পারেন। দস্তাবেজগুলি বলে, " এটি কেবল জরুরী পরিস্থিতিতেই সুপারিশ করা হয়। "
(আপনি যদি নিজের ডেটা ঘৃণা করেন এবং আশা করেন এটি মারা যায়, আপনি সিক্কিল ব্যবহার করতে পারেন But তবে আমি তা করব না))
আপনি kill
সরাসরি বা ব্যবহার করতে পারেন pg_ctl kill
।
আপনার যদি সাম্প্রতিক পোস্টগ্রিস থাকে তবে আপনি pg_terminate_backend
পরিবর্তে চেষ্টা করতে পারেন ।
উপরের তার বিবৃতিতে ঘুষগুলি সঠিক ...
যদি আপনি SHUTDOWN
সার্ভারে চেষ্টা করছেন তবে আমার জন্য:
আমি কেবল অবসরপ্রাপ্ত ডেটাবেস / স্কিমাসগুলি অপসারণের চেষ্টা করছি, এর এখনও একটি দীর্ঘসূত্রতা রয়েছে যা এটি চলতে দেবে না।
সুতরাং, আপনার প্রশ্নের উত্তর দিতে,
আমার যদি দীর্ঘদিন ধরে চলমান পোস্টগ্রিজ কোয়েরি থাকে ...
পিজি_স্যান্সেল_ব্যাকেন্ড কাজ করে না ...
আমার কি করা উচিৎ?
কোনওভাবেই সার্ভারটি বন্ধ করার সাথে সম্পর্কিত নয় ।
pg_cancel_backend()
কাজ না করার এই আচরণও দেখেছি । এবং আমার কাজের সমাধান ভাগ করে নিতে চেয়েছিলেন।
আমি কোনও সমস্যা এখনও পর্যন্ত দেখিনি, কোনও ধরণের ডেটা "ক্ষয়" রয়েছে with
আবার, আমি কোয়েরিও মারার চেষ্টা করছি না Active
।
- আমি 777777 এর একটি সেশন বা পিআইডি দিয়ে ব্যবহারকারী "এ" হিসাবে লগ ইন করেছি।
- এবং 123456789 হিসাবে খোলার USER "এ" থেকে অন্য সেশনটি সংযোগ বিচ্ছিন্ন করার চেষ্টা এবং জোর করে চলেছে
- যা একটি ঘুমন্ত সংযোগ, এবং সে কারণেই আমি
idle
নীচে আমার অনুসন্ধানগুলিতেও সন্ধান করি।
SELECT *
FROM pg_stat_activity
WHERE pid = 123456789
AND STATE = 'idle';
- চেষ্টা 1
SELECT pg_cancel_backend(pid)
FROM pg_stat_activity
WHERE pid = 123456789
AND STATE = 'idle';
- আকর্ষণীয়ভাবে যথেষ্ট রেজাল্ট জানিয়েছে যে বাতিল হওয়া সত্য তবে এখনও বিদ্যমান।
SELECT *
FROM pg_stat_activity
WHERE pid = 123456789
AND STATE = 'idle';
- চেষ্টা 2
SELECT pg_terminate_backend(pid)
FROM pg_stat_activity
WHERE pid = 123456789
AND STATE = 'idle';
- এবং এখন এর অস্তিত্ব নেই ..
SELECT *
FROM pg_stat_activity
WHERE pid = 123456789
AND STATE = 'idle';
- দ্রষ্টব্য: আমি লোককে অনুলিপি করা এবং আটকানো এবং তাদের জীবন নষ্ট থেকে বাঁচাতে সাহায্য করার জন্য হাস্যকর পিড ব্যবহার করার চেষ্টা করেছি।
- দ্রষ্টব্য: ডিফল্টরূপে পোস্টগ্রাগুলি কেবল আপনাকে ব্যবহারকারী হিসাবে আপনার লগিনের অধীনে চলমান প্রক্রিয়াগুলিকে হত্যা করতে দেয়,
- দ্রষ্টব্য: তবে আপনি এটি ইতিমধ্যে জানতেন।
আশাকরি এটা সাহায্য করবে. =)
~ জে