ঘন ঘন ক্যোয়ারী ক্যাশে অবৈধকরণের ওভারহেড কি কোনও মূল্যবান?


22

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

আমি যা নির্ধারণ করার চেষ্টা করছি তা হ'ল এই টেবিলগুলির বিপরীতে চালিত SELECT বিবৃতিগুলির জন্য ক্যোরির ক্যাশেটি ব্যবহার করার অনুমতি দেওয়ার কোনও সুবিধা নেই কি না। যেহেতু এগুলি এত তাড়াতাড়ি অবৈধ হয়ে যায়, তাই আমার কাছে মনে হয় সর্বোত্তম জিনিসটি কেবল এই টেবিলগুলি সহ নির্বাচনী বিবৃতিগুলিতে এসকিউএল_এনও_সিএইচইই ব্যবহার করা হবে।

ঘন ঘন অবৈধকরণের ওভারহেড কি কোনও মূল্যবান?

সম্পাদনা করুন: নীচে ব্যবহারকারী @ রোল্যান্ডো মাইএসকিউএলডিবিএর অনুরোধে মাইআইএসএএম এবং আইএনএনওডিবি-র তথ্য এখানে রয়েছে।

InnoDB

  • ডেটার আকার: 177.414 জিবি
  • সূচকের আকার: 114.792 জিবি
  • সারণীর আকার: 292.205 গিগাবাইট

MyISAM

  • ডেটা আকার: 379.762 জিবি
  • সূচকের আকার: 80.681 জিবি
  • সারণীর আকার: 460.443 গিগাবাইট

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

  • সংস্করণ: 5.0.85
  • ক্যোয়ারী_কাছে_লিট: 1048576
  • ক্যোয়ারী_ক্যাচি_মিনি_রেস_উনিট: 4096
  • ক্যোরি_ক্যাচি_সাইজ: 104857600
  • ক্যোয়ারী_কাছে_প্রকার: চালু
  • ক্যোয়ারী_ক্যাচি_ওয়ালক_অনুপাত: বন্ধ
  • ইনোডাব_বফার_পুল_সাইজ: 8841592832
  • 24 গিগাবাইট র‌্যাম

2
dom.as/tech/query-cache-tuner এটি চমত্কারভাবে
বর্ধিত করে

হেই, খুব অন্তর্দৃষ্টিপূর্ণ।
ক্রেগ সেফটন

উত্তর:


16

আপনার কেবল ক্যোয়ারী ক্যাশেটি অক্ষম করা উচিত

[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_size104857600 (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 করা প্রয়োজন

আপনি যদি মাইস্যামের চেয়ে ইনোডিবিতে প্রায়শই ডিএমএল (ইনসার্টস, আপডেটস, ডিলেটগুলি) করেন, আমি বলব ক্যোরির ক্যাশে সম্পূর্ণ মুছুন, যা আমি শুরুতে বলেছিলাম।


উত্তরের জন্য ধন্যবাদ. আমার কাছে সেই বই রয়েছে এবং এটি ব্যাপকভাবে ব্যবহার করা হয়েছে; ক্যাশে মিস করার কারণগুলির জন্য আপনি কীভাবে রূপরেখা তৈরি করেছেন সে সম্পর্কে আমি ভালভাবে অবগত রয়েছি, তবে আমি যেমন উল্লেখ করেছি যে, আমরা Com_select এবং Qcache_inserts এর মধ্যে দৃ strong় সম্পর্কের কারণে আমরা ক্যাশে অবৈধতাকে একটি মূল সমস্যা হিসাবে চিহ্নিত করেছি। ওহ, এবং প্রশ্নে থাকা ডিবিতে INNODB এবং মাইআইএসএএম এর মিশ্রণ রয়েছে।
ক্রেগ সেফটন

আপনার অনুরোধ করা অতিরিক্ত তথ্যের সাথে আপডেট হয়েছে। ধন্যবাদ।
ক্রেগ সেফটন

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

"মাইএসকিএল-এর ক্যোয়ারী ক্যাশে ডিফ্র্যাগমেন্ট করার জন্য কোনও অভ্যন্তরীণ প্রক্রিয়া নেই" সম্পর্কে আপনার মন্তব্য সম্পর্কে, আপনি কি কমান্ডটিকে FLUSH QUERY CACHEডিফ্রেগমেন্টের জন্য কার্যকর করতে পারবেন না ? দেখুন: dev.mysql.com/doc/refman/5.0/en/flush.html
ক্রেগ Sefton

আমার উত্তর আপডেট করেছে ...
RolandoMySQLDBA

3

বিএডি: ক্যোরি_ক্যাচি_ আকার = 1 জি

কেন? কারণ ফ্লাশটি কতক্ষণ সময় নেবে। এটি হ'ল, যখন কোনও লিখন ঘটে তখন পুরো 1 জিবি স্ক্যান করা হবে যা সংশোধিত টেবিলের কোনও রেফারেন্স খুঁজতে পারে। QC যত বড়, এটি ধীর slow আমি যদি আপনার ডেটা খুব কমই পরিবর্তিত হয় তবে আমি 50M এর বেশি আকারের প্রস্তাব দেব না।

কিউসি মাইআইএসএএম এবং ইনোডিবি উভয়ের জন্যই ওভারহেড। এটি একটি বিশ্বব্যাপী মুটেক্স বের করে এবং খুব শীঘ্রই এটি নিয়ে আসে। এই ম্বেটেক্স একটি কারণ যা মাইএসকিউএল প্রায় 8 টি কোরের বেশি কার্যকর ব্যবহার করতে পারে না।

মেকেক্স লক হওয়ার পরে এসকিউএল_এনও_সিএইচই লক্ষ্য করা যায় না! এই পতাকাটির একমাত্র ব্যবহারটি বেঞ্চমার্কিংয়ের জন্য।

প্রায়শই অন্য কোনও ক্যাশে র‌্যাম দেওয়া ভাল।


2

আমি এটির জন্য একটি নিখুঁত মামলার কথা ভাবতে পারি, এবং আমরা এটির পুরোপুরি পরীক্ষা করে নিয়েছি এবং এটি উত্পাদনে চালাচ্ছি ... আমি এটিকে "ফাস্ট লেন" ক্লাস্টারিং কৌশল বলি :

আপনি যদি ম্যাক্সস্কেলের মতো প্রক্সি দিয়ে পঠন-লিখনের বিভাজন করেন বা আপনার অ্যাপ্লিকেশন সক্ষম হয় তবে আপনি খুব কমই অবৈধ টেবিলের জন্য কিছু পাঠাগুলি কেবল দাসদের কাছে পাঠাতে পারেন যা ক্যোয়ারী ক্যাশে চালু রয়েছে এবং বাকী এটির সাথে অন্যান্য দাসদের কাছে পাঠাতে পারেন slaves বন্ধ করা.

ফলস্বরূপ আমরা আমাদের লোড পরীক্ষার সময় ক্লাস্টারে প্রতি মিনিটে 4 এম কলগুলি পরিচালনা করি (বেঞ্চমার্ক নয় ... আসল চুক্তি)। অ্যাপটি কিছু জিনিসের জন্য মাস্টার_পোস_উইট () এর জন্য অপেক্ষা করে, তাই এটি প্রতিলিপি থ্রেড দ্বারা থ্রোটলড হয়, এবং যদিও আমরা এটি খুব উচ্চ থ্রুটপটে Qcache অবৈধতার জন্য অপেক্ষা করার একটি স্থিতি সহ দেখেছি, এই থ্রুপুট স্তরগুলি ক্লাস্টারের চেয়েও বেশি Qcache ছাড়া সক্ষম।

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

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