মাইএসকিউএল ঝুলিয়ে রাখে (ডেটা প্রেরণে কোয়েরি আটকে থাকে)


10

আমার নিম্নলিখিত পরিস্থিতি রয়েছে:

সপ্তাহে প্রায় 5 বার (ক্যাশে ক্লিয়ার, ট্র্যাফিক স্পাইকের মতো নির্দিষ্ট পরিস্থিতির সাথে সম্পর্কিত নয়) কিছু প্রশ্ন তথ্য প্রেরণে আটকে থাকে ( show processlist):

>     SELECT `main_table`.`entity_id`, `main_table`.`level`, `main_table`.`path`, `main_table`.`position`,
> `main_table`.`is_active`, `main_table`.`is_anchor`,
> `main_table`.`name`, `url_rewrite`.`request_path` FROM
> `catalog_category_flat_store_30` AS `main_table`
>      LEFT JOIN `core_url_rewrite` AS `url_rewrite` ON url_rewrite.category_id=main_table.entity_id AND
> url_rewrite.is_system=1 AND url_rewrite.product_id IS NULL AND
> url_rewrite.store_id='30' AND url_rewrite.id_path LIKE 'category/%'
> WHERE (path LIKE '1/2/%') AND (main_table.store_id = '30') AND
> (is_active = '1') AND (include_in_menu = '1') ORDER BY name ASC

দ্বিতীয়টি:

> SELECT `main_table`.`entity_id`, main_table.`name`, main_table.`path`,
> `main_table`.`is_active`, `main_table`.`is_anchor`,
> `main_table`.`manually`, `url_rewrite`.`request_path` FROM
> `catalog_category_flat_store_10` AS `main_table`  LEFT JOIN
> `core_url_rewrite` AS `url_rewrite` ON
> url_rewrite.category_id=main_table.entity_id AND
> url_rewrite.is_system=1 AND url_rewrite.product_id IS NULL AND
> url_rewrite.store_id='10' AND url_rewrite.id_path LIKE 'category/%'
> WHERE (main_table.is_active = '1') AND (main_table.include_in_menu =
> '1') AND (main_table.path like '1/2/1528/1569/%') AND (`level` <= 4)
> ORDER BY `main_table`.`position` ASC

এই প্রশ্নগুলি নেভিগেশন মেনু তৈরির সাথে সম্পর্কিত। এগুলি কোনও সমস্যা ছাড়াই চলে এবং সারাক্ষণ খুব দ্রুত।

মাসে কয়েকবার আরও কিছু ক্যোয়ারী ডেটা সেড করতে বা টেবিল লকের জন্য অপেক্ষা করতে আটকে যায়:

INSERT INTO `catalogsearch_result` SELECT 316598 AS `query_id`, `s`.`product_id`, MATCH (s.data_index) AGAINST ('STRING HERE' IN BOOLEAN MODE) AS `relevance` FROM `catalogsearch_fulltext` AS `s`
INNER JOIN `catalog_product_entity` AS `e` ON e.entity_id = s.product_id WHERE (s.store_id = 38) AND (MATCH (s.data_index) AGAINST ('STRING HERE' IN BOOLEAN MODE)) ON DUPLICATE KEY UPDATE `relevance` = VALUES(`relevance`)

(অনুসন্ধান সম্পর্কিত)

অতিরিক্ত তথ্য:

  • কোর_আর্ল_উইরাইট - 3 এম রেকর্ড (30 ওয়েবসাইট, 100 কে পণ্য)
  • ক্যাটালগ_শ্রেণী_ফ্ল্যাট_স্টোর_ * - ২০০০ রেকর্ড (ফ্ল্যাট বিভাগ ব্যবহার করা সক্ষম করা আছে)

