ক্যাশে ফর্ম টেবিলের আকার বিশাল is


13

ক্যাশে টেবিলের আকার গত মাসে 10+ গিগাবাইটে বেড়েছে এবং আমি এটি কেটে দিয়ে সাময়িকভাবে এটি ঠিক করেছিলাম। গতবার আমি পরীক্ষা করেছিলাম এটি প্রায় 1 জিবি ছিল। সুতরাং কয়েক মাসের মধ্যে এটি আবার 10 জিবি হিট করবে। কীভাবে এটি মোকাবেলা করা উচিত?

মনে রাখবেন যে আমি এই সাইটে সমস্ত ক্রোন জব অক্ষম করেছি। যদি এই কারণ হয়, কোন ক্রোন সক্ষম করা উচিত?

উত্তর:


24

{cache_form}টেবিল অন্যান্য ক্যাশে টেবিল চেয়ে কিছুটা ভিন্ন পদ্ধতিতে একটু মজার, এবং আচরণ করে।

আপনি যদি একবার খেয়াল করেন drupal_flush_all_caches()তবে দেখতে পাবেন যে {cache_form}তা সাফ হয়নি। এটি অগ্রগামী ফর্মগুলিকে কমানোর হাত থেকে রক্ষা করা।

system_cron()ফাংশন থেকে পুরাতন তথ্য গাছ ছাঁটাই এর সাবধান করে {cache_form}অন্যান্য ক্যাশে টেবিল সহ।

আপনার সমস্ত ড্রুপাল সাইটে ক্রোন চালানো উচিত । যদি আপনি {cache_form}টেবিলটি জিনোরামাস হয় তবে আমি বাজি ধরছি আপনার {watchdog}এবং {session}টেবিলগুলিও আছে। অন্যান্য অনেকগুলি মডিউল তাদের নিজস্ব hook_cron()কার্যকারিতার অংশ হিসাবে গৃহকর্মী কার্যকলাপ চালায় ।

আপনি ইস্যুটির সারির চারপাশে ঝাঁকুনির কথাও বলতে পারেন। এর সাথে কিছু বাগ রয়েছে {cache_form}এবং আপনি এটির মধ্যে দিয়ে চলেছেন ।


ঠিক আছে আমি এখন ক্রোনগুলি সঠিকভাবে স্থাপন করেছি, তবে এখনও আমি দেখতে পেলাম যে এটি একদিনে 2 গিগাবাইটে বেড়েছে, তবে এটি এক সপ্তাহের পরে স্থির ছিল। এই টেবিলগুলিতে কি সংরক্ষণ করা হবে?
গুডএসপিএনপি

