আমি কীভাবে (নিরাপদে) মংগোডিবিতে দীর্ঘ চলমান অপারেশনগুলিকে হত্যা করব?


11

মাঝেমধ্যে অপারেশনগুলি মঙ্গোডিবিতে নিয়ন্ত্রণের বাইরে চলে যায় এবং কয়েক শতাধিক সেকেন্ড চলতে পারে এবং হত্যা বা সম্পন্ন না হওয়া পর্যন্ত কার্য সম্পাদনকে প্রভাবিত করে।

যখন এটি ঘটে, আমি জানি যে আমি আমার কাছে killOp()উপলব্ধ ছিলাম তবে কীভাবে আমি কেবল লক্ষ্যবস্তু দীর্ঘ চলমান অপারেশনগুলিকে হত্যা না করে কীভাবে হত্যা করব (উদাহরণস্বরূপ) দীর্ঘায়িত অপারেশনগুলি প্রতিরূপে জড়িত (যা বিপজ্জনক হতে পারে)?

উত্তর:


15

এটি কিছুটা জটিল হতে পারে তবে মঙ্গোডিবি শেলটি মূলত একটি জাভাস্ক্রিপ্ট দোভাষী আমাদের ফিল্টারিংয়ের ক্ষেত্রে শালীন বিকল্প দেয়। এটি সম্পাদন করার জন্য আমি যে ফাংশনটি ব্যবহার করি তা এখানে:

// kills long running ops in MongoDB (taking seconds as an arg to define "long")
// attempts to be a bit safer than killing all by excluding replication related operations
// and only targeting queries as opposed to commands etc.
killLongRunningOps = function(maxSecsRunning) {
    currOp = db.currentOp();
    for (oper in currOp.inprog) {
        op = currOp.inprog[oper-0];
        if (op.secs_running > maxSecsRunning && op.op == "query" && !op.ns.startsWith("local")) {
            print("Killing opId: " + op.opid
            + " running over for secs: "
            + op.secs_running);
            db.killOp(op.opid);
        }
    }
};

এটি কেবল দ্বার maxSecsRunningপ্রান্তের উপরে থাকা প্রশ্নগুলিকে মেরে ফেলবে এবং localডাটাবেসগুলির বিরুদ্ধে চলমান কোনও কিছুই স্পর্শ করবে না , যা সেখানেই oplogজীবন (এবং তাই এটি দীর্ঘস্থায়ী প্রতিরূপের সাথে জড়িত এমন ডাটাবেস। অভ্যন্তরীণ ifশর্তসাপেক্ষে মানদণ্ড যুক্ত করা তুলনামূলকভাবে সহজ নির্দিষ্ট প্রয়োজনের উপর ভিত্তি করে প্রয়োজন হিসাবে আরও সুনির্দিষ্টভাবে টার্গেট পরিচালনা করতে।

কোডটি গিস্ট হিসাবেও উপলব্ধ (যেখানে আমি এটি চলমান ভিত্তিতে আপডেট করার কথা মনে করব)।


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

হ্যাঁ - আমি এটি বহুবার দিয়েছি এবং অপসকে হত্যা করার জন্য একটি অত্যন্ত বিপজ্জনক স্ক্রিপ্ট সহ একটি ব্লগ পোস্ট দেখেছি, তাই ভেবেছিলাম আমি নিজেকে একটি সুন্দর এবং সহজেই লিঙ্কযোগ্য সংস্করণ দেব
অ্যাডাম সি

3
আমি বিশ্বাস করি কমপক্ষে প্রতিলিপি ব্যবহার করার সময় এটি একটি বিপজ্জনক স্ক্রিপ্ট। db.currentOp()আমাদের শার্পড ডাটাবেসের উপর চালানো "" নেপস্পেস (ওরফে এনএস: "") এর ক্রিয়াকলাপগুলি প্রদান করে যা "রেপেল লেখক কর্মী এন" (যেখানে এন একটি পূর্ণসংখ্যা) এর একটি ডেস্ক নিয়ে খুব দীর্ঘকাল ধরে চলছে। আমি আপনাকে জিজ্ঞাসা করতে চাইবে যেগুলি আপনার প্রকৃত ডেটাবেজে নেমস্পেসগুলি শ্বেত তালিকাভুক্ত করার পরামর্শ দেব। শর্তের && (['users', 'analytics'].indexOf(op.ns) != -1)পরিবর্তে কিছু একটা !op.ns.startsWith
রানামোক

ভাল কথা, এবং এটি সম্পূর্ণরূপে সম্ভব যে নতুন সংস্করণে ফাঁকা নেমস্পেসটি আরও ঘন ঘন ঘটে - আমি মূলত স্ক্রিপ্টটি আপ টু ডেট রাখার উদ্দেশ্যে রেখেছিলাম, তবে আমি এখন মঙ্গোডিবি ছেড়ে চলে এসেছি, তাই সম্ভবত আমার ভয় নেই I যদি আপনি নিজের আপডেট কোডটি (পরবর্তী সংস্করণগুলিতে এটি প্রযোজ্য নোট সহ) জমা দেন তবে উত্তর হিসাবে আমি আপনাকে খুশিতে ভোট দিয়ে দেব :)
অ্যাডাম সি
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.