এটি কিছু বিশাল হার্ডওয়্যার (ভিএসওয়্যার মাস্টার 8 টি কর বরাদ্দ এবং 64 গিগাবাইট র‌্যাম, একটি এসএন স্টোরেজে এসএসডি ডিস্ক রয়েছে) ব্যবহার করে একটি সেটআপে চলছে, মাইএসকিএল অনুকূলিত হয়েছিল এবং ধারাবাহিকভাবে পর্যবেক্ষণ করা হয়। I / O সম্পর্কিত অতীতে কিছু সমস্যা ছিল (কিছু সার্ভার এবং স্যান স্টোরেজের মধ্যে লিঙ্কটি সহ)।

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

অন্য কেউ অনুরূপ সমস্যা হচ্ছে?

হালনাগাদ:

reindex সমস্ত অনুসন্ধান একটি অস্থায়ী টেবিলের দিকে সরানো হয়েছিল (সুতরাং এটি উত্পাদন দ্বারা ব্যবহৃত প্রধান টেবিলটি লক করে না, তারপরে tmp টেবিলটির নতুন নাম দেয়)। সুতরাং, পুনর্নির্দেশ প্রক্রিয়াটি ওয়েবসাইট অনুসন্ধানকারীদের সাথে হস্তক্ষেপ করে না। https://github.com/magendooro/magento-fulltext-reindex kudos to carco


আপনি কি নিশ্চিত যে তারা দ্রুত দৌড়েছিল? বিকল্প নেভিগেশন মেনু ক্যাশে করা হতে পারে। আফাইক একটি সূচকের ব্যবহার সহজ নয় কারণ, শ্রেণি_উড, ইস_সিসটেম এবং পাথের উপরে কোনও সূচক নেই। এবং পাথ আ আ লাইক, সুতরাং মাইএসকিউএল এখানে একটি বাস্তব সমস্যা আছে। আমি কোনও ডিবি রফতানি করব না ;-) মাত্র 2 সেন্সেন্ট
ফ্যাবিয়ান

1
যে নির্বাচন 1s অধীনে চলমান। প্রথমটি যখন ডেটা প্রেরণে থাকে তখন
প্রশ্নগুলি স্তম্ভিত হয়

1
FWIW আমি একই সমস্যা দেখেছি।
ফিলিঙ্কল

@ ফিল্বিংকল আপনার অনুসন্ধানের সেটআপটি কেমন? সম্পূর্ণ লিখা?
ফ্লোরিনেলচিস

1
github.com/magendooro/magento-fulltext-reindex এটি আমাদের সহায়তা করেছে এবং উত্স কোড প্রকাশ করার সিদ্ধান্ত নিয়েছে।
ফ্লোরিনেলচিস

উত্তর:


4

এটি একটি কোর বাগ / রিগ্রেশনের মতো দেখাচ্ছে যা আমরা ১.7 দেখলাম যেখানে ব্লক এবং সংগ্রহের ক্যাশে নেভিগেশন মেনুতে কার্যকরভাবে কাজ করছে না ( catalog/navigation/top.phtml)।

আপনি এটি অপসারণ করে পরীক্ষা করতে পারেন, বা সাময়িকভাবে একটি দিয়ে একটি ফাইলের মধ্যে আউটপুট ক্যাপচার করুন ob_startএবং এটি একটি স্ট্যাটিক ফাইল / মেমক্যাচ থেকে পরিবেশন করতে পারেন।

এছাড়াও, আপনি যে হার্ডওয়্যারটি ব্যবহার করছেন সেটি বিশাল শোনাচ্ছে না এবং আপনার কাছে যে স্টোর রয়েছে তার আকারের জন্য নির্দিষ্ট করা দেখায়। সেখানেও সম্ভবত I / O বাধা রয়েছে - সান স্টোরেজ + কনজিস্টেড নেটওয়ার্ক = খারাপ পারফরম্যান্স।

-

অপরিশোধিত সমাধান হিসাবে, আপনি এটি সনাক্ত করতে নেভিগেশন (ডাম্প get_class($this)) এর জন্য ব্লক শ্রেণিকে সামঞ্জস্য করতে পারেন top.phtml

