মাইএসকিউএল ডিস্কে এতগুলি অস্থায়ী টেবিল তৈরি করছে কেন?


13

কোনও কনফিগারেশন ভুল কি mysql..mysql টিউনার শো দ্বারা অনেক বেশি টেম্প টেবিল তৈরি করতে পারে

Current max_heap_table_size = 200 M
Current tmp_table_size = 200 M
Of 17158 temp tables, 30% were created on disk

table_open_cache = 125 tables
table_definition_cache = 256 tables
You have a total of 97 tables
You have 125 open tables.
Current table_cache hit rate is 3%

এর আগে টেম্প টেবিলটি ছিল "23725 টেম্প টেবিলগুলির মধ্যে 38% ডিস্কে তৈরি করা হয়েছিল" তবে আমি ম্যাক্সহিপ এবং tmp_table 16 মিটার থেকে 200 মি তে পরিবর্তন করেছি এবং এটি 30% এ নামিয়েছে ..

কনফিগারেশন:

engine myisam 
group_concat_max_len = 32768
key_buffer_size = 3.7 GB,
thread_stack = 256k,
table_cache = 125
query_cache_limit = 1M
query_cache_size = 16M
join_buffer_size = 2.00 M
max_connections = 800

ডিফল্ট কনফিগারেশন সহ অন্য একটি সিস্টেম একই ডেটাবেস সহ "23725 টেম্প টেবিলগুলির মধ্যে, 1% ডিস্কে তৈরি করা হয়েছিল" দেখাচ্ছে।

আমি এই সমস্যাটি সহ মেশিনে ডিফল্ট হয়ে যাওয়ার চেষ্টা করেছি এবং এটি এখনও দেখায় "580 টি টেম্প টেবিলের মধ্যে 16% ডিস্কে তৈরি হয়েছিল"।

আমি 48 গিগাবাইট র‌্যাম সহ উবুন্টু 11.4 64 বিট ব্যবহার করছি। কেউ কি সমাধানের পরামর্শ দিতে পারেন?

টেবিলে "মাইসাম" থেকে "মেমরি" তে ডিবি ইঞ্জিন পরিবর্তন করে "গ্রুপ বাই" ব্যবহার করে এটি ঠিক করা হবে? যেমনটি এখানে ব্যাখ্যা করা হয়েছে: http://www.mysqlperformanceblog.com/2007/08/16/how-much-overhead-is-caused-by-on-disk-temporary-tables/

উত্তর:


16

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

অন্তর্নিহিত অস্থায়ী টেবিল তৈরির জন্য মাইএসকিউএল অভ্যন্তরীণভাবে মেমোরি স্টোরেজ ইঞ্জিন ব্যবহার করে। ডিস্কে অস্থায়ী টেবিলগুলিতে মাইআইএসএএম স্টোরেজ ইঞ্জিন ব্যবহার করা হয়।

অস্থায়ী টেবিলগুলি ডিস্কে তৈরি করা হয় যখন:

  • পাঠ্য বা ব্লব ক্ষেত্র উপস্থিত রয়েছে (কারণ মেমোরি এই ধরণের সমর্থন করে না)
  • ফলস্বরূপ অন্তর্নিহিত অস্থায়ী টেবিলের আকারটি কম tmp_table_sizeবা অতিক্রম করেmax_heap_table_size
  • যদি একটি কলাম ডাব্লু / 512 বাইটেরও বেশি ব্যবহার করে হয় হয় গ্রুপ বা ইউনিয়ন বা অর্ডার দ্বারা গ্রুপের সাথে

আরও তথ্যের জন্য অভ্যন্তরীণ অস্থায়ী টেবিলগুলিতে মাইএসকিউএল ডকুমেন্টেশন পড়ুন ।

