কীভাবে সর্বাধিক সাজানো_বাফার_সাইজ নির্ধারণ করবেন?


10

আমি একটি নমুনা কনফিগারেশন ফাইল থেকে পড়েছি যা নিম্নলিখিত বলে:

# Sort buffer is used to perform sorts for some ORDER BY and GROUP BY
# queries. If sorted data does not fit into the sort buffer, a disk
# based merge sort is used instead - See the "Sort_merge_passes"
# status variable. Allocated per thread if sort is needed.

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


আপনি কি মাইএসকিউটিউনার বা টিউনিং-প্রাইমার চালিয়েছেন আপনি এই অ্যাপগুলিতে আপনার মাই সিএনএফ সম্পর্কে আকর্ষণীয় কিছু দেখতে পাচ্ছেন।
ডেভিড মার্টিনেজ

উত্তর:


14

এখানে কেবলমাত্র একটি স্থিতি পরিবর্তনশীল যা সারণ_বাফার_সাইজ সম্পর্কে চিন্তা করে । এই বার্তায় আপনার কাছে যা রয়েছে প্রশ্নটিতে: সাজানো_ ডুবানো_পাসগুলি । মাইএসকিউএল ডকুমেন্টেশন বলেছেন:

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

বাছাই_বাফার_সাইজ সম্পর্কে দয়া করে একটি জিনিস মনে রাখবেন

আপনি যদি শ্লোবাল স্ট্যাটাস আউটপুটে প্রতি সেকেন্ডে অনেক Sort_ विसর_পাসগুলি দেখতে পান, আপনি অর্ডার বা গ্রুপ বাই ক্রিয়াকলাপগুলিকে সন্ধান করতে বাছাই করে বাছাই করুন_উফার_সাইজ মান বাড়িয়ে বিবেচনা করতে পারেন যা কোয়েরি অপ্টিমাইজেশন বা উন্নত সূচী দিয়ে উন্নত করা যায় না

উত্থাপন যখন s এবং s এর sort_buffer_sizeসাথে প্রশ্নের সাহায্য করতে পারে , আপনি ক্যোরি অপটিমাইজার দ্বারা ব্যবহার করা যেতে পারে এমন সূচিগুলি যা আপনি উন্নত করতে পারেন তা উন্নত করতে পারেন।GROUP BYORDER BY

প্রশ্নটি রয়ে গেছে: আপনি কীভাবে বাছাই করুন_সওয়ার_পাসগুলি ???

এই কোডটি ব্যবহার করুন, সর্বশেষ 5 মিনিটে কতগুলি Sort_ विसর_পাস হয়েছে তা পরীক্ষা করতে। এটি প্রতি ঘন্টা বাছাই করা বাছাই করা_পরিবার_প্যাসগুলিও গণনা করে।

SET @SleepTime = 300;
SELECT variable_value INTO @SMP1
FROM information_schema.global_status WHERE variable_name = 'Sort_merge_passes';
SELECT SLEEP(@SleepTime) INTO @x;
SELECT variable_value INTO @SMP2
FROM information_schema.global_status WHERE variable_name = 'Sort_merge_passes';
SET @SMP = @SMP2 - @SMP1;
SET @SMP_RATE = @SMP * 3600 / @SleepTime;
SELECT @SMP,@SMP_RATE;

আপনি যদি সাজান_ডম_পাসগুলি এবং হারটি খুব বেশি খুঁজে পান তবে সৃজন_বফার_সাইজ নির্বিঘ্নে বোধ করবেন । মনে করুন আপনি 4M তে বাড়িয়ে তুলতে চান আপনি এটি চালাতে হবে:

mysql> SET GLOBAL sort_buffer_size = 1024 * 1024 * 4;

তারপরে আপনি এটিকে my.cnf এ যুক্ত করবেন

[mysqld]
sort_buffer_size = 4M

আপনি অন্য সময় পরীক্ষা করার জন্য কোডটি পর্যায়ক্রমে চালাতেন Sort_ विसর_পাস্ক স্পাইকগুলি।


2
এটি আরও ভাল উত্তর
গ্রেগ

7
@ রোলানোমাইএসকিউএলডিবিএ আপনি নীচে "অনেকগুলি" সংজ্ঞায়িত করতে পারেন: "আপনি যদি প্রতি সেকেন্ডে অনেকগুলি সরেট_মার্জ_পাসগুলি দেখতে পান"
তারেক

2

আপনাকে ডিফল্ট থেকে সাজ্ট_বফার_সাইজ পরিবর্তন করার দরকার নেই। আপনি প্রশ্নের ভিত্তিতে এটির ভুল বোঝেন। আপনি এসইকিউএল পরীক্ষা করে শুরু করতে হবে এটি দেখতে যে আপনি এটি টিউন করতে সক্ষম হন এবং সূচক ব্যবহার করে অর্ডার বা গ্রুপ / গ্রুপের শর্তগুলি পূরণ করতে সক্ষম কিনা তা দেখতে। এটি সাধারণত একটি যৌগিক সূচক হবে।

আরও: http://www.xaprb.com/blog/2010/05/09/how-to-tune-mysqls-sort_buffer_size/


