মাইএসকিউএল টেবিল_ক্যাশ এবং খোলার_ টেবিল


14

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

যদি ওপেন_ টেবিলগুলি ওপেনড_ টেবিলগুলির সাথে তুলনা করা বৈধ না হয়, তবে এর জন্য পরিমাপ করা ডেটা পাওয়ার অন্য কোনও উপায় আছে কি?

এটি মাইএসকিউএল 5.0 এ রয়েছে তবে সংস্করণের মধ্যে পার্থক্যগুলিও স্বাগত।


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

উত্তর:


7

একটি বড় টেবিল_ক্যাশ থাকার বৃহত্তম কারণটি হ'ল LOCK_open mutex গরম না হয়। 5.5 এর পূর্বে মাইএসকিউএলে আপনার প্রচুর বিতর্ক থাকে যখন আপনি টেবিলগুলি খোলার / বন্ধ করার চেষ্টা করছেন, তাই আপনি এটি যথাসম্ভব করা সীমাবদ্ধ করতে চান, অর্থাত একটি বড় টেবিল ক্যাশে রয়েছে।

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

আপনি মিস রেটটি কীভাবে চিহ্নিত করবেন? দিনের ব্যস্ত সময়কালে আপনি কয়েক সেকেন্ডের ব্যবধানে ওপেনডেটেবলের কয়েকটি স্যাম্পল আনেন এবং প্রতিটি নমুনায় যদি আরও বৃদ্ধি ঘটে তবে আপনি টেবিল_ক্যাচটি গুছিয়ে নিতে পারবেন কিনা তা সম্ভবত দেখার জন্য ভাল ধারণা।

দ্রষ্টব্য: আমি খুব নির্দিষ্টভাবে আপটাইমের সাথে তুলনা করার পরামর্শ দিই না।


5

প্রথমে আসুন সেই স্থিতির পরিবর্তনগুলি বিবেচনা করুন:

খোলা সারণী : খোলা টেবিলের সংখ্যা।

খোলার_ টেবিল: খোলা হয়েছে এমন সারণীর সংখ্যা। যদি খোলা_ টেবিলগুলি বড় হয় তবে আপনার টেবিল_পেন_ ক্যাশের মান সম্ভবত খুব ছোট।

আশ্চর্যের বিষয় হল, আপনার প্রশ্নের উত্তরটি প্রশ্নের মধ্যেই রয়েছে।

দুটি ভেরিয়েবল কেবল তখনই আরও বোধগম্য হবে যদি আপনি এই মিশ্রণের মধ্যে আরও একটি স্থিতির পরিবর্তনশীল নিক্ষেপ করেন: আপটাইম (বা ফ্লটাইম স্ট্যাটাসের পরে তাজা গড়ের জন্য আপটাইম_সিন্স_ফ্লাশ স্থিতি )।

আপনার ওপেন_সামগ্রীগুলির সাথে তুলনা করা উচিত (খোলার_ টেবিল / আপটাইম) । যদি ওপেন_টিবলগুলি উপরে উঠে যায় (ওপেনড_ টেবিল / আপটাইম) , এখন আপনার উদ্বেগের কারণ রয়েছে এবং নিম্নলিখিতগুলির মতো বিষয়গুলির জন্য চোখ খোলা রাখা উচিত:

আপডেট 2011-08-31 12:18 ইডিটি

দয়া করে নোট করুন কেন আমি আপটাইম-এর পরিবর্তে আপটাইম_সিনস_ফ্লুশ_স্ট্যাটাস ব্যবহার করার পরামর্শ দিয়েছি? একটি নির্দিষ্ট সময়কালের জন্য বৃদ্ধির একটি ফিক্স ওপেনড_ টেবিলের ধরণ পেতে ?

উদাহরণস্বরূপ, আপনি যদি FLUSH STATUS;প্রতি সোমবার মধ্যরাতে চালান তবে আপনি একটি ওপেনটেবলফ্যাক্টর তৈরি করতে পারেন:

SELECT *, (Open_tables * Uptime / Opened_Tables) OpenTableFactor FROM
(SELECT variable_value Uptime FROM information_schema.global_status
WHERE variable_name = 'Uptime_since_flush_status') up,
(SELECT variable_value Open_tables FROM information_schema.global_status
WHERE variable_name = 'Open_tables') opn,
(SELECT IF(variable_value=0,1,variable_value) Opened_tables
FROM information_schema.global_status
WHERE variable_name = 'Opened_tables') opnd;

