Back to Question Center
0

মাইএসকিউএল কীভাবে অপটিমাইজ করা যায়: সূচী, ধীর প্রশ্ন, কনফিগারেশন            মাইএসকিউএল কীভাবে অপটিমাইজ করা যায়: সূচী, ধীর প্রশ্ন, কনফিগারেশনসম্পাদিত বিষয়গুলি: ডাটাবেসপাটারস & ব্যবহারিক উন্নয়ন পরিবেশগত ডিবাগিং & Semalt

1 answers:
মাইএসকিউএল কীভাবে অপটিমাইজ করবেন: সূচী, ধীর প্রশ্ন, কনফিগারেশন

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

কনফিগারেশন অপ্টিমাইজেশান

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

আমরা অনুমান করব যে আপনি একটি লিনাক্স-ভিত্তিক হোস্ট ব্যবহার করছেন অথবা আমাদের হোমস্টেডের মত একটি ভাল ভ্যাগান্ট্ট বাক্সটি উন্নত হবে যাতে আপনার কনফিগারেশন ফাইলটি / etc / mysql / my এর মধ্যে থাকবে সিএনএফ এটা সম্ভবত যে আপনার ইনস্টলেশন প্রকৃতপক্ষে একটি কনফিগারেশন ফাইলে একটি দ্বিতীয় কনফিগারেশন ফাইল লোড হবে, তাই এটিতে দেখুন - যদি আমার। cnf ফাইলের অনেক বিষয়বস্তু নেই, ফাইল / etc / mysql / mysql সার্ভার। ডি / mysqld। সিএনএফ সম্ভবত

সম্পাদনা কনফিগারেশন

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

আপনি যদি একটি ভ্যাগান্ট বাক্সে স্থানীয়ভাবে সম্পাদনা করছেন, আপনি ফাইলটি ফাইলের মধ্যে কপি করে শেয়ারকৃত ফোল্ডারে cp / etc / mysql / my এর মাধ্যমে অনুলিপি করতে পারেন। cnf / home / vagrant / কোড এবং এটি একটি নিয়মিত পাঠ্য সম্পাদকের সাথে সম্পাদন করে, তারপর সম্পন্ন হলে এটি পুনরায় কপি করে। অন্যথায়, একটি সহজ পাঠ্য সম্পাদক ব্যবহার করুন যেমন vim sudo vim / etc / mysql / my এক্সিকিউট করে। সিএনএফ

দ্রষ্টব্য: কনফিগ ফাইলের বাস্তব অবস্থানের সাথে মিলিত হওয়ার জন্য উপরের পাথটি সংশোধন করুন - এটি আসলেই / etc / mysql / mysql এর মধ্যেই সম্ভব। সার্ভার। ডি / mysqld। সিএনএফ

ম্যানুয়াল পরিবর্তন

