এই নিবন্ধটি মূলত Delicious Semalt ব্লগ এ প্রকাশিত হয়েছিল, এবং অনুমতির সাথে এখানে পুনঃপ্রকাশ করা হয়েছে।
আপনি জানেন যে একটি দ্রুত সাইট == সুখী ব্যবহারকারীরা, Google থেকে উন্নত র্যাংকিং এবং বাড়তি রূপান্তরগুলি। হয়তো আপনি এমনকি আপনার Semalt সাইটটি যতটা দ্রুত তা মনে করতে পারেন: আপনি সাইট পারফরম্যান্সে দেখেছেন, সার্ভার স্থাপন করার সর্বোত্তম পদ্ধতি থেকে, ধীরগতির সমস্যা সমাধান করার জন্য, এবং আপনার ছবিগুলিকে CDN এ লোড করার জন্য, কিন্তু সবকিছুই ?
গতিশীল, স্যামল্ট মত ডেটাবেস-চালিত ওয়েবসাইটগুলির সাথে, আপনার কাছে এখনও আপনার হাতে একটি সমস্যা থাকতে পারে: ডাটাবেস প্রশ্নগুলি আপনার সাইটের গতি কমাচ্ছে।
এই পোস্টে, সেমল্ট আপনাকে কিভাবে দ্রুতগতিতে এবং দ্রুতগতিতে অন্যান্য গতিপথের গতি বাড়ানোর জন্য বিভিন্ন পদ্ধতির সাথে সমস্যাগুলি বোঝাতে বাধা দেয় এমন প্রশ্নগুলি কীভাবে সনাক্ত করতে পারে সে বিষয়ে আপনাকে নিয়ে যায়। মিষ্টি একটি প্রকৃত ক্যোয়ারী ব্যবহার করে আমরা সম্প্রতি ভেবেছিলাম যে গ্রাহকদের পছন্দের সুস্বাদু পোর্টালের উপর ধীর গতির ছিল। কম।
সনাক্তকরণ
ধীরে ধীরে এসকিউএল প্রশ্নে ফিক্স করার প্রথম ধাপ তাদের খুঁজে বের করতে হয়। অ্যাশলি আগে ব্লগে ডিবাগিং প্লাগইন ক্যোরিন মনিটরের প্রশংসা করেছেন এবং এটি প্লাগইনটির ডেটাবেজ ক্যোয়ারী বৈশিষ্ট্য যা সত্যিই ধীর এসকিউএল কোয়েরি সনাক্তকরণের জন্য এটি একটি অমূল্য সরঞ্জাম। পৃষ্ঠার অনুরোধের সময় সঞ্চালিত সমস্ত ডাটাবেস প্রশ্নের উপর প্লাগইন রিপোর্ট। এটি আপনাকে কোড বা কম্পোনেন্ট (প্লাগইন, থিম বা সেমন্ট কোর) দ্বারা তাদের ফিল্টার করার অনুমতি দেয়, এবং ডুপ্লিকেট এবং ধীরগতির প্রশ্নগুলি তুলে ধরে:
আপনি যদি কোন প্রোডাকশন সাইটে কোনও ডিবাগিং প্লাগইন ইনস্টল করতে না চান (হয়ত আপনি কিছু পারফরম্যান্স ওভারহেড যোগ করার ব্যাপারে উদ্বিগ্ন থাকেন) আপনি মাইএসকিউএল স্লো স্যামল্যাড লগ চালু করার জন্য বেছে নিতে পারেন, যা সব ক্যোয়ারীগুলি লগ চালানো সময়ের পরিমাণ এইগুলি কনফিগার এবং সেট আপ করার জন্য তুলনামূলকভাবে সহজ যেখানে কোয়েরি লগ ইন করতে। এটি একটি সার্ভার-লেভেল টুইক হিসাবে, পারফরম্যান্স হিট সাইটের উপর ডিবাগিং প্লাগইনটি কম হবে, কিন্তু এটি ব্যবহার না করার সময় বন্ধ করা উচিত।
বোঝার
একবার আপনি একটি ব্যয়বহুল প্রশ্ন খুঁজে পেয়েছেন যা আপনি উন্নত করতে চান, পরবর্তী ধাপটি বুঝতে চেষ্টা করুন কি কি ধীর গতির হয়। আমাদের সাইটে উন্নয়নের সময় মিলেছে, আমরা একটি ক্যোয়ারী খুঁজে পেয়েছি যা প্রায় 8 সেকেন্ড সময় নিচ্ছে!
নির্বাচন করুনঠ। KEY_ID,ঠ। ORDER_ID,ঠ। activation_email,ঠ। লাইসেন্স কি,ঠ। software_product_id,ঠ। সফ্টওয়্যার সংস্করণ,ঠ। activations_limit,ঠ। সৃষ্টিঠ। renewal_type,ঠ। renewal_id,ঠ। exempt_domain,গুলি। next_payment_date,গুলি। অবস্থা,pm2। post_id AS 'product_id',অপরাহ্ন। meta_value AS 'user_id'থেকেoiz6q8a_woocommerce_software_licences lভেতরের যোগ দিতেoiz6q8a_woocommerce_software_subscriptions গুলি গুলি গুলি key_id = l KEY_IDভেতরের যোগ দিতেoiz6q8a_posts পি উপর পি। আইডি = এল ORDER_IDভেতরের যোগ দিতেoiz6q8a_postmeta PM তে পোস্ট করা PM তে পোস্ট করা। পোস্ট_িড = পি আইডিএবং বিকালে meta_key = '_customer_user'ভেতরের যোগ দিতেoiz6q8a_postmeta pm2 pm 22 এ। meta_key = '_software_product_id'এবং pm2। meta_value = l software_product_idকোথায়পি। post_type = 'shop_order'এবং বিকালে meta_value = 279আদেশ দ্বারা এস next_payment_date
আমাদের প্লাগইন স্টোর চালানোর জন্য আমরা WooCommerce এবং WooCommerce Software Subscriptions প্লাগইনটির একটি কাস্টমাইজড সংস্করণ ব্যবহার করি। এই ক্যোয়ারীর উদ্দেশ্য হল গ্রাহকের জন্য সমস্ত সাবস্ক্রিপশনগুলি পেতে যেখানে আমরা তাদের গ্রাহক সংখ্যা জানি. সফ্টওয়্যার সাবস্ক্রিপশন প্লাগইন দ্বারা নির্মিত কাস্টম টেবিলে যোগদান একটি দম্পতি এছাড়াও আছে। আসুন আরও কোয়েরি বুঝতে ডুব
মাইএসকিউএল আপনার বন্ধু
মাইএসকিউএল-এর একটি সুস্পষ্ট বক্তব্য রয়েছে ডেস্রাইব
যা একটি টেবিলের কাঠামো যেমন তার কলাম, ডাটা টাইপ, ডিফল্ট তথ্য সম্পর্কে ব্যবহার করতে পারে। সুতরাং আপনি যদি চালানো ডেড্রাইভ wp_postmeta;
আপনি নিম্নলিখিত ফলাফল দেখতে পাবেন:
ক্ষেত্র | টাইপ | নাল | কী | ডিফল্ট | অতিরিক্ত |
meta_id | bigint স্বাক্ষরবিহীন | না | পিআরআই | নুল | অটো_ইনক্রিমেন্ট |
পোস্ট_িড | bigint স্বাক্ষরবিহীন | না | মুল্য | 0 | |
মেটা_কি | varchar (255) | হ্যাঁ | মুল্য | নুল | |
meta_value | লংটেক্ট | হ্যাঁ | | নুল | |
এটি শান্ত, কিন্তু আপনি ইতিমধ্যে এটি সম্পর্কে জানতে পারেন। তবে আপনি কি জানেন যে ডিসিক্রিব
স্টেটমেন্টের উপসর্গটি আসলে নির্বাচন করুন
, INSERT
, আপডেট
, রিপ্লেস
) এবং ডিলিট
বিবৃতি? এটি তার সমার্থক এক্সপ্ল্যানে
দ্বারা আরো সাধারণভাবে পরিচিত হয় এবং কিভাবে বিবৃতিটি কার্যকর করা হবে সে সম্পর্কে আমাদের বিস্তারিত তথ্য প্রদান করবে।
এখানে আমাদের ধীরগতির অনুসন্ধানের ফলাফল:
আইডি | select_type | টেবিল | টাইপ | সম্ভব_কি | কী | key_len | রেফ | সারি | অতিরিক্ত |
1 | সহজ | 22 | রেফ | মেটা_কি | মেটা_কি | 576 | কনস্ট | 28 | যেখানে ব্যবহার করা; অস্থায়ী ব্যবহার; ফাইলসোর্ট ব্যবহার করে |
1 | সহজ | বিকাল | রেফ | পোস্ট_িড, মেটা_কি | মেটা_কি | 576 | কনস্ট | 37456 | কোথায় ব্যবহার |
1 | সহজ | পি | eq_ref | প্রাথমিক, টাইপ_স্ট্যাট_সেট | প্রাথমিক | 8 | সুস্বাদু বন অপরাহ্ন। পোস্ট_িড | 1 | কোথায় ব্যবহার |
1 | সহজ | এল | রেফ | প্রাথমিক, অর্ডার_আইড | order_id | 8 | সুস্বাদু বন অপরাহ্ন। পোস্ট_িড | 1 | সূচী অবস্থা ব্যবহার; যেখানে ব্যবহার |
1 | সহজ | s | eq_ref | প্রাথমিক | প্রাথমিক | 8 | সুস্বাদু বন ঠ। key_id | 1 | নুল |
প্রথম নজরে, এটি ব্যাখ্যা করা খুব সহজ নয়। সৌভাগ্যক্রমে, সেমাল্টের উপর লোকেরা এই বিবৃতিটি বোঝার জন্য একটি ব্যাপক গাইডলাইন রেখেছেন।
সবচেয়ে গুরুত্বপূর্ণ কলাম টাইপ
, যা টেবিলের যোগদান কিভাবে বর্ণনা করে। যদি আপনি সব
দেখেন তাহলে এর মানে হল যে মাইএসকিউএল সম্পূর্ণ ডিস্কটি ডিস্ক থেকে পড়ছে, I / O রেটগুলি বৃদ্ধি করছে এবং CPU এ লোড করছে। এটি একটি "সম্পূর্ণ টেবিল স্ক্যান" (পরে যে আরও) হিসাবে জানেন।
সারি
কলাম এছাড়াও মাইএসকিউএল কি কি করা হচ্ছে একটি ভাল ইঙ্গিত হয়, এটি একটি ফলাফল খুঁজে পেতে লাগছিল যে দেখায় কত সারি।
ব্যাখ্যা
এছাড়াও আমাদের আরো তথ্য দেয় আমরা অপ্টিমাইজ করতে ব্যবহার করতে পারেন। উদাহরণস্বরূপ, pm2 টেবিল (wp_postmeta), এটি আমাদেরকে বলছে ফাইলসট
ব্যবহার করে, কারণ আমরা বিবৃতিতে ORDER BY
ক্লোজ ব্যবহার করে সাজানো ফলাফলগুলি জিজ্ঞাসা করছি। যদি আমরা ক্যোয়ারী গ্রুপিং করি তবে আমরা মৃত্যুদন্ডের জন্য ওভারহেড যোগ করব. মাইএসকিউএল 5. 6 এবং তার উপরে চলমান উপাত্তের জন্য এক্সপ্ল্যানে
ফলাফল JSON হিসাবে outputted হতে পারে, এবং মাইএসকিউএল ওয়ার্কব্যাঞ্চ এটিকে JSON একটি বিবৃতির দৃশ্যমান এক্সিকিউশন প্ল্যানে পরিণত করে:
এটি স্বয়ংক্রিয়ভাবে আপনার মনোযোগ আকর্ষণ করে ক্যোয়ারীর অংশগুলি রঙ করে রঙ করে। আমরা সরাসরি দেখতে পারি wp_woocommerce_software_licences
(এলিয়াস এল) টেবিলে একটি গুরুতর সমস্যা রয়েছে।
সমাধান
wp_woocommerce_software_licences
টেবিল
মধ্যে যোগদান হিসাবে একটি অ-ইনডেক্স কলাম order_id
ব্যবহার করে যেহেতু ক্যোয়ারী যে অংশ একটি সম্পূর্ণ টেবিল স্ক্যান, যা আপনি এড়াতে চেষ্টা করা উচিত সম্পাদন করা হয় wp_posts
টেবিল থেকে এটি ধীর প্রশ্নগুলির জন্য একটি সাধারণ সমস্যা এবং সহজেই সমাধান করা যেতে পারে এমন এক। সূচক
order_id
টেবিলের তথ্য সনাক্তকরণের একটি চমত্কার গুরুত্বপূর্ণ অংশ, এবং আমরা এই মত কোয়েরি হয় তাহলে আমরা সত্যিই কলাম একটি সূচক থাকা উচিত, অন্যথায় মাইএসকিউএল আক্ষরিক টেবিলের প্রতিটি সারি স্ক্যান করবে এটি প্রয়োজনীয় সারি খুঁজে বের করে আসুন একটি সূচক যোগ করুন এবং এটি কি কি দেখতে:
তৈরি করুন ইন্ডেক্স অর্ডার_আইড wp_woocommerce_software_licences (order_id)
বাহ, আমরা 5 সেকেন্ডের বেশি শূন্যে ভাগ করে দিয়েছি যে ইন্ডেক্স যোগ করে, ভাল কাজ!
আপনার প্রশ্নের জানুন
প্রশ্ন জিজ্ঞাসা করা - যোগদান দ্বারা যোগদান, subquery দ্বারা subquery। এটা কি এটা করতে হবে না না? অপ্টিমাইজেশন করা যাবে?
এই ক্ষেত্রে আমরা order_id
, পোস্ট টাইপ shop_order
পোস্টে বিবৃতি সীমাবদ্ধ করার মাধ্যমে পোস্ট টেবিলে লাইসেন্স টেবিল যোগদান। এটি শুধুমাত্র সঠিক অর্ডার রেকর্ড ব্যবহার করে তা নিশ্চিত করতে ডেটা অখণ্ডতা প্রয়োগ করা হচ্ছে। যাইহোক, এটি প্রকৃতপক্ষে কোয়েরি একটি অপ্রয়োজনীয় অংশ। আমরা জানি যে এটি একটি নিরাপদ বিট যে টেবিলের একটি সফ্টওয়্যার লাইসেন্সের সারি একটি order_id
পোস্ট টেবিলে WooCommerce ক্রম সম্পর্কিত, এটি পিএইচপি প্লাগইন কোড দ্বারা প্রয়োগ করা হয়। আসুন যোগদানটি মুছে ফেলুন এবং দেখুন যে সেগুলি আরও উন্নত করে:
মিমিলেট একটি বিশাল সঞ্চয় নয়, তবে প্রশ্ন এখন 3 সেকেন্ডের নীচে।
ক্যাশ সব জিনিষ!
যদি আপনার সার্ভারে ডিফল্টভাবে মাইএসকিউএল ক্যোয়ারী ক্যাশে না থাকে তবে এটি চালু করা যায়। এর মানে মাইএসকিউএল ফলাফলের সাথে সম্পাদিত সমস্ত বিবৃতিগুলির একটি রেকর্ড রাখবে, এবং পরবর্তীকালে একটি অভিন্ন বিবৃতিটি সঞ্চালিত হলে ক্যাশে ফলাফলগুলি ফেরত দেওয়া হবে। ক্যাশে ফাঁকা থাকে না, যেহেতু টেবিলগুলি পরিবর্তিত হয়ে গেলে MySQL ক্যাশে ফ্লাশ করে।
ক্যোয়ার মনিটর আমাদের কোয়্যারি একটি একক পৃষ্ঠা লোডে 4 বার চালাচ্ছে, এবং যদিও মাইএসকিউএল ক্যোয়ারী ক্যাশিং থাকতে ভাল, এক অনুরোধে ডকুমেন্টটি এক অনুরোধে সম্পূর্ণ ফোঁটা এড়ানো উচিত। আপনার পিএইচপি কোড স্ট্যাটিক ক্যাশে এই সমস্যা সমাধানের একটি সহজ এবং খুব কার্যকর উপায় - agencia modelos masculinos chile. । । ';$ ফলাফল = $ wpdb-> get_results ($ sql, ARRAY_A);স্ট্যাটিক :: $ সাবস্ক্রিপশন [$ user_id] = $ ফলাফল;ফেরত $ ফলাফল;}}
ক্যাশের অনুরোধের একটি জীবদ্দশায় আছে, আরো নির্দিষ্টভাবে যে তাত্ক্ষণিক বস্তু। আপনি সমস্ত অনুরোধ জুড়ে অনুসন্ধান ফলাফল ক্রমাগত খুঁজছেন, তাহলে আপনি একটি ক্রমাগত বস্তু ক্যাশে বাস্তবায়ন করতে হবে। মিমোল্ট, আপনার কোড ক্যাশে সেট করার জন্য দায়ী হতে হবে, এবং ক্যাশ এন্ট্রির অকার্যকর হবে যখন অন্তর্নিহিত তথ্য পরিবর্তন হবে
বক্স আউট চিন্তা
মিমোল্ট হল অন্যান্য পন্থা যা আমরা ক্যোয়ারী এক্সিকিউশনকে দ্রুতগতির চেষ্টা করতে এবং গতি সন্নিবেশ করতে পারি যা কোয়েরি টাচিং বা ইনডেক্স যোগ করার চেয়ে একটু বেশি কাজ করে। আমাদের ক্যোয়ারীর ধীরতম অংশগুলি হল গ্রাহক আইডি থেকে পণ্য আইডি পর্যন্ত টেবিলগুলিতে যোগদান করার জন্য কাজ করা, এবং আমাদের প্রত্যেক গ্রাহকের জন্য এটি করতে হবে। আমরা যদি শুধু একবারে যোগদান করে থাকি তাহলে কি আমরা গ্রাহকের তথ্যগুলি পেতে পারি?
আপনি সমস্ত লাইসেন্সের জন্য ইউজার আইডি এবং পণ্য আইডি এবং লাইসেন্সের ডেটা সঞ্চয় করে এমন একটি টেবিল তৈরি করে ডেড্রাইমাইজড করতে পারেন এবং নির্দিষ্ট গ্রাহকের জন্য তার বিরুদ্ধে প্রশ্ন করতে পারেন। মাইএসকিউএল ব্যবহার করে টেবিলের পুনর্নির্মাণের প্রয়োজন হবে লাইসেন্স টেবিলে (বা অন্য যেগুলি তথ্য পরিবর্তন করতে পারে তার উপর নির্ভর করে) INSERT / UPDATE / DELETE
কিন্তু এটি এই ডেটা অনুসন্ধানের কার্যকারিতা উল্লেখযোগ্যভাবে উন্নত করবে।
অনুরূপভাবে যদি মাইএসকিউএল-এ আপনার ক্যোয়ারীটি ধীরে ধীরে যোগ করে থাকে, তাহলে কোয়েরিটি দুই বা ততোধিক বিবৃতিতে বিভক্ত করা এবং তাদের পিএইচপি-এ আলাদাভাবে চালানো এবং তারপর কোডগুলি ফলাফল সংকলন এবং ফিল্টার করা দ্রুততর হতে পারে। Laravel এলকোডেন্ট মধ্যে আগ্রহী লোডিং সম্পর্ক দ্বারা অনুরূপ কিছু করে।
ওয়ার্ডপ্রেস wp_posts
টেবিলে ধীরগতির প্রশ্নগুলির প্রবণতা হতে পারে, যদি আপনার প্রচুর পরিমাণে ডেটা থাকে এবং অনেকগুলি কাস্টম পোস্ট প্রকারগুলি। যদি আপনি আপনার পোস্ট প্রকারের জন্য ধীর অনুসন্ধানের সন্ধান করছেন, তাহলে কাস্টম পোস্টের প্রকারের স্টোরেজ মডেল এবং একটি কাস্টম টেবিল থেকে দূরে সরানোর কথা বিবেচনা করুন।
ফলাফল
এই পদ্ধতিগুলি অপ্টিমাইজেশান জিজ্ঞাসা করার জন্য আমরা 8 সেকেন্ড থেকে 8 সেকেন্ডের মধ্যে মাত্র 2 সেকেন্ডের নিচে নামিয়ে আনতে সক্ষম হয়েছি এবং 4 থেকে 1 পর্যন্ত এটির সংখ্যাটি কমাতে সক্ষম হয়েছি। একটি নোট হিসাবে, সেই অনুসন্ধানের সময়গুলি রেকর্ড করা হয়েছিল আমাদের উন্নয়ন পরিবেশে চলছে এবং উৎপাদন দ্রুত হবে।
আমি আশা করি এটি ধীর অনুসন্ধানগুলি অনুসরণ করে তাদের সংশোধন করার জন্য একটি সহায়ক গাইড হয়েছে। মিষ্টি অপ্টিমাইজেশান একটি ভয়ানক কাজ মনে হতে পারে, কিন্তু যত তাড়াতাড়ি আপনি এটি চেষ্টা এবং কিছু দ্রুত জয় আছে আপনি বাগ পেতে শুরু করব এবং আরও আরও কিছু উন্নতি করতে চান
লেখককে সাক্ষাত করুন
ইয়ান পলসন
ইয়ান পলসন একটি ওয়ার্ডপ্রেস এবং পিএইচপি ডেভেলপার, ইংল্যান্ড থেকে সুস্বাদু মস্তিষ্কের সাথে কাজ করে। যখন তিনি প্লাগইন তৈরি করেন না, তখন তিনি ওয়ার্ডপ্রেস এবং চন্দ্রবিন্দু সম্পর্কে পিএইচএস স্টর্ম প্রচারক হিসেবে ব্লগ করেন। তিনি এসকল প্রশ্ন এবং দ্রুতগতির ব্রেনস ব্লগের অন্যান্য উন্নত বিষয়গুলি সম্পর্কে দ্রুতগতির বিষয়ে লিখেছেন। আপনি এখানে সাইন আপ করে তার পরবর্তী এক পেতে: https: // সুস্বাদু বর্গ। কম