পারফরম্যান্স অপ্টিমাইজেশনের স্বার্থে মডেল স্তরের কোন অংশগুলি বাইপাস করা যায়


28

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

ডাইরেক্ট এসকিউএল ব্যবহার করে আমি বেশ উন্নতি দেখছি - 00 1800 সন্নিবেশ / সেকেন্ড। আমরা আমাদের মডেলগুলির পারফরম্যান্সকে অপ্টিমাইজ করার চেষ্টা করার কথা ভাবছি, তবে অবশ্যই আমরা ম্যাজেন্টো কোর আমাদের যে চমৎকার স্থিতিশীলতা এবং নমনীয়তা দেয় তা হারাতে চাই না।

আমি ভাবছি যে আগে কেউ এই পথে চলে গেছে কিনা এবং মডেল স্তরের উপাদানগুলির ক্ষেত্রে কিছু সহজ জয় আছে কিনা তা তুলনামূলকভাবে নিরাপদে বাইপাস করা যেতে পারে যা উল্লেখযোগ্য পারফরম্যান্সকে বাড়িয়ে তুলবে।

ভালো জিনিস:

  • শ্রেণীর নাম রেজোলিউশন
  • ইভেন্টগুলি সংরক্ষণের আগে এবং পরে
  • ইভেন্ট প্রেরণ
  • লেনদেন
  • প্রভৃতি

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


1
আপনি কি মডেল অবজেক্টটি ডেটা লিখতে পুনরায় ব্যবহার করার চেষ্টা করেছেন? অর্থাৎ এটি সাফ করুন, ডেটা সেট করুন এবং তারপরে সেভ করুন। এটি পিএমপি-র অন্তর্নিহিত গেটমোডেল এবং অবজেক্ট ইনস্ট্যান্টেশনের কলগুলি এড়াতে পারে avoid
ডেভিডালগার

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

ধন্যবাদ, ডেভিড! আমি এটিও চেষ্টা করব। প্রকৃতপক্ষে আমি মনে করি আমরা এখনও নির্বাহ করা হচ্ছে এমন প্রশ্নের সংখ্যা দ্বারা আবদ্ধ আমি / হে O আমাদের প্রায় 20 টি প্রশ্ন রয়েছে যা একটি প্রদত্ত মডেল সেভের জন্য চলমান রয়েছে - এর কয়েকটি আমাদের রক্ষা করতে হবে (সম্পর্কিত টেবিলগুলি বসানো দরকার, সংরক্ষণের আগে অস্তিত্বের জন্য যাচাই করার জন্য নির্বাচন করুন) এবং অন্যগুলি যা আমরা সম্ভবত অপসারণ করতে পারি (বহিরাগত সেশন সংরক্ষণ করে, অতিরিক্ত লোড) () এর প্রয়োগ লজিক এড়ানো যেতে পারে)
kalenjordan

আপনি সহজেই জানতে পারেন। পুরো রুট dir এবং মাইএসকিউএল ডিবি একটি র‌্যাম ডিস্কে মাউন্ট করুন। তবে আমি দৃ strongly়ভাবে সন্দেহ করব যে I / O সার্ভার গ্রেড সরঞ্জামগুলির একটি সমস্যা। আপনি সম্ভবত কেবলমাত্র "সংরক্ষণের সূচক" অক্ষম করে আরও বেশি সুবিধাগুলি দেখতে পাবেন।
বেন লেসানী - সোনাসি

উত্তর:


17

একটি জিনিস যা পুরো সাইটের গতি বাড়িয়ে তুলতে পারে তা হ'ল Varien_Profilerআপনার প্রোডাকশন সাইটের সমস্ত উল্লেখ মুছে ফেলা । এমনকি প্রোফাইলার অক্ষম থাকলেও, এটি সর্বদা এটি সক্ষম করা আছে কিনা তা যাচাই করে তাই প্রতিটি কল Varien_Profiler::একটি অতিরিক্ত ifবিবৃতি দেবে। অবশ্যই, এই সমস্ত কলগুলি অপসারণটি আর প্রোফাইলার ব্যবহার করতে না পারার মূল্যে আসে। যাইহোক, এটি 5% বা তার বেশি দ্বারা পুরো সাইটের গতি বাড়িয়ে তুলতে পারে (এটি একটি বিষয়গত দক্ষতা, তবে Varien_Profilerপুরো ম্যাজেন্টোতে অনেকগুলি কল রয়েছে )। আমি সমস্ত ফাইলগুলিতে এই কলগুলি স্বয়ংক্রিয়ভাবে মন্তব্য করার জন্য একটি সামান্য শেল স্ক্রিপ্ট লিখেছিলাম এবং আমি যখন কাজ করব তখন আমার পোস্টে এটি যুক্ত করব এবং আমার কোড প্রস্তুত রাখব।

