আইও অপেক্ষা করুন মাইএসকিএল কমিটের সময় এত ধীরগতির কারণ (এক্সটি 4 জেডিবি 2 99% আইও)


14

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

এখন এটি আইওর সমস্যায় পড়েছে, প্রধান আইও সমস্যাটি আমার প্রক্রিয়া নয়, এক্সটি 4 এর জেডিবি 2, ট্রেনলিং সিস্টেম। এটি 99.99% এ এবং প্রতিটি মাইএসকিউএল কমিটে আইওয়ের জন্য অপেক্ষা করার জন্য সিপিইউ চালিয়ে যাচ্ছে।

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


আপনার সমস্ত তথ্য কি InnoDB ???
RolandoMySQLDBA

উত্তর:


4

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

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


আমি এটি ফাইল-সিস্টেম ব্যবহার করে জার্নালটি ডেটা ব্যবহার না করে কেবলমাত্র মেটাডেটা ব্যবহার করে পরিবর্তন করব। Ext4 এছাড়াও এইভাবে কনফিগার করা যেতে পারে।
দ্য ওয়াববিট

হ্যাঁ. শেষে jouirnal আইও দ্বিগুণ হয় - এবং ডাটাবেস লগ আবার একই কাজ করবে, তাই আপনি যা করতে হবে তার চেয়ে অনেক বেশি আইওপিএস দিয়ে উইন্ড আপ করুন। এবং নিরঙ্কুশতা যা মূলত প্রয়োজন হয় না। ফাইলটি সুরক্ষিত করার জন্য সিস্টেমটি জৌইনলালিংটি নিস .... কিন্তু অ্যাপ্লিকেশনটি ইতিমধ্যে যখন কোনও ডাটাবেসগুলি করে তখন অকেজো।
টমটম

অ-জার্নালিংয়ে সেরা পারফরম্যান্সের প্রস্তাব দেয় কোনটি? ধন্যবাদ!
Phyo আরকার লুইন

4

স্থিতিস্থাপকতা এবং পারফরম্যান্সের মধ্যে সর্বদা বাণিজ্য বন্ধ হয়ে যায়।

Ext4 এ মাইএসকিউএল দিয়ে বাধা = 1 ডিফল্ট প্রকৃতপক্ষে একটি ধীরগতির কারণ ঘটায়, তবে প্রথম পদক্ষেপটি জার্নালিং অক্ষম করা বা ডেটা = লিখনব্যাক চালু করা উচিত নয়।

প্রথমত, যদি স্থিতিস্থাপকতা উচ্চ গুরুত্ব পায় তবে একটি ব্যাটারি ব্যাকড RAID অবশ্যই এটির জন্য উপযুক্ত।

আমি যে মাউন্ট অপশনগুলি বেছে নিয়েছি, বিশেষত ব্যাটারিবিহীন ব্যাকযুক্ত RAID এ:

/dev/mapper/vg-mysql--data  /var/lib/mysql/data ext4  defaults,noatime,nodiratime,barrier=1,data=ordered  0 0

এটি ইচ্ছাকৃতভাবে ডেটা = লিটারব্যাক ব্যবহার করছে না কারণ আমি ফাইল সিস্টেমের দুর্নীতির ঝুঁকি নিতে চাই না যার ফলে "ক্র্যাশ এবং জার্নাল পুনরুদ্ধারের পরে ফাইলগুলিতে পুরানো ডেটা উপস্থিত হতে পারে" (উদ্ধৃতিটি এসেছে man mount)।

I / O সম্পর্কিত সেটিংসের আশেপাশে সম্পূর্ণরূপে নির্ভরযোগ্যতার জন্য my.cnf এ আদর্শ কনফিগারেশন হ'ল:

[mysqld]
sync_binlog = 1
innodb_flush_log_at_trx_commit = 1

