মাইএসকিউএল কেন বলে যে আমি স্মৃতি থেকে বেঁচে আছি?


9

আমি INSERT...SELECTজেডিবিসির সাথে মাইএসকিউএলে মোটামুটি বড় কার্যকর করার চেষ্টা করছিলাম এবং আমি নিম্নলিখিত ব্যতিক্রম পেয়েছি:

Exception in thread "main" java.sql.SQLException: Out of memory (Needed 1073741824 bytes)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1073)

যেহেতু আমি আসলে কোনও রেজাল্টসেট বস্তুটি ফিরিয়ে দিচ্ছি না, তাই আমি ভেবেছিলাম জাভা হ্যাপের জায়গাটি কোনও সমস্যা হওয়া উচিত নয়। যাইহোক, আমি যাইহোক এটি চেষ্টা করার চেষ্টা করেছিলাম এবং এটি কোনও কার্যকর হয়নি good আমি তখন মাইএসকিউএল ওয়ার্কবেঞ্চে বিবৃতিটি কার্যকর করার চেষ্টা করেছি এবং মূলত আমি একই জিনিস পেয়েছি:

Error Code 5: Out of memory (Needed 1073741816 bytes)

এই ক্রিয়াকলাপগুলি সম্পন্ন করার জন্য আমার প্রচুর পরিমাণে র‌্যাম থাকা উচিত (আমি যে নির্বাচন করে তা পুরো টেবিলের সাথে ফিট করে নিই) তবে আমি অনুমান করছি যে আমার সমস্ত স্মৃতির সার্থকতা অবলম্বন করার জন্য আমাকে টুইঙ্ক করতে হবে বিভিন্ন সেটিংস রয়েছে। আমি একটি উইন্ডোজ সার্ভার ২০০৮ এএমআই এর সাথে একটি অ্যামাজন ইসি 2 হাই মেমোরি ডাবল অতিরিক্ত বড় ইনস্ট্যান্স চালাচ্ছি । আমি আরও ভাল সেটিংস ব্যবহার করার জন্য my.ini ফাইলটি দিয়ে ফিড করার চেষ্টা করেছি, তবে সবার জন্য আমি জানি আমি সম্ভবত জিনিসগুলিকে আরও খারাপ করে দিয়েছি। এখানে সেই ফাইলটির একটি ডাম্প রয়েছে:

[client]
port=3306
[mysql]
default-character-set=latin1
[mysqld]
port=3306
basedir="C:/Program Files/MySQL/MySQL Server 5.5/"
datadir="C:/ProgramData/MySQL/MySQL Server 5.5/Data/"
character-set-server=latin1
default-storage-engine=INNODB
sql-mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
max_connections=100
query_cache_size=1024M
table_cache=256
tmp_table_size=25G
thread_cache_size=8
myisam_max_sort_file_size=100G
myisam_repair_threads = 2
myisam_sort_buffer_size=10G
key_buffer_size=5000M
bulk_insert_buffer_size = 4000M
read_buffer_size=8000M
read_rnd_buffer_size=8000M
sort_buffer_size=1G
innodb_additional_mem_pool_size=26M
innodb_flush_log_at_trx_commit=2
innodb_log_buffer_size=13M
innodb_buffer_pool_size=23G
innodb_log_file_size=622M
innodb_thread_concurrency=18
innodb_file_per_table=TRUE
join_buffer_size=4G
max_heap_table_size = 10G

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

যদি এই সেটিংগুলি পরিবর্তন করার বিষয়টি না হয় তবে সমস্যা কী? আপনি কীভাবে সবকিছুকে আরও ভালভাবে কনফিগার করতে পারেন তার জন্য যে কোনও সহায়তা দেওয়ার জন্য আপনাকে ধন্যবাদ জানাতে ধন্যবাদ।


1g ক্যোয়ারী ক্যাশে ব্যবহার করে এমন কারও কাছে তারা কী করছে তার কোনও ক্লু নেই।

@ উইনমুট আপনি খুব সম্ভবত সঠিক হতে পারেন, তবে আপনার মন্তব্যটি আরও ব্যাখ্যা ব্যতীত কাউকে সাহায্য করে না। আপনার অনুভূতির কারণ হিসাবে দয়া করে আমাদের সহায়তা করতে পারেন?
মাইকেল ম্যাকগোয়ান