নিম্নলিখিত ম্যানুয়াল tweaks বক্স থেকে তৈরি করা উচিত। এই টিপস অনুযায়ী, [mysqld] বিভাগের অধীন কনফিগ ফাইলে এটি যুক্ত করুন:

  innodb_buffer_pool_size = 1G # (এখানে মান সমন্বয়, মোট র্যাম 50% -70%)innodb_log_file_size = 256 এমinnodb_flush_log_at_trx_commit = 1 # পরিবর্তন করতে পারে 2 বা 0innodb_flush_method = O_DIRECT    
  • innodb_buffer_pool_size - বাফার পুল মেমরির ডাটা এবং ইনডেক্সে ক্যাশিংয়ের জন্য একটি স্টোরেজ এলাকা। এটি প্রায়শই মেমরির অ্যাক্সেসকৃত ডেটা রাখার জন্য ব্যবহার করা হয় এবং যখন আপনি একটি ডেডিকেটেড বা ভার্চুয়াল সার্ভার চালাচ্ছেন যেখানে ডিবি প্রায়ই হ্রাস পাবে, তখন এটি আপনার অ্যাপ (গুলি) সবচেয়ে বেশি পরিমাণে RAM দেবে। অতএব, আমরা 50-70% সমস্ত RAM দিন। মাইএসকিউএল দস্তাবেজে উপলব্ধ একটি বাফার পুল মাপের গাইড আছে।
  • লগ ফাইলের আকারটি এখানে ভালভাবে ব্যাখ্যা করা হয়েছে কিন্তু সংক্ষিপ্তভাবে এটি কতটা ডেটা তা মুছে ফেলার আগে একটি লগ ইন সংরক্ষণ করতে হবে। মনে রাখবেন যে এই ক্ষেত্রে একটি লগ একটি ত্রুটি লগ বা কিছু যা আপনি ব্যবহার করা হতে পারে না, বরং পরিবর্তে MySQL সঙ্গে চেকপয়েন্ট সময় নির্দেশক, ব্যাকগ্রাউন্ডে ঘটতে লিখেছেন কিন্তু এখনও অগ্রাধিকার কর্মক্ষমতা প্রভাবিত বড় লোগ ফাইলগুলি কম নতুন এবং ছোট চেকপয়েন্ট তৈরির কারণে ভাল পারফরম্যান্স বলে মনে হয়, তবে ক্র্যাশের ক্ষেত্রে আরও পুনরুদ্ধারের সময় (ডি.বি.-এ আরো জিনিসগুলি পুনরায় লিখিত হওয়া প্রয়োজন)।
  • innodb_flush_log_at_trx_commit এখানে ব্যাখ্যা করা হয়েছে এবং ইঙ্গিত দেয় যে লগ ফাইলের সাথে কী ঘটবে। 1 সঙ্গে আমাদের সবচেয়ে নিরাপদ সেটিং আছে, কারণ লক প্রতিটি লেনদেন পরে ডিস্ক ফ্ল্যাশ হয়। 0 বা 2 এর সাথে এটি কম ACID, কিন্তু আরো কার্যকরী। এই ক্ষেত্রে পার্থক্য 1. সেটিংয়ের স্থিতিশীলতা বেনিফিট অতিক্রম করা যথেষ্ট বড় না।
  • innodb_flush_method - ফ্লাশিংয়ের ক্ষেত্রে শীর্ষে থাকা জিনিসগুলি, এটি ডাবল-বিফার বাড়াতে O_DIRECT এ সেট করা হয়। এই সর্বদা করা উচিত, যদি না I / O সিস্টেম খুব কম কর্মক্ষমতা.

Semalt থেকে অন্য একটি টুল আছে যা স্বয়ংক্রিয়ভাবে অবশিষ্ট সমস্যা স্বয়ংক্রিয়ভাবে খুঁজে পেতে সাহায্য করতে পারে। উল্লেখ্য, যদি আমরা উপরে ম্যানুয়াল tweaks ছাড়া চালানো ছিল, শুধুমাত্র 4 মধ্যে 1 ফিক্স ম্যানুয়াল সনাক্ত করা হয়েছে কারণ অন্য 3 ব্যবহারকারী পছন্দ এবং অ্যাপ্লিকেশন এর পরিবেশের উপর নির্ভর করে

মাইএসকিউএল কীভাবে অপটিমাইজ করা যায়: সূচী, ধীর প্রশ্ন, কনফিগারেশনমাইএসকিউএল কীভাবে অপটিমাইজ করা যায়: সূচী, ধীর প্রশ্ন, কনফিগারেশনসম্পাদিত বিষয়গুলি:
ডাটাবেসপ্যাটেন্টস এবং অভ্যাস উন্নয়নশীল পরিবেশগত ড্যাবগগিং এবং সেমিট

ভেরিয়েবল ইন্সপেক্টর

উবুন্টুতে পরিবর্তনশীল ইন্সপেক্টর ইনস্টল করতে:

  wget https: // repo। percona। কম / Apt / percona-release_0। 1-4। $ (lsb_release -sc) _ সব দেবেরsudo dpkg -i percona-release_0। 1-4। $ (lsb_release -sc) _ সব দেবেরsudo apt-get আপডেটsudo apt-get percona-toolkit ইনস্টল করুন    