আমি এই পোস্টটি খুব কার্যকরভাবে খুঁজে পেয়েছি বলে দুঃখিত। এটি যেমন আপনি বিশেষজ্ঞ নন কেবল তাই কিছু করার জন্য লোকদের বলার মতো। প্রথম ভাষ্যকার দ্বারা চিহ্নিত হিসাবে, .cnfmysql সহ প্রেরিত নমুনা ফাইলগুলি ডিফল্ট সেটিংস ব্যবহার করে না।
প্রশ্ন ওভারফ্লো

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

2

ম্যানুয়ালটিতে গাইড (5.0-5.5) guidance

আপনি যদি শ্লোবাল স্ট্যাটাস আউটপুটে প্রতি সেকেন্ডে অনেক Sort_ विसর_পাসগুলি দেখতে পান তবে অর্ডার বা গ্রুপ বাই ক্রিয়াকলাপগুলি গতিতে বাছাই করতে বাছাই করা বাছাই করা বাছাই করা বাছাইকরণ বা উন্নত সূচীকরণের সাহায্যে উন্নত করা যায় না এমন सॉर्ट_বফার_সাইজ মান বাড়িয়ে বিবেচনা করতে পারেন। পুরো বাফারটি যদি সমস্ত প্রয়োজন না হয় তবেও বরাদ্দ করা হয়, তাই বিশ্বব্যাপী এটির চেয়ে আরও বড় সেট করা সর্বাধিক প্রশ্নগুলিকে ধীরে ধীরে কমিয়ে দেয়। এটি একটি সেশন সেটিং হিসাবে বাড়ানো ভাল, এবং কেবলমাত্র সেই অধিবেশনগুলির জন্য যা বড় আকারের প্রয়োজন। লিনাক্সে, 256KB এবং 2MB এর থ্রেশহোল্ড রয়েছে যেখানে বৃহত্তর মানগুলি মেমরির বরাদ্দকে উল্লেখযোগ্যভাবে কমিয়ে দিতে পারে, সুতরাং আপনার সেই মানগুলির একটির নীচে থাকা বিবেচনা করা উচিত। আপনার কাজের চাপের জন্য সর্বোত্তম মান সন্ধানের জন্য পরীক্ষা করুন।

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

মাইএসকিউএল ৫..6.৪ অনুসারে, অপ্টিমাইজারটি কতটা স্থান প্রয়োজন তা নিয়ে কাজ করার চেষ্টা করে তবে সীমা অবধি আরও বরাদ্দ করতে পারে।


1

অনুকূল নির্ধারণ করার সেরা উপায় sort_buffer_sizeহ'ল এটির মানদণ্ড।

কিভাবে? @ রোল্যান্ডোমাইএসকিউএলডিবিএর মতো বলেছে যে চেক Sort_merge_passesকরা সহায়ক হতে পারে তবে এটি কেবল কার্যকরী প্রভাবকে প্রভাবিত করে না। আপনি বাড়ানোর সময় আপনার যত্নবান হওয়া উচিত sort_buffer_size

নথিটি বলে যে

লিনাক্সে, 256KB এবং 2MB এর থ্রেশহোল্ড রয়েছে যেখানে বৃহত্তর মানগুলি মেমরির বরাদ্দকে উল্লেখযোগ্যভাবে কমিয়ে দিতে পারে, সুতরাং আপনার সেই মানগুলির একটির নীচে থাকা বিবেচনা করা উচিত।

আছে একটি পোস্ট পরীক্ষামূলক যা উপসংহারে সম্পর্কে

sort_merge_passesযে খারাপ না। আপনার sort_buffer_sizeযথেষ্ট বড় সেট করা তাই শূন্যটি sort_merge_passesঅনুকূল নাও হতে পারে।

আমি যখন পরীক্ষা করি তখন আমিও একইরকম ফলাফল পাই get

আদর্শভাবে, আপনার যে পরিস্থিতিটি অপ্টিমাইজ করা উচিত তা এড়ানো ভাল sort_buffer_size। কিভাবে? অপ্টিমাইজেশান ডকুমেন্টের সাহায্যে এই অর্ডারটি আপনাকে কীভাবে হুডের নীচে কাজ করে তা বুঝতে সহায়তা করতে পারে।


-1

"মাইকিকিএল> এসইটি গ্লোবাল সাজান_বাফলার_সাইজ = 1024 * 1024 * 4;" এটি 4 মি বাছাই বাফার আকারে রাখার একটি খারাপ উপায়, এটি বাছুর আকার বাছুর আকার 4 গিগাবাইট ব্যবহার করে

"মাইকিকিএল> এসইটি গ্লোবাল সাজান_বফার_সাইজ = 1024 * 4;"

আমি যদি আপনার হয়ে থাকি তবে আমি সংক্ষিপ্ত বাফার আকার পরিবর্তন করার চেষ্টা করিনা, এটি আপনার সার্ভার ক্র্যাশ করার একটি ভাল উপায় এবং ট্র্যাশ পারফরম্যান্সে প্রেরণ। আরও ভাল কোয়েরি করার চেষ্টা করা আরও ভাল।


1
4K বাছাই বাফারে কীভাবে কোনও বড় বাছাই হতে পারে? আপনি বলেছেন নোট 1024 * 4। এটি 4096, 4K।
রোল্যান্ডোমাইএসকিউএলডিবিএ

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