শুরু করার জন্য একটি সহজ সরঞ্জাম হ'ল সরঞ্জাম.পারকোনা.com
উইজার্ড

উত্তর:


9

এটি একটি উইন্ডোজ ইনস্টলেশন দেওয়া হয়েছে, @ ডিস্টেস্ট এখনও প্রাথমিক যথাযথ দিকনির্দেশ সরবরাহ করেছে।

নিম্নলিখিত সূত্র প্রয়োগ করুন:

বেশিরভাগ লোক এটি ব্যবহার করে:

Maximum MySQL Memory Usage = innodb_buffer_pool_size + key_buffer_size + (read_buffer_size + sort_buffer_size) X max_connections

আমি এটি পছন্দ করি:

Maximum MySQL Memory Usage = innodb_buffer_pool_size + key_buffer_size + ((read_buffer_size + read_rnd_buffer_size + sort_buffer_size + join_buffer_size) X max_connections)

সূত্রগুলি ইনস্টল করা র্যামের 80% বা তার চেয়ে কম পরিমাণ না পাওয়া পর্যন্ত এই পরিবর্তনগুলি আপনার সামঞ্জস্য করতে হবে।

sort_buffer_size
read_buffer_size
read_rnd_buffer_size
join_buffer_size
max_connections

4

আমি আপনার বাফার আকারগুলি হ্রাস করার চেষ্টা করব। আপনার যত বড় সেগুলি এগুলি তৈরি করা সমস্যার কারণ হতে চলেছে। এই মানগুলি চালাতে আপনার কত স্মৃতি উপলব্ধ রয়েছে:

query_cache_size=1024M
myisam_max_sort_file_size=100G
myisam_sort_buffer_size=10G
key_buffer_size=5000M
bulk_insert_buffer_size = 4000M
read_buffer_size=8000M
read_rnd_buffer_size=8000M
sort_buffer_size=1G
innodb_buffer_pool_size=23G

কিছু বাফার আকার মাপে প্রতিটি থ্রেডে বরাদ্দ করা হয়, উদাহরণস্বরূপ মাইসাম_সোর্ট_বফার_ সাইজের 10G প্রতিটি থ্রেডের জন্য 10 জি বরাদ্দ করে।

আমি প্রথমে সেই মানগুলিকে নাটকীয়ভাবে হ্রাস করব এবং তারপরে আপনার এত বেশি র‌্যাম বরাদ্দ করা উচিত (যদি কোনও হয়) তবে কোন মানগুলি সত্যই তদন্ত করতে হবে।


4

মাইএসকিউএল মনে করে যে এটি কতটুকু বরাদ্দ করতে পারে তা নির্ধারণ করার দ্রুত উপায়:

wget mysqltuner.pl

perl mysqltuner.pl

আপনি যখন এই স্ক্রিপ্টটি চালান, এটি আপনাকে ইনস্টল করা র‌্যাম মাইএসকিউএল কত শতাংশ মনে করে যে এটি নিরাপদে বরাদ্দ করতে পারে। যদি দেওয়া উত্তরটি 100% এর বেশি হয় তবে আপনাকে অবশ্যই আপনার বাফার আকারগুলি কমিয়ে আনতে হবে। ফোকাস করার প্রধান একটি হ'ল:

বাছাই_বাফার_
সাইজ
রিড_বফার_
সাইজ
রিড_আরন্ড_ফুফার_ সাইজ জয়েন_বাফার_ সাইজ ম্যাক্স- কানেকশন
কী_বফার_সাইজ (সত্যিকারের কার্যকর 4 জি নয়)

@ ডিস্টেস্ট ইতিমধ্যে তার উত্তরে আপনার জন্য দিকনির্দেশটি সেট করেছে, সুতরাং তার আনসারটির জন্য +1 করুন। পার্ল স্ক্রিপ্ট আপনাকে জানায় যে আপনি সেট না করে বা আপনি যদি কোনও মান পরিবর্তন করেন তবে কী ঘটে। এখানে একটি উদাহরণ:

আমার এক ক্লায়েন্টের
পাঠ্য_বাফার_সাইজ = 128 কে
পঠন_আরন্দ_বাফার_সাইজ = 256 কে
বাছাই_বাফার_সাইজ = 2 এম
জয়েন_বফার_সাইজ = 128 কে
সর্বোচ্চ_সংযোগ = 1050

