আমার এক উত্পাদন পরিবেশে, আমাদের দুটি রেডহ্যাট ক্লাস্টারে চলছে, যার একটি উত্পাদন ক্লাস্টারের সাথে যুক্ত।
আমাদের ২৪ জি ইনোডিবি বাফার পুলের সাথে ইনজিন্ট ১ এবং ১২ জি দখল দখল করে ১২২ জি মেইন মেমোরি রয়েছে, যা রেডহ্যাট ক্লাস্টারের সাথে সম্পর্কিত নয়। ডেটা এবং লেনদেন উভয় লগই একটি এক্স 3 ফাইল সিস্টেমের সাথে এলভিএম ডিস্ক বিভাজনে অবস্থিত।
একটি পারফরম্যান্স বাড়াতে এবং আরও উন্নত করার জন্য আমি / ও থ্রুপুট থেকে পরিবর্তন innodb_flush_method
করার সিদ্ধান্ত নিয়েছি O_DIRECT
।
মাইএসকিউএল ডকুমেন্টেশনের প্রসঙ্গে:
কোথায় InnoDB ডেটা এবং লগ ফাইল একটি সান অবস্থিত হয়, এটা পাওয়া গেছে যে সেটিং
innodb_flush_method
করারO_DIRECT
সহজ কর্মক্ষমতা জমিতে করতেSELECT
তিনটি একটি গুণক দ্বারা বিবৃতি।
উচ্চ কার্যকারিতা মাইএসকিউএল ভের 2 এবং 3 উল্লেখ করে এটিতে বর্ণিত হয়েছে যে InnoDB বিকাশকারীরা ব্যাগগুলি খুঁজে পেয়েছিলেন innodb_flush_method=O_DSYNC
। O_SYNC
এবং O_DSYNC
এর মতো fsync()
এবং fdatasync()
: O_SYNC
উভয় ডেটা এবং মেটাডেটা O_DSYNC
সিঙ্ক করে , যেখানে কেবলমাত্র ডেটা সিঙ্ক করে।
যদি সেগুলি কোনও পরামর্শ ছাড়াই অনেকগুলি ব্যাখ্যার মতো মনে হয়, তবে পরামর্শটি এখানে দেওয়া হয়েছে:
আপনি যদি ইউনিক্স-এর মতো অপারেটিং সিস্টেম ব্যবহার করেন এবং আপনার রেড কন্ট্রোলারের ব্যাটারি-ব্যাকযুক্ত রেকিচি থাকে, আমরা আপনাকে সুপারিশ করছি যে আপনি ব্যবহার করুন
O_DIRECT
। যদি তা না হয় তবেO_DIRECT
আপনার অ্যাপ্লিকেশনটির উপর নির্ভর করে ডিফল্ট বা সম্ভবত সেরা পছন্দ হবে।
গুগল করে, আমি এই বেঞ্চমার্ক রিপোর্ট পেয়েছি : O_DSYNC
বনাম উপর onO_DIRECT
বেঞ্চ মার্ক রিপোর্ট: =================== 1 বি রো কমপ্লেক্স লেনদেন পরীক্ষা, threads৪ টি থ্রেড * সান ও_ডিআরসিটি: অনুরোধগুলি পড়ুন / লেখুন: 31560140 (প্রতি সেকেন্ডে 8766.61) * সান ও_ডিএসইএনসি: পড়ার / লেখার অনুরোধগুলি: 5179457 (প্রতি সেকেন্ডে 1438.52) * সান এফড্যাটাসেন্স: পড়ার / লেখার অনুরোধগুলি: 9445774 (সেকেন্ডে 2623.66) * স্থানীয়-ডিস্ক O_DIRECT: পড়ুন / লেখার অনুরোধগুলি: 3258595 (সেকেন্ডে 905.06) * স্থানীয়-ডিস্ক ও_ডিএসওয়াইএনসি: পড়ার / লেখার অনুরোধগুলি: 3494632 (প্রতি সেকেন্ডে 970.65) * লোকাল-ডিস্ক fdatasync: পড়ুন / লেখার অনুরোধগুলি: 4223757 (1173.04 প্রতি সেকেন্ডে)
তবে O_DIRECT
ওএস স্তরের ক্যাশে অক্ষম করে, যেখানে ডাবল ক্যাচিং অক্ষম করা যায় যা কিছু ভাল I / O থ্রুটপুট দেখায়।
এটা দিয়ে যেতে ভাল হয় O_DIRECT
বদলে O_DSYNC
? এই দুটি বিকল্প কিছু বিভ্রান্তিকর। কোন বিকল্পটি ডেটাতে কোনও প্রভাব ছাড়াই পারফরম্যান্সে আরও ভাল আই / ও থ্রুপুট এবং বর্ধন প্রদর্শন করতে পারে, বিশেষত উত্পাদনে পড়ে / লেখেন? আপনার ব্যক্তিগত অভিজ্ঞতার উপর ভিত্তি করে আরও ভাল পরামর্শ?
আমি পোস্টে রোল্যান্ডো আপডেট দেখতে পেলাম :
এখনও এই দুটি পরামিতি নিয়ে সামান্য বিভ্রান্তি রয়েছে। যেখানে আমি বেশিরভাগ প্রোডাকশন কনফিগার টেমপ্লেটগুলি ব্যবহার করে দেখতে পেলাম
O_DIRECT
, সেখানে সুপারিশ করার কোনও অংশ আমি দেখিনিO_DSYNC
।
পদ্ধতি
- মাইএসকিউএল 5.1.51-এন্টারপ্রাইজ-জিপিএল-প্রো-লগ
- Red Hat Enterprise Linux সার্ভার 5.5 প্রকাশ করে
- রাইড কন্ট্রোলারের সাথে ডিলল ডিআরএসি ব্যাটারি লেখার পিছনে ক্যাশে 512 এমবি রয়েছে
- ব্যাটারি ব্যাক-আপ ইউনিট (বিবিইউ) সহ ডেল পিইআরসি নিয়ন্ত্রণকারী H700।
অতিরিক্ত তথ্য
mysql> 'innodb_thread_concurrency' এর মত চলক দেখান; + + --------------------------- + + ------- + + | পরিবর্তনশীল_নাম | মান | + + --------------------------- + + ------- + + | ইনোডব_থ্রেড_কেনচার্সি | 96 | + + --------------------------- + + ------- + + 1 সারি সেট (0.00 সেকেন্ড) mysql> 'ইনোডাব_ড্রেড_আইও_থ্রেডস' এর মত চলক দেখান; খালি সেট (0.00 সেকেন্ড) mysql> 'ইনোডাব_রাইট_আইও_থ্রেডস' এর মতো ভেরিয়েবলগুলি দেখান; খালি সেট (0.00 সেকেন্ড)
আমরা ডিফল্ট প্লাগইন ব্যবহার করছি, সুতরাং আমি InnoDB স্থিতি থেকে তথ্য পোস্ট করেছি:
mysql> নির্বাচন করুন * প্লাগইন থেকে যেখানে প্লাগইনকে '% ইন্নাডব%' এবং প্লাগইনওয়াইপিকে 'স্টোরেজ ইঞ্জিন' \ জি পছন্দ হয় *************************** 1. সারি ******************** ******* PLUGIN_NAME: InnoDB প্লাগজিভারভিশন: 1.0 প্লাগজিস্ট্যাটাস: অ্যাক্টিভ প্লাগিন_ওয়াইপি: স্টোর ইঞ্জিন PLUGIN_TYPE_VERSION: 50151.0 প্লাগজিটলিবারি: শূন্য PLUGIN_LIBRARY_VERSION: NULL প্লাগজিএথথর: ইনোব্যাস ওওয়াই প্লাগজিডেসিফিকেশন: লেনদেন, সারি-স্তরের লকিং এবং বিদেশী কীগুলি সমর্থন করে PLUGIN_LICENSE: জিপিএল 1 সারি সেট (0.00 সেকেন্ড)