পারফরম্যান্স বাড়াতে আমি ট্রেড-অফগুলির নিম্নলিখিত ক্রমটি বেছে নিয়েছি:

  1. sync_binlog = 0: এটিই প্রথম মাইএসকিউএল কনফিগারেশন যা আমি সম্পূর্ণ দৃili়তা থেকে দূরে সরে যাই। এর কারণ হ'ল এটি উল্লেখযোগ্য পারফরম্যান্সের উন্নতি দেয়, বিশেষত যেখানে binlog_format=row(দুর্ভাগ্যক্রমে জিরার জন্য প্রয়োজনীয়)। আমি ক্লাস্টারে পর্যাপ্ত মাইএসকিউএল প্রতিলিপি ব্যবহার করছি যে যদি বাইনলোগটি কোনও ক্ষয়ক্ষতির দৃশ্যের দ্বারা দূষিত হয়ে যায় তবে আমি অন্য প্রতিরূপ থেকে বাইনারি অনুলিপি করতাম।
  2. innodb_flush_log_at_trx_commit = 2: সম্পূর্ণ এসিডি মেনে চলার জন্য 1 এর মান প্রয়োজন হলেও 2 "এর মান সহ প্রতিটি কমিটের সময় লগ বাফারটি ফাইলটিতে লেখা হয়, তবে এতে ফ্লাশ টু ডিস্ক অপারেশন করা হয় না However তবে, ফ্লাশিং লগ ফাইল প্রতি সেকেন্ডে একবারেও স্থান নেয় যখন মান 2 হয় তবে নোট করুন যে প্রক্রিয়া শিডিয়ুলিংয়ের কারণে প্রতি সেকেন্ডে একবারে ফ্লাশিং প্রতি সেকেন্ডে 100% হওয়ার নিশ্চয়তা দেয় না। " (মাইএসকিউএল ডক্স থেকে উদ্ধৃতি)
  3. ব্যবহারের জন্য মাউন্ট বিকল্পগুলি আপডেট করুন data=writeback। মনে রাখবেন যে এটি আপনার মূল ফাইল সিস্টেম হলে আপনাকে কার্নেল কমান্ড লাইন বিকল্পটিও পাস করতে হবে। আমি কোডারওয়ালে এটিতে কয়েকটি পদক্ষেপ একসাথে রেখেছি
  4. বিভিন্ন মান পরীক্ষা innodb_flush_method। O_DIRECT কে কিছু কাজের চাপে পারফরম্যান্স উন্নত করতে দেখানো হয়েছে, তবে এটি আপনার পরিবেশে কাজ করবে তা দেওয়া হয়নি।
  5. SSDs এ আপগ্রেড করুন, যে ক্ষেত্রে আপনার কাছে বৃদ্ধি করতে চাইবেন innodb_io_capacityসেটিংস যেমন, এবং সুর innodb_adaptive_flushing, innodb_read_io_threads, innodb_write_io_threads, innodb_purge_threads, এবং অন্যান্য সম্ভাব্য সেটিংস।

3

এটি সম্ভবত আপনার I / O ব্যাকেন্ডে সমস্ত কিছু ভালভাবে মোকাবেলা করছে না quite আপনার ফাইল সিস্টেমটি ডেটা জার্নাল করছে না তা নিশ্চিত করা উচিত। আমি data=writeback,relatime,nobarrierপ্রথম তাত্ক্ষণিক ও নোংরা অপ্টিমাইজেশান হিসাবে আপনার ডাটাবেসের ডেটা পার্টিশনের জন্য পরামিতিগুলি ব্যবহার করার পরামর্শ দেব ।

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


তাহলে কীভাবে: ডেটা = রাইটব্যাক, রিলেটাইম, নোবারিয়ার এবং তারপরে সম্পূর্ণ মাইএসকিএল লগিং নিষ্ক্রিয় করবেন? আমি মনে করি এটি কি জিনিসগুলিকে অনেক গতি বাড়িয়ে দেবে?
Phyo আরকার লুইন

hdpram -i দেখায় যে আমি লেখার ক্যাচিং ব্যবহার করছি। এত হুম ??
ফায়ো আরকার লুইন

@ V3ss0n আপনি লেনদেনের ইঞ্জিনের জন্য লগিং অক্ষম করতে পারবেন না - এটি এটির কেন্দ্রস্থল। আপনি লেনদেনের লগটিকে ডিস্কের একটি পৃথক গোছায় স্থানান্তরিত করতে বেছে নিতে পারেন কারণ এটিতে আপনার মূল ডাটাবেসের ডেটা (এলোমেলোভাবে পড়া / লেখার) তুলনায় একেবারে আলাদা অ্যাক্সেস প্যাটার্ন (বেশিরভাগ রৈখিক লেখক) রয়েছে - এটি একটি সাধারণভাবে প্রস্তাবিত কনফিগারেশন। আপনার স্টোরেজ সেটআপ হিসাবে: আপনি একটি RAID নিয়ামক ব্যবহার করছেন না তবে কেবল ক্যাশে লেখার সাথে পৃথক ডিস্ক? এটি আপনার সিঙ্ক্রোনাস লেখনীর কোনওটিকেই সহায়তা করবে না কারণ তারা স্পষ্টভাবে ক্যাশে ফ্লাশের অনুরোধ নিয়ে আসে।
দ্য ওয়াববিট