এটি নতুন সংস্করণটির অনুরোধ করা হয়েছে এমন বিভাগের স্তরের ক্যাচিং ছাড়াই সাইট-প্রশস্ত ক্যাশিংয়ের অনুমতি দেবে। is_activeআপনি যদি এলোমেলো মেনু আইটেমগুলি নির্বাচিত প্রদর্শিত না থেকে বাঁচতে (এবং পরিবর্তে একটি জেএস বিকল্প বাস্তবায়ন করেন) গাছের উপস্থাপক থেকে শ্রেণি সরিয়ে ফেলার উপযুক্ত ।

public function getCacheTags()
{
  return parent::getCacheTags();
}
public function getCacheLifetime()
{
  return null;
}
public function getCacheKey()
{
  return parent::getCacheKey();
}
public function getCacheKeyInfo()
{
  $shortCacheId = array(
    'CATALOG_NAVIGATION',
    Mage::app()->getStore()->getId(),
    Mage::getDesign()->getPackageName(),
    Mage::getDesign()->getTheme('template'),
    Mage::getSingleton('customer/session')->getCustomerGroupId(),
    'template' => $this->getTemplate(),
    'name' => $this->getNameInLayout(),
  );
  $cacheId = $shortCacheId;
  $shortCacheId = array_values($shortCacheId);
  $shortCacheId = implode('|', $shortCacheId);
  $shortCacheId = md5($shortCacheId);
  $cacheId['short_cache_id'] = $shortCacheId;
  return $cacheId;
}

আমরা এর আগে 32 টি কোর এবং 92 জিবি র‌্যাম বরাদ্দ করেছি (এবং সেই অনুসারে মাইএসকিএল কনফিগারেশন পরিবর্তন করেছি, একই ফলস্বরূপ) - সার্ভারটিতে 64 টি কোর এবং 184 গিগাবাইট র‌্যাম রয়েছে (এই কারণেই আমি এটি বিশাল বলছিলাম) ... দুঃখিত, আমি উল্লেখ করি নি এটি ম্যাজেন্টো এন্টারপ্রাইজ 1.12। আমরা নজরদারি করেছিলাম ট্র্যাফিক ট্র্যাফিক কোনও বাধা বিপত্তি দেখানোর কিছুই দেখেনি (আমাদের আগে সমস্যা ছিল, ফাইবার সংযোগকারী সঠিকভাবে কাজ করছে না, এটি প্রতিস্থাপন করা হয়েছিল)।
ফ্লোরিনেলচিস

এন্টারপ্রাইজ 1.12 সিই 1.7 - এগুলি একই কোড বেস। সুতরাং বাগ উভয়কেই প্রভাবিত করবে। আমি যা বলেছি তা চেষ্টা করুন (স্তরযুক্ত শীর্ষে এনএভিতে হার্ড-কোড করুন এবং বিভাগগুলি অক্ষম করুন) এবং আপনি নিশ্চিত করতে পারেন can যদি সফ্টওয়্যারটি ব্যবহারের জন্য সঠিকভাবে সেট আপ না করা হয় তবে আরও হার্ডওয়্যার কোনও পার্থক্য আনতে পারে না।
বেন লেসানী - সোনাসি

আমি আমার উত্তরটি সম্পাদনা করতে যাচ্ছি এবং আপনাকে নিশ্চিত করার জন্য কিছু হ্যাকি কোড যুক্ত করতে যাচ্ছি
বেন লেসানী - সোনাসি

এটি শুরু করার জন্য একটি ভাল জায়গা, আমি কিছু জায়গায় রেখে দেব এবং এটি 1 সপ্তাহের মধ্যে ক্রাশ হচ্ছে কিনা তা দেখুন :)
ফ্লোরিনেল এই

3

এ ফাংশন প্রতিস্থাপন করুন

