আপনার কেবল ক্যোয়ারী ক্যাশেটি অক্ষম করা উচিত
[mysqld]
query_cache_size = 0
এবং তারপরে mysql পুনরায় আরম্ভ করুন। আমি কেন এমন পরামর্শ দেব ???
ক্যোয়ারী ক্যাশে সর্বদা ইনোডিবি-র সাহায্যে মাথা ফাটিয়ে দেবে। পরিবর্তনগুলি অন্য লেনদেনের জন্য পুনরাবৃত্তযোগ্য পাঠকে প্রভাবিত না করে যদি InnoDB এর এমভিসিসি ক্যোয়ারী ক্যাশে থেকে ক্যোয়ারীগুলি সরবরাহ করতে দেয় তবে এটি দুর্দান্ত। দুর্ভাগ্যক্রমে, InnoDB কেবল এটি করে না। স্পষ্টতই, আপনার কাছে অনেকগুলি প্রশ্ন রয়েছে যা দ্রুত অকার্যকর হয়ে যায় এবং সম্ভবত পুনরায় ব্যবহার হচ্ছে না।
মাইএসকিউএল ৪.০ এর অধীনে ইনোডিবি-র জন্য, ক্যোয়ারী ক্যাশে লেনদেনের জন্য অক্ষম করা হয়েছিল। মাইএসকিউএল ৪.১++ এর জন্য, প্রতি টেবিলের ভিত্তিতে ক্যোয়ারী ক্যাশে অ্যাক্সেসের অনুমতি দেওয়ার সময় InnoDB ট্র্যাফিক পুলিশ খেলবে।
আপনার প্রশ্নের দৃষ্টিকোণ থেকে, আমি বলব যে ক্যোয়ারী ক্যাশে মুছে ফেলার ন্যায্যতা এত বেশি ওভারহেড নয়, তবে ইনোডিবি কীভাবে এটি পরিচালনা করে।
ইনোডিবি কীভাবে ক্যোয়ারী ক্যাশের সাথে ইন্টারঅ্যাক্ট করে সে সম্পর্কে আরও তথ্যের জন্য দয়া করে "হাই পারফরম্যান্স মাইএসকিউএল (দ্বিতীয় সংস্করণ)" বইয়ের 213-215 পৃষ্ঠাটি পড়ুন ।
যদি আপনার সমস্ত বা বেশিরভাগ ডেটা মাইআইএসএএম হয় তবে আপনি এসকিউএল_এনও_সিএইচই ব্যবহারের আপনার মূল ধারণাটি নিয়ে যেতে পারেন।
আপনার যদি ইনোডিবি এবং মাইআইএসএএম এর মিশ্রণ থাকে তবে আপনার ক্যাশে কতটা বেশি মিস হয় তার উপর ভিত্তি করে আপনাকে আপনার অ্যাপ্লিকেশনটির জন্য সঠিক ভারসাম্য খুঁজে পেতে হবে। প্রকৃতপক্ষে, একই বইয়ের 209-210 পৃষ্ঠাগুলি ক্যাশে মিস করার কারণগুলি নির্দেশ করে:
- কোয়েরিটি ক্যাশেযোগ্য নয়, কারণ এটিতে একটি ননডেস্ট্রিমেন্টিক কনস্ট্রাক্ট রয়েছে (যেমন CURRENT_DATE) বা এর ফলাফল সেটটি সংরক্ষণের জন্য খুব বড়। উভয় ধরণের অপ্রয়োজনীয় ক্যোয়ারী Qcache_not_cached স্থিতি পরিবর্তনশীলকে বৃদ্ধি করে।
- সার্ভার এর আগে কোয়েরিটি আগে কখনও দেখেনি, সুতরাং এর ফলাফলটি ক্যাশে করার সুযোগ কখনওই পেত না।
- ক্যোয়ারির ফলাফল আগে ক্যাশে করা হয়েছিল, তবে সার্ভারটি এটি সরিয়ে দিয়েছে। এটি ধরে রাখতে পর্যাপ্ত মেমরি না থাকার কারণে এটি ঘটতে পারে, কারণ কেউ সার্ভারকে এটি অপসারণের নির্দেশ দিয়েছে বা এটি অবৈধ হয়ে গেছে
এবং অল্প কিছু অপ্রয়োজনীয় প্রশ্নের সাথে উচ্চ ক্যাশে মিস করার মূল কারণগুলি হ'ল:
- ক্যোয়ারী ক্যাশে এখনও উষ্ণ নয়। এটি হ'ল সার্ভারের ফলাফলের সেটগুলি দিয়ে ক্যাশে পূরণ করার সুযোগ নেই।
- সার্ভারটি এমন কোয়েরিগুলি দেখে যা এটি আগে দেখেনি। আপনার কাছে যদি বারবার জিজ্ঞাসাবাদ না হয় তবে ক্যাশে উষ্ণ হওয়ার পরেও এটি ঘটতে পারে।
- প্রচুর ক্যাশে অবৈধতা রয়েছে।
আপডেট 2012-09-06 10:10 ইডিটি
আপনার সর্বশেষ আপডেট হওয়া তথ্য সন্ধান করে query_cache_limit
আপনি 1048576 (1 এম) সেট করেছেন। এটি কোনও ফলাফলকে 1 এম তে সীমাবদ্ধ করে। আপনি যদি আরও বড় কিছু পুনরুদ্ধার করেন তবে এটি কেবল ক্যাশে হবে না। আপনি যখন query_cache_size
104857600 (100M) তে সেট করেছেন, এটি কেবলমাত্র নির্ভুল বিশ্বে 100 টি ক্যাশেড ফলাফলের জন্য মঞ্জুরি দেয়। আপনি যদি কয়েকশো ক্যোরিয়াম সম্পাদন করেন তবে টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো হবে rather সর্বনিম্ন আকারের ফলাফলের সেট হিসাবে আপনার কাছে 4096 (4 কে) রয়েছে। দুর্ভাগ্যক্রমে, mysql এর ক্যোয়ারী ক্যাশে ডিফ্র্যাগমেন্ট করার জন্য কোনও অভ্যন্তরীণ প্রক্রিয়া নেই।
আপনার যদি ক্যোয়ারী ক্যাশেটি অবশ্যই থাকে এবং আপনার কাছে এত বেশি র্যাম থাকে তবে আপনি নিম্নলিখিতটি সম্পাদন করতে পারেন:
SET GLOBAL query_cache_size = 0;
SELECT SLEEP(60);
SET GLOBAL query_cache_size = 1024 * 1024 * 1024;
যাতে ক্যোয়ারী ক্যাশে শুদ্ধ হয়। আপনি সমস্ত ক্যাশেড ফলাফল হারাতে পারেন, সুতরাং অফ-পিক সময়কালে এই লাইনগুলি চালান।
আমি নিম্নলিখিতগুলিও অর্পণ করব:
- ক্যোরি_ক্যাচি_সাইজ = 1 জি
- ক্যোরি_ক্যাচি_লিমিট = 8 এম
যা র্যামের 23 জি ছেড়ে যায়। আমি নিম্নলিখিত উত্থাপন করবে:
- ইনোডাব_বফার_পুল_সাইজ = 12 জি
- key_buffer_size = 4G
7G ছেড়ে যায়। এটি ওএস এবং ডিবি সংযোগের জন্য পর্যাপ্ত হওয়া উচিত।
মনে রাখবেন কী বাফারটি কেবল মাইআইএসএএম সূচী পৃষ্ঠাগুলিকে ক্যাশে করে, যখন ইনোডিবি বাফার পুল ডেটা এবং সূচীগুলিকে ক্যাশে করে।
আরও একটি সুপারিশ: মাইএসকিউএল 5.5 এ আপগ্রেড করুন যাতে আপনি একাধিক সিপিইউয়ের জন্য ইনোডিবি এবং আই / ও পড়ার জন্য একাধিক থ্রেড কনফিগার করতে পারেন।
InnoDB- র জন্য একাধিক সিপিইউ অ্যাক্সেসের সাথে মাইএসকিউএল 5.5 ব্যবহার করার ক্ষেত্রে আমার আগের পোস্টগুলি দেখুন
আপডেট 2012-09-06 14:56 ইডিটি
ক্যোয়ারী ক্যাশে সাফ করার জন্য আমার পদ্ধতিটি বরং চরম is যেমন আপনি আপনার মন্তব্যে নির্দেশ করেছেন, FLUSH QUERY CACHE
(যেমন আপনি প্রস্তাব করেছিলেন) বা আরও RESET QUERY CACHE
ভাল হবে। স্পষ্টতার জন্য, যখন আমি "কোনও অভ্যন্তরীণ প্রক্রিয়া না" বলেছিলাম, আমি হুবহু তা বোঝাতে চাইছিলাম। ডিফ্র্যাগমেন্টেশন প্রয়োজন এবং ম্যানুয়ালি করতে হবে। এটি crontab'd করা প্রয়োজন ।
আপনি যদি মাইস্যামের চেয়ে ইনোডিবিতে প্রায়শই ডিএমএল (ইনসার্টস, আপডেটস, ডিলেটগুলি) করেন, আমি বলব ক্যোরির ক্যাশে সম্পূর্ণ মুছুন, যা আমি শুরুতে বলেছিলাম।