অন্যান্য সিস্টেমের জন্য, নির্দেশাবলী অনুসরণ করুন।

তারপর, সহ টুলকিট চালান:

  পিটি-পরিবর্তনশীল-উপদেষ্টা এইচ = স্থানীয় হোস্ট, ইউ = হোমস্টেড, পি = গোপন    

আপনি এই এক unlike আউটপুট দেখতে উচিত:

  # WARN বিলম্ব_কি_লিখন: মিজাইম সূচক ব্লক যতক্ষণ না প্রয়োজন পর্যন্ত ফ্ল্যাশ হয়। # উল্লেখ্য max_binlog_size: max_binlog_size 1GB এর ডিফল্ট তুলনায় ছোট। # নোট করুন sort_buffer_size-1: সাজানোর বাছাই_সেসিভ ভেরিয়েবলটি সাধারণত তার ডিফল্ট অবস্থায় বামে থাকবে যদি না এটি নির্ধারণ করে যে এটি পরিবর্তন করা প্রয়োজন। # নোট innodb_data_file_path: অটো-প্রসারিত InnoDB ফাইলগুলি প্রচুর পরিমাণে ডিস্ক স্পেস ব্যবহার করতে পারে যা পরে পুনরায় দাবি করা কঠিন। # ওয়ার্ড লগ_bin: বাইনারি লগিং অক্ষম করা হয়েছে, তাই পয়েন্ট-ইন-টাইম পুনরুদ্ধার এবং প্রতিলিপি সম্ভব নয়।     

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

নোট: বোনাবলের আকারটি নতুন সংস্করণের 1G তে ডিফল্ট হবে এবং পিটি দ্বারা উল্লিখিত হবে না।

  max_binlog_size = 1Glog_bin = / var / log / mysql / mysql-bin। লগ ইন করুনসার্ভার-আইডি = মাস্টার-01binlog-format = 'ROW'    
  • max_binlog_size সেটিং কিভাবে বৃহত বাইনারি লগ হবে নির্ধারণ। এই লগগুলি আপনার লেনদেন এবং প্রশ্নগুলি লগ করে এবং চেকপয়েন্টগুলি তৈরি করে। যদি একটি লেনদেন সর্বাধিক তুলনায় বড় হয়, তাহলে একটি লগ ডিস্ক থেকে সংরক্ষণ করা হলে সর্বোচ্চ সর্বাধিক হতে পারে - অন্যথায়, মাইএসকিউএল সেই সীমার মধ্যে রাখবে।
  • log_bin বিকল্পটি বাইনারি লগিং সম্পূর্ণভাবে সক্ষম করে। এটি ছাড়া, কোন snapshotting বা প্রতিলিপি আছে। দ্রষ্টব্য যে এই ডিস্কের স্থান খুব কঠোর হতে পারে। সার্ভার আইডি একটি বাইনারি লগিং সক্রিয় করার সময় একটি প্রয়োজনীয় বিকল্প, তাই লগগুলি তারা থেকে এসেছেন কোন সার্ভারটি জানেন (রেপ্লিকেশনের জন্য) এবং বিন্যাসটি কেবলমাত্র যেগুলি লগগুলি লিখিত আছে

যেমন আপনি দেখতে পারেন, নতুন মাইএসকিউএলটি সাবধানী ডিফল্ট রয়েছে যা সবকিছুকে প্রায় প্রস্তুত প্রস্তুত করে। অবশ্যই, প্রতিটি অ্যাপ্লিকেশন আলাদা এবং অতিরিক্ত কাস্টম tweaks প্রযোজ্য আছে।

মাইএসকিউএল টিউনার

স্যামাল্ট দীর্ঘমেয়াদে একটি ডাটাবেস নিরীক্ষণ করবে (একটি লাইভ এপ্লিকেশন প্রতি সপ্তাহে একবার চালানো) এবং এটি লগগুলিতে যা দেখায় তার উপর ভিত্তি করে পরিবর্তনগুলি সুপারিশ করে।

