মাইএসকিউএল সর্বাধিক মেমরি ব্যবহার


111

আমি জানতে চাই যে লিনাক্স সার্ভারে মাইএসকিউএল কত পরিমাণে মেমরি ব্যবহার করে তার উপরের সীমা নির্ধারণ করা কীভাবে সম্ভব।

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


4
মাইএসকিউএল "প্রতিটি নতুন প্রশ্নের জন্য মেমরি নেয় না এবং শেষ পর্যন্ত চলে যায়"। স্মৃতির ব্যবহার এর চেয়ে অনেক জটিল।
রিক জেমস 15

উত্তর:


183

মাইএসকিউএল এর সর্বাধিক মেমরির ব্যবহার হার্ডওয়্যার, আপনার সেটিংস এবং নিজেই ডাটাবেসের উপর নির্ভর করে।

হার্ডওয়্যারের

হার্ডওয়্যার স্পষ্ট অংশ। আরও মারিয়ার র‌্যাম, দ্রুত ডিস্ক এফটিডব্লিউ । যদিও সেই মাসিক বা সাপ্তাহিক সংবাদ পত্রগুলিকে বিশ্বাস করবেন না। মাইএসকিউএল রৈখিক স্কেল করে না - এমনকি ওরাকল হার্ডওয়ারেও নয়। এটি তার চেয়ে কিছুটা কৌতুকপূর্ণ।

নীচের লাইনটি হল: আপনার মাইএসকিউএল সেটআপের জন্য যা সুপারিশ করা হয়েছে তার জন্য থাম্বের কোনও সাধারণ নিয়ম নেই । এটি সবই বর্তমান ব্যবহার বা অনুমানের উপর নির্ভর করে।

সেটিংস এবং ডাটাবেস

মাইএসকিউএল এর আচরণটি অনুকূল করতে অগণিত পরিবর্তনশীল এবং স্যুইচ সরবরাহ করে offers আপনি যদি সমস্যাগুলির মধ্যে চলে যান তবে আপনার সত্যিই বসে বসে (ফিং) ম্যানুয়ালটি পড়তে হবে।

ডাটাবেস হিসাবে - কয়েকটি গুরুত্বপূর্ণ বাধা:

  • টেবিল ইঞ্জিন ( InnoDB, MyISAM, ...)
  • আয়তন
  • সূচকের
  • ব্যবহার

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

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

আপনি যদি আমার প্রবাহকে ধরেন - সত্যিই অনেক কিছুই পড়তে এবং শিখতে হবে।

ইঞ্জিন

টেবিল ইঞ্জিনগুলি একটি দুর্দান্ত গুরুত্বপূর্ণ সিদ্ধান্ত, অনেক লোক তাড়াতাড়ি সেগুলি সম্পর্কে ভুলে যায় এবং তারপরে হঠাৎ 30 জিবি আকারের MyISAMটেবিলের সাথে লড়াই করে যা তাদের সম্পূর্ণ অ্যাপ্লিকেশনটিকে লক করে রাখে।

আমি মাইআইএসএএম সফলভাবে চুষতে চাইছি তা বলতে চাই না , তবে InnoDBপ্রায় বা প্রায় তত দ্রুত প্রতিক্রিয়া জানাতে টুইচ করা যায় MyISAMএবং সারি-লকিংয়ের মতো জিনিস সরবরাহ করা হয় UPDATEযেখানে MyISAMএটি লেখা হয় যখন পুরো টেবিলটি লক করে দেয়।

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

পেরকোনা-সার্ভার (এবং-ক্লায়েন্ট) সেটআপের জন্য আমার উক্তিটি দেখুন (উবুন্টুতে): http://gist.github.com/637669

আয়তন

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

নীচের লাইনটি: আকার থেকে বিচার করা, হার্ডওয়্যার সম্পর্কে সিদ্ধান্ত নেওয়া উচিত। আপনি 1 গিগাবাইট র‌্যামে 80 গিগাবাইট ডাটাবেস দ্রুত চালাতে পারবেন না।

সূচক

এটি নয়: আরও বেশি, মরিয়ার। শুধুমাত্র প্রয়োজনীয় সূচকগুলি সেট করতে হবে এবং ব্যবহারের সাথে চেক করতে হবে EXPLAIN। এটি যোগ করুন যে মাইএসকিউএলগুলি EXPLAINসত্যই সীমিত তবে এটি একটি শুরু।

প্রস্তাবিত কনফিগারেশন

এই my-large.cnfএবং my-medium.cnfফাইলগুলি সম্পর্কে - আমি জানি না সেগুলি কাদের জন্য লেখা হয়েছিল। আপনার নিজের রোল।

টিউনিং প্রাইমার

একটি দুর্দান্ত শুরু টিউনিং প্রাইমার । (: আপনি লিনাক্স প্রয়োজন হবে ইঙ্গিতটি) যা আউটপুট লাগে এটা একটা ব্যাশ স্ক্রিপ্টের SHOW VARIABLESএবং SHOW STATUSএবং আশা দরকারী সুপারিশ সেটিকে গোপন। যদি আপনার সার্ভারটি কিছুটা সময় চালিয়ে যায় তবে তাদের উপর ভিত্তি করে ডেটা থাকার কারণে প্রস্তাবটি আরও ভাল।