এই ওপেন টেবিল ফ্যাক্টরটি এমন একটি সংখ্যার সমান পরিমাণ যা কোনও নির্দিষ্ট সময়কালে খোলার সারণীর গড় সংখ্যার বিপরীতে যে কোনও মুহুর্তে খোলা টেবিলগুলির সংখ্যা উপস্থাপন করে। একটি সঙ্গে FLUSH HOSTS;প্রতি সপ্তাহে / দিন / হোস্ট, যে গড় সপ্তাহে / দিন / ঘন্টা বিরুদ্ধ।

আমার নিয়োগকর্তার ক্লায়েন্টগুলির একটির থেকে এখানে একটি নমুনা দেওয়া হয়েছে:

mysql> SELECT *, (Open_tables * Uptime / Opened_Tables) OpenTableFactor FROM     (SELECT variable_value Uptime FROM information_sc    hema.global_status     WHERE variable_name = 'Uptime_since_flush_status') up,     (SELECT variable_value Open_tables FROM informat    ion_schema.global_status     WHERE variable_name = 'Open_tables') opn,     (SELECT IF(variable_value=0,1,variable_value) Opened_ta    bles     FROM information_schema.global_status     WHERE variable_name = 'Opened_tables') opnd;
+----------+-------------+---------------+-------------------+
| Uptime   | Open_tables | Opened_tables | OpenTableFactor   |
+----------+-------------+---------------+-------------------+
| 14385123 | 16326       | 30429078      | 7717.996519579068 |
+----------+-------------+---------------+-------------------+
1 row in set (0.00 sec)

এই ক্লায়েন্টটি প্রায় সর্বোচ্চ 7745 ওপেনটেবলফ্যাক্টর বজায় রাখে। যদি ওপেনটেবলফ্যাক্টর হঠাৎ ড্রপ হয় (কিছুটা হলেও), এটি নিম্ন ট্রাফিকের নিদর্শন, উচ্চতর অব্যাহত কনইঙ্কশন এবং আরও অনেক কিছু বোঝাতে পারে। যদি ওপেনটেবলফ্যাক্টরটি কখনও পরিবর্তন না হয় (কিছুটা হলেও), এটি আপনাকে এই সেটিংস পরিবর্তন করার সুযোগ নিয়ে উপস্থিত করতে পারে:

একবার অ্যাডজাস্ট করার পরে, ওপেনটেবলফ্যাক্টর নিয়মিত পরিবর্তন হতে পারে বা অন্য সিলিং বা মালভূমিতে আঘাত করতে পারে। সুতরাং, স্ট্যাটাস ভেরিয়েবলের মধ্যে বিভিন্ন ইউনিট ব্যবহার করা এই ধরণের টিউনিংয়ের জন্য অত্যাবশ্যক হয়ে ওঠে।

আপডেট 2011-08-31 12:42 ইডিটি

আমি ওপেনটেবলফ্যাক্টরের জন্য যে এসকিউএল ক্যোয়ারী চালিয়েছি তা মাইএসকিউএল 5.0 এবং পিছনে কাজ করে না। আপনি যদি মাইএসকিউএল প্রশাসক বা মনিওগ ব্যবহার করছেন তবে আপনি ক্যোয়ারী এবং মনিটরের সূত্রটি ব্যবহার করে একটি গ্রাফ কাস্টমাইজ করতে পারেন। MONYog পরবর্তী historicalতিহাসিক গ্রাফিংয়ের জন্য SQLLite ব্যবহার করে ইতিহাস সংগ্রহ করে। এটি মাইএসকিউএল এর যে কোনও সংস্করণের জন্য করা যেতে পারে।


কিছু ভাল পরামর্শ, তবে আমি মনে করি না যে আপনি বর্তমানের সাথে একটি ক্রমবর্ধমান মানের তুলনা করতে চেয়ে আলাদা আলাদা দুটি ইউনিটের সাথে দুটি জিনিস তুলনা করতে চান। এবং যদি এটি কেবলমাত্র ব্যবস্থা না করে তবে এটি থেকে যায়।
স্যাম ব্রাইটম্যান

3

টেবিল_ক্যাচ ডকুমেন্টেশন পৃষ্ঠায় ব্যবহারকারীর মন্তব্যগুলির মধ্যে একটি থেকে :

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

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

একটি দম্পতি উল্লেখ করার জন্য সাবধান:

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

    SHOW GLOBAL STATUS LIKE '%tmp%';

  • টেবিল_কেচে খুব বেশি বাড়ান না

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

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