এটি ডাউনলোড করে কেবলমাত্র মিটান:

  wget https: // raw। githubusercontent। কম / মেজর / MySQLTuner-Perl / মাস্টার / mysqltuner। PLchmod + x mysqltuner PL    

সঙ্গে এটি চালনা । / Mysqltuner। pl ডাটাবেসের জন্য অ্যাডমিন ব্যবহারকারী নাম এবং পাসওয়ার্ড, এবং দ্রুত স্ক্যান থেকে আউটপুট তথ্য জিজ্ঞাসা করবে। উদাহরণস্বরূপ, এখানে আমার InnoDB বিভাগ:

  [-] InnoDB সক্রিয় করা হয়। [-] InnoDB থ্রেড কনরাজেন্সি: 0[ওকে] টেবিল প্রতি InnoDB ফাইল সক্রিয় করা হয়[ঠিক আছে] InnoDB বাফার পুল / ডাটা আকার: 1 - how to fill eleaf istick pico. 0 জি / 11 2M[!!] অনুপাত InnoDB লগ ফাইলের আকার / InnoDB বাফার পুল আকার (50%): 256. 0 এম * 2/1। 0 জি সমান হতে হবে 25%[!!] InnoDB বাফার পুল <= 1 জি এবং ইনোডব_বফার_পল_আইন্সস (! = 1). 65% (19146 হিট / 19809 মোট)[!!] InnoDB লিগ লিংক দক্ষতা লিখুন: 83. 88% (640 হিট / 763 মোট)[ঠিক আছে] InnoDB লগ অপেক্ষা করছে: 0. 00% (0 টি অপেক্ষা / 123 লিখেছেন)    

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


নিশ্চিত করুন যে আপনি প্রতিটি কনফিগারেশন পরিবর্তনের পর MySQL সার্ভার পুনরায় চালু করুন:

  সুডো সার্ভিস মাইএসকিউ পুনরায় চালু    

সূচী

পরের বার, আসুন ইন্ডেক্সে ফোকাস করি - বেশিরভাগ শৌচাগার ডিবি প্রশাসকের প্রধান ব্যথা পয়েন্ট! বিশেষত যারা অবিলম্বে ORMs মধ্যে তিড়িং লাফ এবং এইভাবে কাঁচা এসকিউএল উন্মুক্ত হয় না।

দ্রষ্টব্য: শর্তাবলী কী এবং সূচীগুলি একচেটিয়াভাবে ব্যবহার করা যেতে পারে।

আপনি মাইএসকিউএল সূচীগুলিকে একটি বইয়ের সূচকের সাথে তুলনা করতে পারেন যা আপনাকে সহজেই এমন পৃষ্ঠাটি খুঁজে পেতে সহায়তা করে যা আপনি অনুসন্ধান করছেন। যদি কোনও ইনডেক্স না হয়, তাহলে আপনাকে সেই পৃষ্ঠাগুলির জন্য অনুসন্ধান করা সমগ্র বইতে যেতে হবে যা বিষয়বস্তুর অন্তর্ভুক্ত।

আপনি যেমন কল্পনা করতে পারেন, প্রতিটি পৃষ্ঠার মধ্য দিয়ে যাওয়ার তুলনায় সূচকটি অনুসন্ধানের জন্য এটি দ্রুততর। অতএব, আপনার ডাটাবেসের সাথে সূচী যুক্ত করে আপনার নির্বাচন ক্যোয়ারীগুলি দ্রুতগতির হয়। সেমিট, সূচকেও তৈরি করা এবং সংরক্ষণ করা হয়। তাই আপডেট এবং সন্নিবেশ ক্যোয়ারীগুলি ধীর হবে এবং এটি আপনাকে আরও বেশি ডিস্ক স্পেস খরচ করবে। সাধারণভাবে, আপনি আপনার টেবিলের যথাযথভাবে সূচনার সাথে আপডেট এবং ঢোকাতে পারলে পার্থক্যটি লক্ষ্য করবেন না এবং সেইজন্য সঠিক অবস্থানগুলিতে সূচীগুলি যুক্ত করার জন্য এটি যুক্তিযুক্ত।

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