এখানে mysqltuner.pl থেকে আউটপুট দেওয়া হয়েছে:

মাইএসকিউএলটিউনার ১.২.০ - অতিরিক্ত বিকল্প এবং আউটপুট ফিল্টারিংয়ের জন্য মেজর হেডেন
বাগ রিপোর্ট, বৈশিষ্ট্য অনুরোধ এবং ডাউনলোডগুলি http://mysqltuner.com/
'--help' দিয়ে চালান
দয়া করে আপনার মাইএসকিউএল প্রশাসনিক লগইন
প্রবেশ করুন : lwdba দয়া করে আপনার মাইএসকিউএল প্রশাসনিক প্রবেশ করুন পাসওয়ার্ড:

-------- সাধারণ পরিসংখ্যান ---------------------------------------- ----------
[-] মাইএসকিউএলটিউনার স্ক্রিপ্টের জন্য এড়িয়ে যাওয়া সংস্করণ চেক
[ওকে] বর্তমানে সমর্থিত মাইএসকিউএল সংস্করণ 5.0.51a-সম্প্রদায়-লগ চলছে
[!!] -৪ -বিট ওএসে স্যুইচ করুন - মাইএসকিউএল বর্তমানে ব্যবহার করতে পারবেন না আপনার সমস্ত র‌্যাম

-------- স্টোরেজ ইঞ্জিনের পরিসংখ্যান --------------------------------------- ----
[-] স্থিতি: + সংরক্ষণাগার -বিডিবি + সংঘবদ্ধ + ইনোডিবি -আইএসএএম -ND বিবিসিটার
[-] মাইআইএসএএম টেবিলগুলিতে ডেটা: 319 এম (টেবিল: 108)
[-] ইনোডিবি টেবিলগুলিতে ডেটা: 2 এম (টেবিল: 5)
[!!] মোট খণ্ডিত টেবিল: 22

-------- কর্মক্ষমতা বৈশিষ্ট্যের মান ---------------------------------------- ---------
[-] আপ: 52 ডি 23 এ 15 মি 57 এস (72 এম কিউ [15.875 কিউপিএস], 241 কে কান, টিএক্স: 2 বি, আরএক্স: 1 বি)
[-] পঠন / লিখেছেন: 59% / ৪১%
[-] মোট বাফার: ৩৪.০ এম গ্লোবাল + ২.7 এম প্রতি থ্রেড (1050 সর্বোচ্চ থ্রেড)
[!!] বরাদ্দ> 32 বিট সিস্টেমে 2 জিবি র‌্যাম সিস্টেম অস্থিতিশীলতার কারণ হতে পারে
[!!] সর্বাধিক সম্ভাব্য মেমরির ব্যবহার: 2.8G (ইনস্টল করা র‌্যামের
%২% ) [ওকে] ধীরে ধীরে অনুসন্ধান: 0% (54 / 72M)
[ওকে] উপলব্ধ সংযোগগুলির সর্বাধিক ব্যবহার: 6% (65/1050)
[ওকে] কী বাফার আকার / মোট মাইআইএসএএম সূচক: 8.0 এম / .1২.১ এম
[ওকে] মূল বাফার হিট রেট: ১০০.০% (৪ বি ক্যাশেড / ১ এম রিডস )
[!!] ক্যোয়ারী ক্যাশে অক্ষম করা হয়েছে
[ঠিক আছে] অস্থায়ী সারণীর প্রয়োজন অনুসারে বাছাই করুন: 0% (0 টেম্পের প্রকার / 948 কে বাছাই)
[ঠিক আছে] ডিস্কে অস্থায়ী সারণী তৈরি করা হয়েছে: 3% (ডিস্কে 11K / 380K মোট)
[!!] থ্রেড ক্যাশে অক্ষম করা হয়েছে
[!!] সারণী ক্যাশে হিট রেট: 0% (64 64 টি খোলা / 32২ কে খোলা)
[ওকে] ফাইলটি খুলুন সীমাবদ্ধ ব্যবহার: 2% (125/5 কে)
[ঠিক আছে] সারণী লকগুলি তাত্ক্ষণিকভাবে অর্জিত: 99% (30
এম তাত্ক্ষণিক / 30 এম লক্স) [ওকে] ইনোডিবি ডাটা আকার / বাফার পুল: 2.7M / 8.0M