টিউনিং প্রাইমার যদিও ম্যাজিক সস নয়। এটি পরিবর্তন করার পরামর্শ দেয় এমন সমস্ত ভেরিয়েবলগুলি আপনার এখনও পড়া উচিত।

পড়া

আমি সত্যিই mysqlperformanceblog সুপারিশ করতে চাই । এটি সমস্ত ধরণের মাইএসকিউএল সম্পর্কিত টিপসের জন্য একটি দুর্দান্ত উত্স। এবং এটি কেবল মাইএসকিউএল নয়, তারা সঠিক হার্ডওয়্যার সম্পর্কেও অনেক কিছু জানে বা এডাব্লুএস ইত্যাদির জন্য সেটআপগুলির প্রস্তাব দেয় These এই ছেলেরা বহু বছরের অভিজ্ঞতা আছে years

আরেকটি দুর্দান্ত সংস্থান অবশ্যই গ্রহ-মাইএসকিএল


আমি জানি না tuning primer, এর সাথে কীভাবে তুলনা করা যায় mysqltuner?
গ্রেগ 01 ই

38

আমরা এই সেটিংস ব্যবহার করি:

etc/my.cnf
innodb_buffer_pool_size = 384M
key_buffer = 256M
query_cache_size = 1M
query_cache_limit = 128M
thread_cache_size = 8
max_connections = 400
innodb_lock_wait_timeout = 100

নিম্নলিখিত স্পেসিফিকেশন সহ একটি সার্ভারের জন্য:

Dell Server
CPU cores: Two
Processor(s): 1x Dual Xeon
Clock Speed: >= 2.33GHz
RAM: 2 GBytes
Disks: 1×250 GB SATA

16
আমার মনে হয় আপনার (এবং যে লিঙ্কটি আপনি লিঙ্ক করেছেন) এর কাছে ক্যোয়ারী_ক্যাচি_সাইজ এবং ক্যোয়ারী_ক্যাচি_ চারপাশে ভুল উপায়ে ফেলে দিন। আপনি মাইএসকিউএলকে বলছেন: একটি 1 এমবি ক্যাশে বরাদ্দ করুন তবে 128MB এর চেয়ে বড় যে কোনও প্রশ্ন রাখবেন না। dev.mysql.com/doc/refman/5.0/en/query-cache-configration.html
agtb

আমি সর্বোচ্চ_ সংযোগগুলি কম করব। আমি কোন ইঞ্জিনটি ব্যবহার করব তা স্থির করব এবং উভয়ের জন্য প্রচুর স্থান বরাদ্দ করব না।
রিক জেমস 15

19

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

আপনি যদি সত্যিই কোনও হার্ড সীমা চাপিয়ে দিতে চান তবে আপনি এটি করতে পারেন তবে কোনও বিল্ট-ইন সেটিং নেই বলে আপনাকে ওএস পর্যায়ে এটি করতে হবে। লিনাক্সে, আপনি উলিমিট ব্যবহার করতে পারেন , তবে এটি সম্ভবত আরোপ করতে মাইএসকিউএল শুরু করার পদ্ধতিটি আপনাকে সংশোধন করতে হবে।


আপনার সার্ভারটি টিউন করার সর্বোত্তম সমাধান হ'ল সাধারণ মাইএসকিউএল মেমরির সেটিংসের সংমিশ্রণের ফলে আপনার মাইএসকিউএল ইনস্টলেশন দ্বারা সাধারণত মেমরির ব্যবহার কম হয়। এটি অবশ্যই আপনার ডাটাবেসের কর্মক্ষমতাতে নেতিবাচক প্রভাব ফেলবে, তবে আপনি যে কয়েকটি সেটিংসে টুইট করতে পারেন my.iniসেগুলি হ'ল :

key_buffer_size
query_cache_size
query_cache_limit
table_cache
max_connections
tmp_table_size
innodb_buffer_pool_size

আমি সেখানেই শুরু করব এবং আপনি চাইলে ফলাফলগুলি পেতে পারেন কিনা তা দেখতে। আছে অনেক প্রবন্ধ মাইএসকিউএল মেমরির সেটিংস সামঞ্জস্য সম্পর্কে সেখানে আউট।


সম্পাদনা:

মনে রাখবেন, কিছু পরিবর্তনশীল নামের মাইএসকিউএল এর নতুন 5.1.x রিলিজ বদলে গেছে

উদাহরণ স্বরূপ:

table_cache

এখন:

table_open_cache