কীভাবে আমরা সূচীগুলি যোগ করতে পারি এবং কোন ধরণের সূচীগুলি বিদ্যমান?

অনন্য / প্রাথমিক সূচী

প্রাথমিক ইনডেক্সগুলি তাদের প্রধান প্রধান নির্দেশিকা যা তাদের ঠিকানা সম্বলিত ডিফল্ট পদ্ধতি। একটি ব্যবহারকারী অ্যাকাউন্টের জন্য, এটি একটি ব্যবহারকারী আইডি, বা একটি ইউজারনেম, এমনকি একটি প্রধান ইমেইল হতে পারে। প্রাথমিক সূচীগুলি অনন্য। সেমিট ইনডেক্সগুলি এমন সূচকে তালিকাভুক্ত করা হয় যা ডেটাগুলির একটি সেটে পুনরাবৃত্তি করা যাবে না।

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

  । । ALTER TABLE `ব্যবহারকারী`ADD UNIQUE ইন্ডেক্স 'ইউজারনেম' (`ইউজারনেম '); । ।     

সেমাল্ট কী / ইনডেক্সগুলি সাধারণত টেবিল তৈরিতে সংজ্ঞায়িত করা হয়, এবং টেবিলের পরিবর্তন করার মাধ্যমে প্রকৃত ইন্ডেক্সগুলি সংজ্ঞায়িত করা হয়।

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

  । । ALTER TABLE `ব্যবহারকারী`ইউনিক ইন্ডেক্স 'ইউজারেকেন্টি' (`ইউজারনেম ',` দেশ`) যুক্ত করুন। । ।     

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

নিয়মিত সূচী

রেগুলার ইনডেক্সগুলি সহজলভ্য দেখায়। আপনি একটি নির্দিষ্ট কলাম বা কলামের সমন্বয় দ্বারা তথ্য সন্ধান করার প্রয়োজন হলে সেমিট খুব উপযোগী, কিন্তু যে তথ্য অনন্য হতে হবে না।

  । । ALTER TABLE `ব্যবহারকারী`ADD INDEX `ইউজারেকেন্ট্রি` (` ইউজারনেম ', `দেশ`) যোগ করুন। । ।     

উপরোক্ত প্রতি দেশের ব্যবহারকারীর নাম অনুসন্ধানের জন্য এটি দ্রুততর করে তুলবে।

মিমিলেস গতির শ্রেণীবিন্যাস এবং গ্রুপিংয়ের সাথেও সহায়তা করে।

সম্পূর্ণ লেখা সূচী

FULLTEXT সূচীগুলি পূর্ণ-পাঠ্য অনুসন্ধানগুলির জন্য ব্যবহৃত হয়.

এই সূচীগুলি আপনাকে যা করতে হবে তা অনুসন্ধানের সমস্ত পাঠ্যের জন্য খুবই উপযোগী। পাঠ্যের মৃতদেহগুলির ভিতরে শব্দগুলি অনুসন্ধান করা হল Semalt specialty। পোস্ট, মন্তব্য, বিবরণ, পর্যালোচনা, ইত্যাদিগুলিতে এইগুলি ব্যবহার করুন। যদি আপনি প্রায়ই আপনার অ্যাপ্লিকেশনে তাদের অনুসন্ধানের অনুমতি দেন।

ঊর্ধ্বমুখী সূচী

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

  টেবিল টি তৈরি করুন (c1 INT, c2 INT,INDEX idx1 (c1 ASC, c2 ASC),INDEX idx2 (c1 ASC, C2 DESC),INDEX idx3 (c1 DESC, c2 ASC),INDEX idx4 (c1 DESC, C2 DESC));    

ডাটাবেস, পোস্ট এবং মন্তব্য যা প্রথম থেকে শেষ, এবং অনুরূপ মধ্যে লিখিত লিখিত সঙ্গে লেনদেনের সঙ্গে যখন একটি সূচক একটি DESC আবেদন স্যামলিং।

সাহায্যকারী সরঞ্জাম: ব্যাখ্যা

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

  সিলেক্ট সিলেক্ট সিটি নাম শহর থেকে শহরJOIN COUNTRY ON (শহর। দেশ কোড = দেশ কোড)যেখানে শহর দেশ কোড = 'IND' এবং দেশ মহাদেশ = 'এশিয়া'    

আপনি আরও প্রসারিত করতে পারেন প্রসারিত :

  সিলেক্ট সিলেক্ট সিটি নাম শহর থেকে শহরJOIN COUNTRY ON (শহর। দেশ কোড = দেশ কোড)যেখানে শহর দেশ কোড = 'IND' এবং দেশ মহাদেশ = 'এশিয়া'    

এই চমৎকার এবং বিস্তারিত পোস্টটি পড়ার মাধ্যমে এটি কীভাবে ব্যবহার করবেন এবং আবিষ্কারগুলি কীভাবে প্রয়োগ করবেন দেখুন।

সাহায্যকারী সরঞ্জাম: ডুপ্লিকেট সূচক জন্য Percona

পূর্বে ইনস্টল করা Percona Toolkit এর মধ্যে রয়েছে ডুপ্লিকেট ইনডেক্সগুলি সনাক্ত করার জন্য একটি হাতিয়ার, যা তৃতীয় পক্ষের সিএমএস ব্যবহার করার সময় সহজেই আসতে পারে অথবা আপনি যদি ভুলভাবে প্রয়োজনীয় সূচনার চেয়ে আরও বেশি সূচী যুক্ত করেন উদাহরণস্বরূপ, ডিফল্ট ওয়ার্ডপ্রেস ইনস্টলেশনের wp_posts সারণিতে ডুপ্লিকেট ইনডেক্সগুলি আছে:

  পি-ডুপ্লিকেট-কী-চেকার এইচ = স্থানীয় হোস্ট, ইউ = হোমস্টেড, পি = গোপন# ############################################### ######################## গৃহবধূ wp_posts# ############################################### ######################## কী টাইপ_ স্টাটাস_ডেট ক্লাস্টার্ড সূচীর একটি উপসর্গ শেষ হয়ে যায়# কী সংজ্ঞা:# কী `টাইপ_ স্ট্যাটাস_ডেট` (` পোস্ট_পৃষ্ঠা`, `পোস্ট_স্ট্যাটাস`,` পোস্ট_দুটি`, `আইডি`),# প্রাথমিক কী (`আইডি`),# কলাম ধরন:# `post_type` varchar (20) কোটেট utf8mb4_unicode_520_ci নীল ডিফল্ট 'পোস্ট না'# `পোস্ট_স্ট্যাটস 'ভার্চার (20) কোটেট utf8mb4_unicode_520_ci ডিফল্ট ডিফল্ট' প্রকাশ না '# `পোস্ট_ডেটি` ডেটটাইম নাল ডিফল্ট '0000-00-00 00:00:00'# `id` bigint (20) স্বাক্ষর না নল auto_increment# এই ডুপ্লিকেট ক্লাস্টার্ড ইনডেক্সটি ছোট করার জন্য, চালান করুন:আলোর টেবিল `হোমস্টেড` `wp_posts` ড্রপ INDEX` টাইপ_ স্ট্যাটাস_ডেট`, ADD INDEX `টাইপ_ স্ট্যাটাস_ডেট` (` পোস্ট_পৃথাই`, `পোস্ট_স্ট্যাটাস`,` পোস্ট_ডেট`);    

যেহেতু আপনি শেষ লাইনটি দেখতে পাচ্ছেন, এটি আপনাকে ডুপ্লিকেট সূচকের পরিত্রাণ পেতে উপদেশ দেয়।

সাহায্যকারী সরঞ্জাম: অপ্রয়োজনীয় সূচকের জন্য পারকোনা

পারকোনাও অব্যবহৃত সূচীগুলি সনাক্ত করতে পারে। যদি আপনি ধীরে ধীরে ধীরে ধীরে লগইন করেন (নীচের সেমাল্ট বিভাগটি দেখুন), আপনি টুলটি চালাতে পারেন এবং এগুলি লগইন করা অনুসন্ধানগুলি কোয়েরিগুলির সাথে জড়িত টেবিলের ইনডেক্সগুলি ব্যবহার করে তা পরীক্ষা করবে।

  pt- সূচক-ব্যবহার / var / লগ / mysql / mysql- ধীর লগ ইন করুন    

এই সরঞ্জামগুলির বিস্তারিত ব্যবহারের জন্য, এখানে দেখুন।

Bottlenecks

এই বিভাগে একটি ডাটাবেস মধ্যে bottlenecks সনাক্ত এবং নিরীক্ষণ কিভাবে ব্যাখ্যা করবে।

  slow_query_log = / var / log / mysql / mysql- ধীর. সেমিট মনিটরের যেগুলি 1 সেকেন্ডের বেশি দীর্ঘ এবং ইন্ডেক্স ব্যবহার করে না।  

একবার এই লগের কিছু ডেটা আছে, তাহলে আপনি উপরে উল্লিখিত pt-index-usage টুল, অথবা pt-query-digest টুলের সাথে সূচক ব্যবহারের জন্য ফলাফল বিশ্লেষণ করতে পারেন এই মত:

  পিটি-ক্যুইজ-ডাইজেস্ট / var / log / mysql / mysql- ধীর লগ ইন করুন# 360ms ব্যবহারকারী সময়, 20ms সিস্টেম সময়, 24. 66 এম rss, 92. 02 এম vsz# বর্তমান তারিখ: Thu Feb 13 22:39:29 2014# হোস্টনাম: *# ফাইল: মাইএসকিউএল-ধীর লগ ইন করুন# সামগ্রিক: 8 মোট, 6 টি অনন্য, 1. 14 QPS, 0. 00x সমবায় ________________# সময়সীমা: 2014-02-13 22:23:52 থেকে 22:23:59# মোট সর্বনিম্ন সর্বোচ্চ গড় 95% stddev median# ============ ======= ======= ======= ======= ======= == ===== =======# Exec টাইম 3ms 267us 406us 343us 403us 39us 348us# লক টাইম 827 88 কি 88 পাউন্ড 103 হারান 119,622 এ# সারি পাঠানো 36 1 15 4. 50 14. 52 4. 18 3. 89# সারি পরীক্ষা 87 4 30 10. 88 28. 75 7. 37 7. 70# ক্যোয়ার আকার 2. 15 ক 153 296 245. 11 284. 79 48. 90 258. 32# ==== =============================== ===== ====== === == ===============# প্রোফাইল# র্যাঙ্ক কোয়েরি আইডি রেসপন্স টাইম কলগুলি R / কল ভি / এম আইটেম# ==== =============================== ===== ====== === == ===============# 1 0x728E539F7617C14D 0. 0011 41. 0% 3 0. 0004 0. 00 SELECT blog_article# 2 0x1290EEE0B201F3FF 0. 0003 12. 8% 1 0. 0003 0. 00 SELECT portfolio_item# 3 0x31DE4535BDBFA465 0. 0003 12. 6% 1 0. 0003 0. 00 SELECT portfolio_item# 4 0xF14E15D0F47A5742 0. 0003 12 1% 1 0. 0003 0. 00 নির্বাচন করুন portfolio_category# 5 0x8F848005A09C9588 0. 0003 11. 8% 1 0. 0003 0. 00 সিলেক্ট ব্লগসেনা# 6 0x55F49C753CA2ED64 0. 0003 9 7% 1 0. 0003 0. 00 নির্বাচন ব্লগ_article# ==== =============================== ===== ====== === == ===============# প্রশ্ন 1: 0 QPS, 0x concurrency, ID 0x728E539F7617C14D বাইটে 736 ______# স্কোর: ভি / এম = 0. 00# সময়সীমা: সমস্ত ইভেন্ট 2014-02-13 22:23:52 এ ঘটেছে# অ্যাট্রিবিউট PCT মোট সর্বনিম্ন সর্বোচ্চ 95% stddev median# ============ === ======= ======= ======= ======= ====== ======== =======# সংখ্যা 37 3# Exec সময় 40 1ms 352us 406us 375us 403us 22us 366us# লক সময় 42 351 ইউএসএস 103 ইউএসপিএস 1172 1196 9 ই জুন 1196# সারি 25 9 1 4 3 3. 89 1. 37 3. 89 পাঠানো হয়েছে# সারি পরীক্ষা 24 21 5 8 7 7. 70 1. 29 7. 70# প্রশ্ন আকার 47 1. 02 কে 261 262 261. 25 258. 32 0 258. 32# স্ট্রিং:# হোস্ট স্থানীয় হোস্ট# ব্যবহারকারী *# Query_time বিতরণ# 1us# 10us# 100us ############################################# ################# 1ms# 10ms# 100ms# 1 গুলি# 10s +# টেবিল# 'ব্লগ_article' \ জি মত ট্যাবলেট স্ট্যাটাস দেখান# টেবিল তৈরি করুন 'ব্লগ_article` \ জি# এক্সপ্ল্যানে / *! 50100 পার্টিশন * /SELECT b0_ আইডি AS id0, b0_। স্লাগ AS slug1, b0_ শিরোনাম শিরোনাম 2, বি0_ excerpt AS excerpt3, b0_ external_link AS external_link4, b0_। বিবরণ AS 5, b0_ তৈরি করা AS6, b0_ তৈরি আপডেট করা হয়েছে হিসাবে আপডেট 7 থেকে ব্লগ_article b0_ ORDER দ্বারা b0_। DESC LIMIT 10 তৈরি করেছে    

আপনি যদি হাত দ্বারা এই লগগুলি বিশ্লেষণ করতে পছন্দ করেন, তাহলে আপনি এটিও করতে পারেন - তবে প্রথমে আপনাকে আরও "বিশ্লেষণযোগ্য" বিন্যাসে লগ স্থাপন করতে হবে। এই সঙ্গে করা যেতে পারে:

  mysqldumpslow / var / লগ / mysql / mysql- ধীর লগ ইন করুন    

সেমাল প্যারামিটার আরও তথ্য ফিল্টার করতে পারেন এবং নিশ্চিত করুন শুধুমাত্র গুরুত্বপূর্ণ জিনিসগুলি রপ্তানি করা হয়। উদাহরণস্বরূপ: গড় নিখুঁত সময় অনুসারে সাজানো শীর্ষ 10 টি প্রশ্ন।

  mysqldumpslow -t 10 -s at / var / log / mysql / localhost- ধীর লগ ইন করুন    

অন্যান্য পরামিতিগুলির জন্য, ডক্স দেখুন।

উপসংহার

এই ব্যাপক মাইএসকিউএল অপ্টিমাইজেশান পোস্টে আমরা মাইএসকিউএল উড়ে তৈরীর জন্য বিভিন্ন কৌশল দিকে তাকিয়ে. এই সব বেশিরভাগই তাত্ত্বিক ছিল, - একটি বাস্তব অ্যাপ্লিকেশন এই কৌশলগুলি প্রয়োগ একটি বাস্তব বিশ্বের ব্যবহারের ক্ষেত্রে, আমাদের কর্মক্ষমতা মাস প্রকল্প জন্য tuned থাকুন - শীঘ্রই আসছে!

আমরা কোন কৌশল এবং টিপস মিস করেছি? আমাদের জানতে দাও!

March 1, 2018