কোড হিসাবে এই কলগুলি মন্তব্য করার জন্য এখন প্রতিশ্রুতি দেওয়া হয়েছে:

grep -l "Varien_Profiler" * -R > profiler.txt 
for x in `cat profiler.txt` 
do 
sed -i '/Varien_Profiler/s/^/\/\//' $x
done

এটি অ্যাপ্লিকেশনটিতে / পাশাপাশি lib / ফোল্ডারে লিনাক্স কনসোলে চালানো উচিত। আপনার পরে ফাইলটি /lib/Varien/Profiler.php ম্যানুয়ালি সামঞ্জস্য করতে হবে। এছাড়াও মনে রাখবেন যে লাইভ নেওয়ার আগে আপনার নিরাপদ পরিবেশে এটি ভালভাবে পরীক্ষা করা উচিত - তবে আমার ধারণা এটি সুস্পষ্ট হওয়া উচিত;)


কি দারুন! অক্ষম থাকাকালীন কেবল ভারিয়ান_প্রফিলার কলগুলির জন্য আমি 5% এর কাছাকাছি এমনকি কোনও কিছু কল্পনাও করতে পারি না। আমি এটি পরীক্ষা করে দেখুন, ধন্যবাদ!
kalenjordan

@ স্পারকসফট প্রতিশ্রুতি অনুসারে, এখনই কোডটি যুক্ত করেছি।
এমপিএপার

1
সেখান থেকেই সি প্রম্পম্পেলার শর্তগুলি সত্যিই দুর্দান্ত। এটি খুব খারাপ যে পিএইচপি তাদের নেই, তবে অবশ্যই এর অর্থ এটি প্রাক-সংকলন এবং অন্তর্নির্মিত ক্যাশে করার নিজস্ব পদ্ধতি থাকতে হবে। :)
ডেভিডালগার

2
আপনি find . -type f -exec grep -qF 'Varien_Profiler' {} \; -exec sed -i '/Varien_Profiler/d' {} \;যদি দ্রুত অনিলিঞ্জার পছন্দ করেন তবে আপনি এটিও লিখতে পারেন।
কোজিরো

14

ম্যাজেন্টো মডেলগুলিতে প্রচুর পরিমাণে সেভ করার সময় ম্যাজেন্টো সূচককে অক্ষম করা ভাল যা প্রক্রিয়াটি ধীর করে দেয়:

$processes = Mage::getSingleton('index/indexer')->getProcessesCollection();
$processes->walk('setMode', array(Mage_Index_Model_Process::MODE_MANUAL));
$processes->walk('save');

এবং আপনার হয়ে গেলে এটি সক্ষম করে:

$processes->walk('setMode', array(Mage_Index_Model_Process::MODE_REAL_TIME));
$processes->walk('save');

আহ গোছা, দুর্দান্ত। সুতরাং এটির মতো হবে যদি আপনি প্রচুর গ্রাহক_সেন্টি রেকর্ড সংরক্ষণ করেন এবং প্রতিটি সেভের জন্য গ্রাহক সূচীকরণ এড়াতে চান? আমার ক্ষেত্রে আমি আসলে এমন কোনও কাস্টম সত্তার বিরুদ্ধে যাচ্ছি যার কোনও ইনডেক্সিং নেই well অন্ততপক্ষে আমি যে মানদণ্ডটি করেছি তার পক্ষে ভাল। আমাদের কিছু কাস্টম সূচকও রয়েছে যে আমি সম্ভবত এই টিপটি ব্যবহার করব!
কালেঞ্জর্ডান

আমি মনে করি না যে কোনও গ্রাহক সূচক রয়েছে তবে প্রচুর পণ্য এবং এ জাতীয় সংশোধন করার সময় এটি আপনাকে অবশ্যই সহায়তা করবে। যে কোনও উপায়ে এটি চেষ্টা করার মতো!
রিক কুইপার্স

দুঃখিত, হ্যাঁ EAV পণ্য ডেটা এবং যেমন উদাহরণস্বরূপ। ধন্যবাদ।
kalenjordan

হে! এরপরে আপনাকে (আংশিকভাবে) পুনর্নির্মাণ করতে হতে পারে?
অ্যালেক্স

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