আমি বৈজ্ঞানিক ডেটা বিশ্লেষণের জন্য আমার ওয়ার্কস্টেশনে একটি মাইএসকিউএল 5.5 সার্ভার চালাচ্ছি এবং এর থেকে পারফরম্যান্স-ভিত্তিতে সবচেয়ে বেশি পেতে মাইএসকিউএলকে কীভাবে কনফিগার করতে হবে তা অবাক করে দিয়েছি। যে ধরণের ক্যোয়ারী আমি সাধারণত চালিত করি সেগুলিতে 10-20 টেবিলের সাথে যুক্ত হয় এবং বেশ দীর্ঘ সময় ধরে চলতে পারে, এক থেকে কয়েক মিনিট মোটেই ব্যতিক্রম নয়। একই সময়ে খুব কম ব্যবহারকারীরই ডাটাবেস অ্যাক্সেস করে (সর্বোচ্চ 5 জন)। আমি একটি 2.2 গিগাহার্টজ ডুয়াল কোর এবং 4 জিবি র্যাম সহ একটি লেনোভো থিঙ্কপ্যাড টি 61 থেকে সার্ভারটি হ্যান্ড-নির্বাচিত উপাদানগুলি সহ নিম্নলিখিত ব্র্যান্ড-নতুন মেশিনে স্থানান্তরিত করেছি:
- ইন্টেল i7 3770, 4x 3.4 গিগাহার্জ (চলমান @ 4x3.7 গিগাহার্টজ)
- জেড 77 চিপসেট
- ডিডিআর 3 1600 র্যামের 16 জিবি
- উইন্ডোজ 7 প্রো 64-বিট
- উইন্ডোজ এবং মাইএসকিউএল সার্ভারটি একটি ইন্টেল 520 সিরিজের এসএসডি ড্রাইভে চালিত হয়।
প্রথম পরীক্ষাগুলি (উভয় মেশিনে একই ক্যোয়ারী চালানো) নতুনটির জন্য গতিতে একটি সুনির্দিষ্ট উন্নতি দেখিয়েছে, তবে অনুসন্ধানগুলি এখনও অনেক সময় নেয় এবং আমি আরও উত্সাহের আশা করেছিলাম। প্রশ্নযুক্ত প্রশ্নগুলি মোটামুটিভাবে অনুকূলিত হয়েছে, অর্থাত সমস্ত টেবিলে সঠিক কী রয়েছে যা "বর্ধিত ব্যাখ্যা করুন" হিসাবে ব্যবহৃত হচ্ছে।
এখন আমার বর্তমান মাইএসকিউএল সেটিংসে: প্রথমে আমার উল্লেখ করা উচিত যে আমি মাইআইএসএএম থেকে ইনডোডে চলে এসেছি অনেক আগে।
আমার কিছু.in.ini টুইটগুলি (যেমন ডিফল্ট সেটিংস থেকে প্রস্থান):
# Maximum size for internal (in-memory) temporary tables. If a table
# grows larger than this value, it is automatically converted to disk
# based table This limitation is for a single table. There can be many
# of them.
#tmp_table_size=35M
tmp_table_size=4000M
max_heap_table_size=4000M
# InnoDB, unlike MyISAM, uses a buffer pool to cache both indexes and
# row data. The bigger you set this the less disk I/O is needed to
# access data in tables. On a dedicated database server you may set this
# parameter up to 80% of the machine physical memory size. Do not set it
# too large, though, because competition of the physical memory may
# cause paging in the operating system. Note that on 32bit systems you
# might be limited to 2-3.5G of user level memory per process, so do not
# set it too high.
#innodb_buffer_pool_size=96M
innodb_buffer_pool_size=800M
general-log
expire_logs_days = 60
general_log_file = "F:/my_query_mysql.log"
log-output = TABLE
optimizer_search_depth = 0 #meant to cure the "statistics state" bug in some queries
আমি জানতে চাইছি যে কেউ উপরে বর্ণিত নম্বরগুলিতে বা এমনকি আমার জানিনা এমন আরও সেটিংস পরিবর্তন করার পরামর্শ দিবে কিনা।
আমি কোনও সহায়ক মন্তব্য প্রশংসা করব।
স্টিভ
সম্পাদনা: আমার 10 টি টেবিলের জুড়ে জড়িত জড়িত দুটি প্রশ্ন রয়েছে এবং সেগুলি আমার লেনোভো নোটবুক এবং নতুন পিসিতে চালিয়েছি। ক্যোয়ারী # 1 ল্যাপটপে 9m11 বনাম নতুন মেশিনে 3 মি 36 সেকেন্ড নিয়েছে; ক্যোয়ারী # 2 ল্যাপটপে 48.5s বনাম ওয়ার্কস্টেশনটিতে 22.5s নিয়েছে। সুতরাং মৃত্যুদন্ডের গতি প্রায় 2-2.5 ফ্যাক্টর দ্বারা উন্নত হয়েছিল। ওয়ার্কস্টেশনে, র্যামের 50% ব্যবহার করা হয়নি। চারটি কোর জুড়ে গড় সিপিইউ বোঝা (উইন্ডোজ টাস্ক ম্যানেজারের হিসাবে রিপোর্ট করা হয়েছে) প্রায় 13% ছিল। প্রতি-কোর ভিত্তিতে লোড (কোর টেম্পের হিসাবে রিপোর্ট করা হয়েছে) এক কোরের জন্য প্রায় 25-40% ছিল, যখন এটি অন্যদের জন্য <= 10% ছিল, ইঙ্গিত করে যে মাইএসকিউএল একক কোয়ের জন্য একাধিক কোর ব্যবহার করে না does ।