2
ওহে! আপনার উত্তরের জন্য ধন্যবাদ. আমি লক্ষ্য করেছি যে লোকেরা যে সমীকরণটি উদ্ধৃত করেছে তা নিম্নরূপ: কী_বফার_সাইজ + (পঠন-বাফার_সাইজ + সাজানো_বাফলার_সাইজ) * সর্বোচ্চ_সংযোগ = মোট স্মৃতি। আমি নিম্নলিখিতগুলি সেট করে রেখেছি: কী_বফার_সাইজ = 128 এম, রিড_বফার_সাইজ = 1 এম, বাছাই_বাফার_সাইজ = 2 এম, সর্বাধিক_সংযোগ = 120, এবং সার্ভারে মোট মেমরি 512 এম। তবে, অনেক প্রশ্নের পরেও, ফ্রি মেমরিটি 12M এর চেয়ে কম হয়ে গেছে এবং সম্ভবত আরও ব্যবহারের সাথে অবিরত থাকবে। এটি এমন কারণ হওয়ার কোনও কারণ আছে এবং এটি প্রতিরোধ করা যেতে পারে? ধন্যবাদ!

অথবা সম্ভবত আমার সার্ভারে মোট স্মৃতি (512 এম) না হয়ে ফ্রি মেমরি (যেমন সমস্ত ওএস সম্পর্কিত এবং অন্যান্য প্রোগ্রাম লোড করার পরে মেমরি উপলব্ধ) বিবেচনা করা দরকার?

1
যদি আপনি র‌্যামে সংরক্ষণ করা যেতে পারে এমন টেম্প টেবিলগুলির আকার বাড়ানোর অভিপ্রায়ে tmp_table_size পরিবর্তন করতে চলেছেন তবে ম্যাকএসএইচপি_ টেবিল_সাইজটি আরও বাড়িয়ে রাখুন - মাইএসকিউএল দু'জনের ন্যূনতম ব্যবহার করে ...
ডেভ রিক্স

1
@ টিমোথিমিলসুদ - এর মতো কোনও সূত্র আসলে কাজ করে না। যখন কোনও সূত্র দাবি করে যে খুব বেশি র‍্যাম ব্যবহার করা হচ্ছে তখন বেশিরভাগ সার্ভারগুলি বেশ সূক্ষ্মভাবে চলে।
রিক জেমস 15

19

mysqld.exe র‌্যামে 480 এমবি ব্যবহার করছিল। আমি দেখতে পেলাম যে আমি এই পরামিতিটি my.ini এ যুক্ত করেছি

table_definition_cache = 400

যা মেমরির ব্যবহার 400,000+ কেবি থেকে কমিয়ে 105,000 কেবি করে নিয়েছে


এটি কোন বিভাগের অধীনে যায়? আমি এটিকে আমার সাথে যুক্ত করেছিলাম এবং পরিষেবাটি শুরু করতে অস্বীকৃতি জানায়।
সিনট্যাক্স ত্রুটি

কিছু নয়, আমি এটিকে [wampmysqld] এর নীচে স্থানান্তরিত করেছি এবং এটি দুর্দান্তভাবে কাজ করেছে এবং আমি যে স্মৃতিশক্তি উল্লেখযোগ্যভাবে ব্যবহার করছি তা হ্রাস পেয়েছে। আমি মনে করি এটির প্রক্রিয়াতে আমার লোকালহোস্ট পৃষ্ঠাগুলিও বাড়িয়ে দিয়েছে, তারা এখন দ্রুত বলে মনে হচ্ছে।
সিন্ট্যাক্স ত্রুটি

যদিও ডিফল্ট এবং সর্বনিম্ন 400 হয় তবে আপনার ক্ষেত্রে এটি 400 এরও বেশি কী এনেছে?
ওয়াদিহ এম।

5

ইন /etc/my.cnf:

[mysqld]
...

performance_schema = 0

table_cache = 0
table_definition_cache = 0
max-connect-errors = 10000

query_cache_size = 0
query_cache_limit = 0

...

256MB মেমোরি সহ সার্ভারে ভাল কাজ।


table_definition_cache= 0 কেন ? কিছু ব্যাখ্যা সুন্দর হবে। এবং আপনি মূলত ক্যোয়ারীগুলি ক্যাশে করছেন না ... আপনি যদি একই প্রভাব পান তবে query_cache_type = 0:)
খোম নাজিদ

0

আপনি যদি নিজের ডকার মাইএসকিএল ধারকটি অপ্টিমাইজ করতে খুঁজছেন তবে নীচের কমান্ডটি সহায়তা করতে পারে। আমি মাইএসকিএল ডকার কনটেইনারটি ডিফল্ট 480 এমবি থেকে মাত্র 100 এমবিএসে চালাতে সক্ষম হয়েছি

ডকার রান-ডি -পি 3306: 3306 -ই মাইএসকিউএল_ডাটাবেস = পরীক্ষা -আর মাইএসকিউএল_আরওT_পাসওয়ার্ড = মোড়ক-এমওয়াইএসকিউএল_ইএসআর = পরীক্ষা -ই এমওয়াইএসকিউএলএপিএসওয়ার্ড = পরীক্ষা -ভি / মাইএসকিএল: / ওয়ার / লিব / মাইএসকিএল - মাইসিএলসিডিএলকিএসএল --performance_schema = 0 - ডিফল্ট-প্রমাণীকরণ-প্লাগইন = mysql_native_password

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