খুব নিয়মিত ভিত্তিতে বিশাল পরিমাণে (4 মিলিয়ন সারি) মাইএসকিএল ডেটা মুছে ফেলা হচ্ছে


10

আমাদের কাছে একটি মাইএসকিএল টেবিল রয়েছে যে কোনও সময়ে প্রায় 12 মিলিয়ন সারি রয়েছে। টেবিলের আকার কিছুটা পরিচালনাযোগ্য রাখতে আমাদের পুরানো ডেটা মুছতে হবে।

এখনই আমরা ক্রোন জব ব্যবহার করে প্রতিদিন, মধ্যরাতে এই ক্যোয়ারীটি চালাচ্ছি:

DELETE FROM table WHERE endTime < '1393632001'

শেষবার যখন ক্যোয়ারীটি চালিত হয়েছিল তখন এটি 4,602,400 পরীক্ষা করে, 3 মিনিটের বেশি সময় নেয় এবং সিপিইউ ছাদ দিয়ে যায়।

মধ্যরাতে সিপিইউ স্পিকিং

পুরানো ডেটা সাফ করার পরেও আমরা সিপিইউ, সিঙ্ক্রোনাস ডিবি সংযোগগুলি, ডিস্ক কিউ গভীরতা ইত্যাদি অযৌক্তিকভাবে স্পাইকিং থেকে রক্ষা করতে কী করতে পারি?

পিএস: আপনি লক্ষ্য করবেন যে ক্যোয়ারীটি আমাদের ব্যবহার চক্রের মোটামুটি ইনপোর্টটিউন সময়ে ঘটছে। ধরে নিন যে আমরা ইতিমধ্যে ক্যোয়ারির সময়টি ব্যবহারের সর্বনিম্ন বিন্দুতে স্থানান্তরিত করেছি। এছাড়াও, "এন্ডটাইম" তে কোনও সূচি নেই এবং আমি যদি সম্ভব হয় তবে সেভাবেই রাখতে পছন্দ করবো কারণ সেখানে প্রচুর নিয়মিত একটি টন ডেটা sertedোকানো হচ্ছে, এবং খুব বেশি অনুসন্ধান নেই।

php  mysql 

প্রতি 10 মিনিট এবং 100 কে প্রতি রাউন্ড বা প্রতি 5 মিনিটে 50 কে কে মুছে ফেলতে ক্রোন জব ব্যবহার করুন

আরও নিয়মিত ভিত্তিতে ছোট অংশগুলি?

ঠিক আছে, তবে মনে হচ্ছে এটি কেবল দীর্ঘ সময়ের জন্য আমাদের ব্যবহারকারীর অভিজ্ঞতাকে বিকল করে দিতে পারে :) আমরা কোয়েরি / ডিজাইন অনুযায়ী কিছু করতে পারি?

1
186k ব্যবহারকারী, কোনও ডেডিকেটেড ডিবি লোক?

1
আপনি "ডাটাবেস প্রশাসকদের"
জেমস অ্যান্ডারসন

উত্তর:


13

আপনার সমস্যার সমাধান হ'ল "পার্টিশন" নামে পরিচিত একটি মাইএসকিউএল ক্ষমতা। ডকুমেন্টেশন এখানে

পার্টিশনটি যা করে তা হ'ল পৃথক "পার্টিশনগুলিতে" একটি একক টেবিল সংরক্ষণ করা। এগুলি একটি নির্দিষ্ট ভাব, সাধারণত একটি কলাম মান বা ব্যাপ্তি দ্বারা সংজ্ঞায়িত হয় range আপনার ক্ষেত্রে, এটি সম্ভবত ভিত্তিক হবে endTime- ধরে নেওয়া যে কোনও রেকর্ড তৈরি হওয়ার সময় এটি জানা যায় এবং এটি পরিবর্তন হয় না।

আপনি endTimeপ্রতিটি পার্টিশনে এক দিনের মূল্য সঞ্চয় করতে পারবেন । তারপরে মোছার পদক্ষেপটি একটি বড় টেবিলের একগুচ্ছ সারি মুছে ফেলার পরিবর্তে একটি বিভাজন কেটে যাবে। পার্টিশন কাটা একটি দ্রুত পদ্ধতি হবে।


বাহ, এটি অবিশ্বাস্যরূপে সহায়ক ছিল এবং এটি একটি নিখুঁত সমাধানের মতো বলে মনে হচ্ছে। পার্টিশন নিয়ে পড়ার সময়! ধন্যবাদ!

ওভারহেড থেকে সাবধান থাকা যদিও বিভাজন একটি ভাল সমাধান হতে পারে - এটি আপনার প্রশ্নগুলি উল্লেখযোগ্যভাবে কমিয়ে দিতে পারে। কাটা টেবিল এছাড়াও তাত্ক্ষণিক নয়। আমি পিটি-আর্কিভার বিবেচনা করব। আপনি স্পাইকের সাহায্যে আপনার সমস্যাগুলি সমাধান করতে পারেন এবং আপনার টেবিলটিকে এখনকার মতো সহজ রাখতে পারেন
akuzminsky
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.