1
{ক্যাশে_ফর্ম এর অগ্রগতি ফর্ম জমা রয়েছে। {ওয়াচডগ} এর লগগুলি রয়েছে এবং {সেশন} এর সেশন তথ্য রয়েছে (প্রতি ব্যবহারকারীর রাষ্ট্র)।
এমপিডোনাদিও

6

থাম্ব বিধি: আপনার ওয়েবসাইটের গৃহকর্মের জন্য ক্রোন নিয়মিত চালানো উচিত।

আপনি এমপিডির কাছে আপনার মন্তব্যে উল্লেখ করেছেন যে ক্রোন স্থাপন এবং নিয়মিত সেগুলি চালানো সত্ত্বেও আপনার ক্যাশে_ফর্ম টেবিলটি দ্রুত বাড়ছে।

এর একটি সমাধান হ'ল আপনার ক্রোন আরও ঘন ঘন চালানো। প্রতি ছয় ঘন্টা বা তার চেয়ে কম বলুন? আপনি যদি সামর্থ্য না করেন তবে আরও পড়ুন।

বিকল্প সমাধান:

mymodule_cron() {
    cache_clear_all(NULL, 'cache_form');
}

এলিসিয়া ক্রোন ইনস্টল করুন এবং এখন আপনি নিজের মডিউলটির ক্রোন ফাংশনটি আলাদাভাবে চালাতে পারবেন। আপনি প্রতি ছয় ঘন্টা চালানোর জন্য আপনার মডিউলটির জন্য এলিসিয়া ক্রোনটির ফ্রিকোয়েন্সি রাখতে পারেন। যাতে আপনার cache_formছক ছয় ঘন্টা ছাঁটাই হয়।

এই ছাঁটাইয়ের প্রক্রিয়া চলাকালীন যে এন্ট্রিগুলি 6 ঘণ্টার বেশি নয় তাদের মোছা হবে না। কারণটি হ'ল, যদি সমস্ত এন্ট্রি মুছে ফেলা হয় তবে প্রবেশ মোছার সময় যে কোনও ফর্ম জমা দেওয়া হচ্ছে তা অদ্ভুত আচরণ করতে পারে।

Https://api.drupal.org/api/drupal/includes!form.inc/function/form_set_cache/7 এ কোডটি দেখুন

function form_set_cache($form_build_id, $form, $form_state) {
  // 6 hours cache life time for forms should be plenty.
  $expire = 21600;

মন্তব্যটি পড়ার সাথে সাথে তারা ধরে নিচ্ছে যে এটি প্রচুর পরিমাণে হওয়া উচিত এবং আপনার ক্ষেত্রে এটি আপনার পক্ষে প্রচুর পরিমাণে হয়ে উঠছে। সুতরাং কৌশলটি হয় হয় ক্যাশে_ফর্ম টেবিলটি আরও ঘন ঘন সাফ করা এবং of এর মান হ্রাস করে নিম্ন মানের হয়ে যায়, আপনি যদি ছয় ঘন্টার ডিফল্ট মানের চেয়ে ক্যাশে_ফর্মের এন্ট্রিগুলি আরও ঘন ঘন সাফ করতে চান তবে আপনাকে টিটিএল পরিবর্তন করতে হবে ক্যাশে_ফর্ম এন্ট্রি।

আপনি ক্যাশেবোজেক্ট ইনস্টল করে এবং তারপরে টিটিএলকেhook_cacheobject_presave 2 বা 3 ঘন্টা হতে পারে এমন পরিবর্তন করতে পারবেন তা প্রয়োগ করে can

mymodule_cacheobject_presave()($object, $cid, $bin) {
  // Extend the expiry period for prototype forms used in ajax enabled forms.                                                                  
  $cache_ttl = 1 ; // Change it to any number of hours
  if ($bin == 'cache_form') {
    $object->expire = REQUEST_TIME + $cache_ttl * 3600;
  }
}

এই পদ্ধতির একটি নেতিবাচক দিকটি হ'ল যদি ফর্মগুলি 2 ঘন্টার মধ্যে জমা দেওয়া না হয় (আপনার সেট করা আরটিএল মান) ফর্মের ডেটা হারাতে পারে এবং আপনি কিছু ফর্মের মেয়াদোত্তীর্ণ সমস্যা পেতে পারেন।



1

আমি যখন কাজ করছি এমন কোনও সাইটে পারফরম্যান্সের সমস্যা ছিল তখন আমি ক্যাশে ঠিক করার পরে আমি এটিতে ছুটে যাই। আপনি নিবন্ধটি এখানে পড়তে পারেন: https://thinktandem.io/blog/2017/11/22/debugging-with-new-relic-blazemeter-strace-more/

আমার ব্লগ পোস্ট থেকে, আপনি একটি সারি এবং ক্রোন সেটআপ যুক্ত করতে পারেন, তারপরে এলিসিয়া ক্রোন এর মতো কিছু ব্যবহার করে এটি সমস্ত কিছু এক সাথে ভালভাবে কাজ করতে পারে:

/**
 * Implements hook_cron_queue_info()
 */
function THE MODULE_cron_queue_info() {
  // Set up the worker queue.
  $queues['THE MODULE_queue'] = array(
    'worker callback' => 'THE MODULE_queue_process',
    'time' => 600,
  );
  return $queues;
}

/**
 * Implements hook_cron()
 */
function THE MODULE_cron() {
  // Load up our worker queue.
  $queue = DrupalQueue::get('THE MODULE_queue');

  // Set up the query for expired results.
  $sql = "SELECT cid FROM {cache_form} WHERE expire < :time";
  $query = db_query($sql, array(':time' => REQUEST_TIME));
  $results = $query->fetchAll(PDO::FETCH_ASSOC);

  // Split this into chunks for safety and speed.
  $chunks = array_chunk($results, 5000);
  foreach ($chunks as $chunk) {
    // Add the chunk to the queue worker.
    $queue->createItem($chunk);
  }
}

/**
 * Worker callback defined in hook_cron_queue_info().
 *
 * @param array $data
 *   The array of cids we want to delete.
 */
function THE MODULE_queue_process($data) {
  db_delete('cache_form')
    ->condition('cid', $data, 'IN')
    ->execute();
}

1

নিরাপদ ক্যাশে_ফর্ম ক্লিয়ার মডিউলটি ব্যবহার করুন ।

এটি আপনাকে প্রথমে যুক্তিসঙ্গত আকারে টেবিল ছাঁটাই করতে দেবে, তারপরে এটি বজায় রাখবে।

প্রকল্প পৃষ্ঠা থেকে উদ্ধৃত সংক্ষিপ্তসার:

ক্যাশে_ফর্ম টেবিল থেকে নিরাপদে সীমিত সংখ্যক আইটেম সরিয়ে ফেলুন।

মডিউলটি ইনস্টল হয়ে গেলে, প্রথমে ছাঁটাই করুন ক্যাশে_ফর্ম: drush safe-cache-form-clearটেবিলের আকারটি ধারাবাহিক না হওয়া পর্যন্ত চালান , এটি নির্দেশ করে যে আপনি 6 ঘন্টা থেকে পুরানো সমস্ত রেকর্ড সরিয়ে ফেলেছেন ।

এটি ক্রোন উপর চলতে থাকবে।

এটি Acquia দ্বারা তাদের গ্রাহকদের জন্য এই উদ্দেশ্যে নথিভুক্ত মডিউল । অ্যাকুইয়া ডকুমেন্টেশন পৃষ্ঠাটি অতিরিক্ত অতিরিক্ত তথ্য সরবরাহ করে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.