এই ব্যাপারে তুমি কি করতে পার? ধারণা করা যায় যে এটি আসলে একটি পারফরম্যান্স সমস্যার প্রতিনিধিত্ব করে (কেবল আপনাকে বুদ্ধিমানভাবে বিরক্ত করার চেয়ে):

  • পাঠ / বিএলওবি ক্ষেত্রগুলি এড়িয়ে চলুন এবং তার পরিবর্তে যথাসম্ভব যথাযথ আকারের ভ্রচার বা CHAR ক্ষেত্রগুলি ব্যবহার করুন।
  • যদি পাঠ / বিএলএব অপ্রয়োজনীয় হয়, তাদের বিদেশী কী সম্পর্কের সাথে আলাদা টেবিলগুলি পৃথক করতে আলাদা করুন এবং যখন আপনার প্রয়োজন হবে তখনই যোগ দিন।
  • আপনি উপরে উল্লিখিত পাঠ্য / বিএলএবিবি ক্ষেত্রগুলির মতো বৃহত্তর কলামগুলি, 512 বাইটেরও বেশি ব্যবহার করুন।
  • আপনার ক্যোয়ারীগুলি কেবলমাত্র আপনার প্রয়োজনীয় ফলাফলের ফলাফলটি ফেরত দিচ্ছে তা নিশ্চিত করুন (যথাযথভাবে নির্বাচন করুন যেখানে ক্লজ, নির্বাচন এড়ান *)
  • সাবকিউরিগুলি এড়িয়ে চলুন এবং তাদের সাথে যোগ দিয়ে তাদের প্রতিস্থাপন করুন, বিশেষত যদি তারা কোনও বড় ফলাফলের সেটটি ফেরত দেয়
  • শেষ অবলম্বন - উভয় উত্থাপন tmp_table_sizeএবং max_heap_table_size। আপনি যদি না জিজ্ঞাসা করেন যে আপনার প্রশ্নগুলি অনুকূলিত করা যায় না তবে এটি করবেন না।

আপনি যদি নিজের মাইএসকিউএল কনফিগারেশন সম্পর্কে উদ্বিগ্ন হন এবং উপলভ্য সেটিংসে আপনি নিজেই স্বাচ্ছন্দ্য বোধ করেন না তবে আপনি পারকোনা কনফিগারেশন উইজার্ডটিকে একটি সূচনা পয়েন্ট হিসাবে দেখতে চাইতে পারেন ।

টেবিলে "মাইসাম" থেকে "মেমরি" তে ডিবি ইঞ্জিন পরিবর্তন করে "গ্রুপ বাই" ব্যবহার করে এটি ঠিক করা হবে? এখানে ব্যাখ্যা হিসাবে

না, এটি তা করবে না এবং এটি এটিকে এমন করবে যে আপনার টেবিলগুলি কখনই ডিস্কে স্থির থাকে না। এটি করবেন না।


+1, তবে যোগ করেছেন যে এটির চেয়ে কম tmp_table_sizeবাmax_heap_table_size
ডেরেক ডোনিয়ে

মাইকিউএলটিউনারের সেরা প্রস্তাবটি হচ্ছিল স্লো ক্যোয়ারী লগ সক্ষম করা। এটি ধীর অনুসন্ধানগুলি যদি কোনও হয় তা সনাক্ত করতে আপনাকে সহায়তা করবে।
ফ্যাট_মিকে

2

"অস্থায়ী ব্যবহার" এবং "ফাইলসোর্ট ব্যবহার করা" পৃথিবীর শেষ নয়!

নির্বাচন করুন ... একটি, খ দ্বারা অর্ডার গ, ডি দ্বারা - 1 বা 2 "টেম্প টেবিল" প্রয়োজন।

এমন সহজ সময় আছে যখন আপনার প্রশ্নগুলি টেম্প টেবিল ব্যবহার করবে। টেম্প টেবিলগুলি একটি ছোট ফ্যাক্টর দ্বারা একটি ক্যোয়ারী ধীর করতে পারে। তবে যদি ক্যোয়ারীটি এখনও "যথেষ্ট দ্রুত" হয় তবে এটি নিয়ে চিন্তা করবেন না।

যদি ক্যোয়ারীটি খুব ধীর হয় (tmp টেবিল সহ বা তার বাইরে), আসুন এটি আলোচনা করুন। দয়া করে শো টেবিল তৈরি করুন, টেবিল পরিস্থিতি প্রদর্শন করুন এবং ব্যাখ্যা দিন।


1
আপনার যদি একটি সূচক চালু (a, b, c, d)থাকে তবে কোনও টেম্প টেবিল থাকবে না।
যোভান
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.