অ্যাপ্লিকেশন / কোড / কোর / পুরোনো যাদুকর / ক্যাটালগ / সাহায্যকারী / শ্রেণী / URL / Rewrite.php:

/**
* Join url rewrite to select
*
* @param Varien_Db_Select $select
* @param int $storeId
* @return Mage_Catalog_Helper_Category_Url_Rewrite
*/
public function joinTableToSelect(Varien_Db_Select $select, $storeId)
{
$select->joinLeft(
array('url_rewrite' => $this->_resource->getTableName('core/url_rewrite')),
'url_rewrite.category_id=main_table.entity_id'
);
$select->where('url_rewrite.is_system = ?', '1');
$select->where($this->_connection->quoteInto('url_rewrite.store_id = ?', (int)$storeId));
$select->where($this->_connection->prepareSqlCondition('url_rewrite.id_path', array('like' => 'category/%')));
$select->where('request_path = url_rewrite.request_path');

return $this;
}

2

আমাদের ক্ষেত্রে এটি এই ধীর অনুসন্ধানে নেমে এসেছে:

SELECT `main_table`.`entity_id`
      , `url_rewrite`.`request_path`
FROM `catalog_product_entity` AS `main_table` 
INNER JOIN `catalog_product_website` AS `w`
   ON main_table.entity_id = w.product_id 
LEFT JOIN `core_url_rewrite` AS `url_rewrite`
   ON url_rewrite.product_id = main_table.entity_id
   AND url_rewrite.is_system = 1
   AND url_rewrite.category_id IS NULL
   AND url_rewrite.store_id = 1
   AND url_rewrite.id_path LIKE 'product/%'
WHERE (w.website_id='1')

থেকে অ্যাপ্লিকেশন / কোড / কোর / পুরোনো যাদুকর / সাইটম্যাপ / মডেল / রিসোর্স / ক্যাটালগ / Product.php

এটি ক্যাটাগরি_আইডি হ'ল নোট স্টেটমেন্টের কারণে। মাইএসকিউএল কোনও কারণে কোনও সূচক ব্যবহার করে নি।

সরানো হচ্ছে category_id নাল এবং সেটিং id_path RegExp '^ পণ্য / [0-9] $' সমস্যা সংশোধন।

অনুলিপি অ্যাপ্লিকেশন / কোড / কোর / পুরোনো যাদুকর / ক্যাটালগ / সাহায্যকারী / পণ্য / URL- / Rewrite.php করার অ্যাপ্লিকেশন / কোড / স্থানীয় / পুরোনো যাদুকর / ক্যাটালগ / সাহায্যকারী / পণ্য / URL- / Rewrite.php এবং এই ফাংশন যোগ করুন:

public function joinTableToSelectPatch(Varien_Db_Select $select, $storeId)
{ 
$select->joinLeft(
    array('url_rewrite' => $this->_resource->getTableName('core/url_rewrite')),
    'url_rewrite.product_id = main_table.entity_id AND url_rewrite.is_system = 1 AND ' .
        $this->_connection->quoteInto('url_rewrite.store_id = ? AND ',
            (int)$storeId) .
        $this->_connection->prepareSqlCondition('url_rewrite.id_path', array('regexp' => '^product/[0-9]+$')),
    array('request_path' => 'url_rewrite.request_path'));
return $this;
}

তারপর কপি অ্যাপ্লিকেশন / কোড / কোর / পুরোনো যাদুকর / সাইটম্যাপ / মডেল / রিসোর্স / ক্যাটালগ / Product.php করার অ্যাপ্লিকেশন / কোড / স্থানীয় / পুরোনো যাদুকর / সাইটম্যাপ / মডেল / রিসোর্স / ক্যাটালগ / Product.php এবং পরিবর্তন লাইন 72 হবে:

$urlRewrite->joinTableToSelectPatch($this->_select, $storeId);

মূলত https://www.goivvy.com/blog/solve-magento-stuck-generating-google-sitemap-large-website থেকে নেওয়া

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