কি nobarrierহিসাবে একই barrier=0?
নিক কোটারেল

@ নিককোটরেল হ্যাঁ, তারা একই রকম।
কটন

3

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

tune2fs -O "^has_journal" /dev/<drive>জেডিবি 2 প্রক্রিয়াটির কারণে আইওয়ের অপসারণটি হ্রাস করার সাথে সাথে জার্নালিংকে অক্ষম করা ছিল দ্রুততম সমাধান। তবে আপনার কাছে ব্যাটারি ব্যাকড ড্রাইভ না থাকলে এটি প্রস্তাবিত নয় কারণ আপনি ক্রাশ হওয়ার সময় ডেটা হারাবেন। doublewriteআপনি মাইএসকিউএল সক্ষম করে থাকলে InnoDB টেবিলগুলি নিরাপদ । .Frm, লগ ইত্যাদির মতো ফাইলগুলি নিরাপদ নয়। আমরা এই ফাইলগুলিকে অন্য ড্রাইভে স্থানান্তরিত করার চেষ্টা করেছি (বিশেষত বিন লগগুলি) তবে jdb2 IO অপেক্ষা এখনও স্থির হয়নি। সুতরাং এটি আমাদের খুব স্বাচ্ছন্দ্য দেয় না।

data=writeback,relatime,nobarrierপুরো পার্টিশনে জার্নালিংকে নিষ্ক্রিয় করার মতো লেখাগুলি লেখার / পাঠকে গতি বাড়িয়ে তুলতে সহায়তা করে নি। Ext4 এর জন্য আরও বিকল্পগুলি EXT4 ডকটিতে রয়েছে

আমাদের মামলার আসল অপরাধী ছিল sync_binlog। আমরা সেট করেছিলাম যেমনটি 1ছিল /etc/mysql/my.cnfএবং এটি পারফরম্যান্সকে হত্যা করছে

পারকোনা এটি এখানে বৈধতা দেয় । আমরা এটির ডিফল্ট এটি সেট করেছি 0এবং পারফরম্যান্সে 500% এরও বেশি আপ ছড়িয়ে পড়ে।


0

এই ডেটাটি sertোকানোর জন্য আপনি কোন ডাটাবেস ইঞ্জিন ব্যবহার করছেন?

যদি এটি মাইআইএসএএম হয়: এটি অবশ্যই কোনও লেখার সময় পুরো টেবিলটি লক করে রাখতে পারে, সুতরাং সাম্প্রতিক sertোকানো থ্রেডগুলি কোনও সিস্টেমকে মেরে ফেলবে, যতই শক্তিশালী হোক না কেন।

আপনি এই টেবিলগুলির জন্য InnoDB ব্যবহার করছেন তা নিশ্চিত করুন।


যেহেতু তিনি লেনদেন করছেন, ইঞ্জিনটি মাইআইএসএএম হবে না কারণ মাইআইএসএএম লেনদেন সমর্থন করে না।
দ্য ওয়াবিট

অর, ব্রেনফার্ট।
অ্যাডাপ্টার

আমি ইনোডাব, মাইএসকিএল ৫.৫ ডিফল্ট ইনোনডাব ব্যবহার করছি।
Phyo আরকার লুইন

0

এছাড়াও, সরাসরি মাইএসকিএলের সাথে সম্পর্কিত নয়, তবে আক্রমণাত্মক শক্তি পরিচালনার কারণে কিছু এইচডি-তে এক্সট 4 নিয়ে সমস্যা হয় ... যখন এটি ঘটে তখন কোনও স্পষ্ট কার্যকলাপ ছাড়াই মেশিনের লোড বৃদ্ধি পায়।

এটি অক্ষম করার চেষ্টা করুন। প্রথমে আপনার যে কোনও মান রয়েছে তা পরীক্ষা করুন (যদি আপনাকে এটি পুনরায় চালু না করে পুনরায় রাখার প্রয়োজন হয়) এবং তারপরে এটি অক্ষম করুন।

বর্তমান মান পরীক্ষা করুন:

    hdparm -B /dev/sda

এটি অক্ষম করুন

   hdparm -B 255 /dev/sda

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

যদি এটা সাহায্য করে, চেক /etc/default/hdparmবা /etc/hdparm.confআরো একটি স্থায়ী কনফিগ জন্য, বুট তে এটি সেটিং দ্বারা।

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