মাইএসকিউএল ক্যাশে অনুসন্ধান করে?


19

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

তা কেন? ডাটাবেস কি স্বয়ংক্রিয়ভাবে ক্যাশে করে? ডেটাবেস ক্যাশে সংরক্ষণ করে এবং তারপরে এটি স্বয়ংক্রিয়ভাবে মোছার কিছু সময় আছে?

আমি ধরে নিই যে পিএইচপি দ্বারা ফলাফলগুলি ক্যাশে করা যায় না, কারণ এটি দুটি ভিন্ন থ্রেডে ঘটে। আমি ভাবিনি যে পিএইচপি ফলাফলগুলি ক্যাশে করবে, কারণ এটি ডাটাবেস পরিবর্তন হয়েছে কিনা তা জানতে পারে না।

ডাটাবেসে নতুন সারি সন্নিবেশ করানোর জন্য প্রতি মিনিটে আমার কাছে একটি স্ক্রিপ্ট চলছে। এটি কারণ হতে পারে যে এটি কিছু সময় পরে আবার 1500 এমএস লাগে; ক্যাশে মুছে ফেলা হত, কারণ প্রাসঙ্গিক টেবিল আর এক নয় same


আপনার কোড আমাকে দেখান আমার আপনার প্রশ্নের প্রয়োজন নেই, আপনি কীভাবে পরীক্ষা করছেন এটির এক উপায়।

3
হ্যাঁ, মাইএসকিউএল কোয়েরি করে aches এটা যেমন চালাক।

@ ক্যাসেক্স কি কোড? এটি কেবলমাত্র বেসিক পিডিও, তবে আমি মনে করি না যে পিএইচপি এটি ক্যাশে করতে পারে কারণ আমি পিএইচপি স্ক্রিপ্ট দু'বার চালিত করেছি, আমি এক স্ক্রিপ্টে দু'বার ক্যোয়ারি চালাই না। এছাড়াও আপনি ব্যাখ্যা করতে পারেন কেন আপনি পিডিএ সম্পাদনা করেছেন যখন এটি প্রশ্নের সাথে সত্যিই প্রাসঙ্গিক নয়?

3
সমস্ত ডিবিএমএসের একটি পৃষ্ঠার স্তরের ক্যাচ রয়েছে। অনেকে ক্যোয়ারি এক্সিকিউশন পরিকল্পনা বা এমনকি কোয়েরি ফলাফলগুলি ( মাইএসকিউএল সহ ) ক্যাশে করে এর বাইরে চলে যান । আমি সন্দেহ করি যে এই শেষ জিনিসটি আপনার পর্যবেক্ষণের আচরণের মূল অপরাধী।
ব্র্যাঙ্কো দিমিত্রিজেভিক

আপনি প্রতি মিনিটে সন্নিবেশ করছেন? সাজান যে প্রথম আউট!
গ্র্যান্ট থমাস

উত্তর:


15

এটি সম্ভবত মাইএসকিউএল ক্যোয়ারী ক্যাশের একটি নিদর্শন ।

আপনি এসকিউএল কোয়েরি কার্যকর করেন, মাইএসকিউএল এর ফলাফল এবং দ্রুত হলে পরবর্তী নির্বাহকে ক্যাশে করে। যখন আপনি আপনার ক্যোয়ারী দ্বারা রেফারেন্সযুক্ত টেবিলগুলিতে ডেটা toোকানোর জন্য স্ক্রিপ্টটি চালান, ফলাফল ক্যাশেটি অবৈধ হয়ে যায় এবং পরবর্তী সময়ে "সত্যিকারের জন্য" ক্যোয়ারীটি কার্যকর করা উচিত।

উপরে লিঙ্কযুক্ত মাইএসকিউএল ডকুমেন্টেশন থেকে:

প্রায় সম্পূর্ণ SELECT স্টেটমেন্টগুলির একটি সেট সেট সমন্বিত একটি ক্যোয়ারী মিশ্রণের ফলে মিশ্রণের চেয়ে ক্যাশে সক্ষম হওয়া থেকে অনেক বেশি উপকার পাওয়া যায় যা ঘন ঘন INSERT বিবৃতি ক্যাশে ফলাফলকে নিয়মিত অবৈধ করার কারণ করে ation