-------- প্রস্তাবনাগুলি ----------------------------------------- ------------
সাধারণ সুপারিশ:
চালান নিখুত টেবিল Defragment টেবিল ভাল পারফরম্যান্সের জন্য
জিজ্ঞাস্য ট্রাবলশুট খারাপ ধীর ক্যোয়ারী লগ সক্ষম
শুরুর মান হিসাবে 4 সেট thread_cache_size
ধীরে ধীরে এড়ানোর ফাইল বর্ণনাকারী সীমা বৃদ্ধি table_cache
ভেরিয়েবল সামঞ্জস্য করতে:
ক্যোরি_ক্যাচি_সাইজ (> = 8 এম)
থ্রেড_ক্যাচি_ সাইজ (4 এ শুরু করুন)
টেবিল_ক্যাশ (> 64)

কর্মক্ষমতা মেট্রিকের অধীনে লক্ষ্য করুন

[-] মোট বাফার: 34.0 এম গ্লোবাল + 2.7 এম প্রতি থ্রেড (1050 সর্বোচ্চ থ্রেড)

মাইএসকিউএল /etc/my.cnf সেটিংসের উপর ভিত্তি করে ইনস্টল করা র‌্যামের 72% পর্যন্ত বরাদ্দ করতে পারে।

34 এম ইনোডাব_বফার_পুল_সাইজ এবং কী_বফার_সাইজ মিলিত উপর ভিত্তি করে

প্রতি থ্রেডে ২.7 এমটি রিড_বাফার_সাইজ + রিড_রেন্ড_ফুফার_সাইজ + সাজানো_বাফলার_সাইজ + জয়েন্ট_বফার_সাইজের উপর ভিত্তি করে ছিল।

2.7M এর গুণকগুলি সর্বোচ্চ_ সংযোগের উপর ভিত্তি করে।

অতএব, পারফরম্যান্স মেট্রিক্স প্রতিবেদনটি ইনস্টল করা র‌্যামের 100% (অগ্রাধিকার 80% এর নীচে) থাকা অবধি আপনার এই পরামিতিগুলি টুইট করতে হবে।


আমি নিশ্চিত না যে আমি আপনার সরঞ্জামটি ব্যবহার করতে পারি; আমি উইন্ডোজ ব্যবহার করছি। ডকুমেন্টেশনে উল্লেখ করা হয়েছে যে উইন্ডোজ সমর্থিত নয়, তবে আমি যাইহোক চেষ্টা করেছি। আমি যখন এটি চালানোর চেষ্টা করেছি, এটি ইঙ্গিত করেছিল যে এটি আমার AT PATH তে মাইসক্ল্যাডমিনটি খুঁজে পাবে না, তবে মাইএসকিউএল এর বিন ডিরেক্টরিটি আমার $ রাস্তায় রয়েছে।
মাইকেল ম্যাকগোয়ান

দুঃখিত, আমি উইন্ডোজ ডেটাডির লক্ষ্য করিনি। আমি একটি আলাদা উত্তর যুক্ত করব।
রোল্যান্ডোমাইএসকিউএলডিবিএ

1

আপনার কত র‌্যাম আছে তা আপনি বলেননি? আমি ধরে নিলাম এটি কমপক্ষে 32 গিগাবাইট।

ইনোডব_বফার_পুল_সাইজ - 23 জি

অনেকটা র‌্যামের জন্য ভালো।

ক্যোরি_ক্যাচি_ সাইজ = 1 জি

অনেক বড়। এটি বড় হলে এটি অদক্ষ। 50M এর বেশি কোনও প্রস্তাব নেই।

কী-বাফার_সাইজ = 5 জি

উইন্ডোজে 4G (স্থির) এর একটি হার্ড সীমা থাকতে পারে, 4G এর হার্ড সীমা ছিল। আপনার 5 জি 1 জি তে রূপান্তরিত হতে পারে। যাইহোক, যদি আপনার সমস্ত টেবিলগুলি InnoDB হয় তবে কেন ম্যামটি নষ্ট করবেন। এটি 50M এ সেট করুন।

যেহেতু ত্রুটি বার্তায় হুবহু 1G ছিল, এর থেকে গন্ধ লাগে sort_buffer_size। 32M যুক্তিসঙ্গত হতে পারে।

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