5

হ্যাঁ, মাইএসকিউএল (অন্যান্য জনপ্রিয় ডেটাবেস পণ্যগুলির সাথে সাধারণ) এটি করা ক্যোয়ারিকে ক্যাশে করে।

ক্যাচিংটি বেশ চালাক - এটি প্রায়শই ক্যোয়ারির জন্য ক্যাশে ব্যবহার করতে পারে এমনকি যদি ক্যোয়ারীর সঠিক প্যারামিটারগুলি একই না থাকে। এটি পারফরম্যান্সে একটি বড় পার্থক্য আনতে পারে।

ক্যাচিং সম্পূর্ণরূপে ডিবি সার্ভারের সফ্টওয়্যারটিতে নিয়ন্ত্রণ করা হয়; ক্যাশে কী রয়েছে তার কোনও দৃশ্যমানতা আপনার নেই, বা প্রদত্ত আইটেমটি কতক্ষণ ক্যাশে থাকে; অন্যান্য প্রশ্নগুলি কী ডাকা হচ্ছে ইত্যাদি উপর নির্ভর করে এটি যে কোনও মুহুর্তে ওভাররাইট করা যেতে পারে, ইত্যাদি performance এটি পারফরম্যান্স সহায়তা করার জন্য রয়েছে, তবে পারফরম্যান্সের জন্য এটির উপর নির্ভর করা উচিত নয়।

আপনি এখানে মাইএসকিউএল ম্যানুয়ালটিতে এ সম্পর্কে আরও পড়তে পারেন ।

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


2
"মাইএসকিউএল 5.1.17 অনুসারে, বিভাগ 8.6.3.1," ক্যোয়ারী ক্যাশে কীভাবে পরিচালিত হয় "তে বর্ণিত অবস্থার অধীনে প্রস্তুত বিবৃতিগুলির জন্য ক্যোয়ারী ক্যাশে ব্যবহার করা হয়। 5.1.17 এর আগে, কোয়েরি ক্যাশে প্রস্তুত বিবৃতিগুলির জন্য ব্যবহৃত হয় না।" dev.mysql.com/doc/refman/5.1/en/query-cache.html

1
" অন্যান্য জনপ্রিয় ডাটাবেস পণ্যগুলির সাথে সাধারণ ": এটি কিছুটা বিভ্রান্তিকর। মাইএসকিউএল যেভাবে সক্রিয়ভাবে কোনও ডিবিএমএস সক্রিয়ভাবে ক্যোয়ারির ফলাফলকে ক্যাশে করে। ডিবিএমএস সাধারণত কেবল টেবিল (বা সূচী) ডেটা ক্যাশে করে না, ফলাফলগুলি দিয়ে থাকে । তাদের বেশিরভাগই ক্যোয়ারি ছাড়ের পরিকল্পনার ক্যাশে করে (এবং "উত্স" ক্যোয়ারী)
a_horse_with_no_name

3
"এটি প্রায়শই ক্যোয়ারির জন্য ক্যাশে ব্যবহার করতে পারে এমনকি যদি ক্যোয়ারীর সঠিক প্যারামিটারগুলি একই না হয়" সম্পূর্ণরূপে ভুল হয়। ক্যাশে থেকে পরিবেশন করার জন্য কোয়েরিটি অবশ্যই পূর্বে সম্পাদিত এবং এখনও ক্যাশে থাকা ক্যোয়ারির সাথে বাইট-বাই-বাইটের সমান হতে হবে। এমনকি এর মধ্যে পার্থক্য SELECT *এবং এর select *অর্থ অন্যথায়-অভিন্ন প্রশ্নের সাথে ক্যাশে দেওয়া হবে না। dev.mysql.com/doc/refman/5.1/en/query-cache-operation.html । ধারাবাহিকতার জন্য 5.1 লিঙ্ক পোস্ট করেছে, তবে সমস্ত সংস্করণে প্রযোজ্য।
মাইকেল - sqlbot
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.