মাইএসকিউএলকে একাধিক কোর ব্যবহার করা সম্ভব?


131

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

সেটআপ

সার্ভারগুলি একটি ওএলএপি / ডেটাওয়্যারহাউস (ডিডাব্লু) টাইপ লোডের সাথে বেশ মোটা:

  • প্রাথমিক: 96 গিগাবাইট র‌্যাম, 8 কোর + একক রেড 10 অ্যারে
  • পরীক্ষা: 32 কোরের সাথে 32 জিবি র‌্যাম
  • বৃহত্তম ডিবি 540 জিবি, মোট প্রায় 1.1TB এবং বেশিরভাগ InnoDB টেবিল
  • সোলারিস 10 ইনটেল -64
  • মাইএসকিউএল 5.5.x

দ্রষ্টব্য: বৃহত্তম ডিবি হ'ল ওয়ালটিপি ডিআর সার্ভারের প্রতিলিপিযুক্ত এবং এটি থেকে ডিডাব্লু লোড হয়। এটি একটি সম্পূর্ণ ডিডাব্লু নয়: মাত্র 6 মাস থেকে 6 সপ্তাহ শেষ তাই এটি ওএলটিপি ডিবির চেয়ে ছোট।

একটি পরীক্ষা সার্ভারে পর্যবেক্ষণ

  • 3 পৃথক সংযোগ
  • প্রত্যেকের একসাথে (এবং আলাদা) থাকে ALTER TABLE...DROP KEY...ADD INDEX
  • 3 টি সারণিতে একটি 2.5, 3.8 এবং 4.5 মিলিয়ন সারি রয়েছে
  • সিপিইউ ব্যবহার 25% (একটি কোর সর্বাধিক আউট) এবং আরও বেশি হয় না
  • 3 টি বিকল্প 12-25 মিনিট সময় নেয় (সবচেয়ে ছোটতে একক লাগে 4.5)

প্রশ্নাবলি

  1. একাধিক কোর ব্যবহারের অনুমতি দেওয়ার জন্য কোন সেটিং বা প্যাচ প্রয়োজন?
    যে, মাইএসকিউএল সমস্ত কোর উপলব্ধ উপলব্ধ না কেন? (অন্যান্য আরডিবিএমএসের মতো)
  2. এটি কি প্রতিরূপের ফলাফল?

অন্যান্য নোট

  • আমি একটি আরডিবিএমএস "থ্রেড" এবং একটি ওএস "থ্রেড" এর মধ্যে পার্থক্য বুঝতে পারি
  • আমি কোনও ধরণের সমান্তরালতা সম্পর্কে জিজ্ঞাসা করছি না
  • InnoDB এবং থ্রেডগুলির জন্য কিছু সিস্টেম ভেরিয়েবল উপ-অনুকূল
    (দ্রুত জয়ের জন্য খুঁজছেন)
  • স্বল্প মেয়াদী, আমি ডিস্কের বিন্যাসটি পরিবর্তন করতে অক্ষম
  • প্রয়োজনে ওএস টুইট করা যেতে পারে
  • ক্ষুদ্রতম টেবিলের একটি একক অল্টার টেবিলে 4.5 মিনিট সময় লাগে (হতভম্ব IMO)

সম্পাদনা 1

  • উভয় উপর ইন্নাডব_থ্রেড_কেনচার্সি সেট করা আছে 8 হ্যাঁ, এটি ভুল তবে মাইএসকিউএল একাধিক কোর ব্যবহার করবে না
  • ইনোডাব_বফার_পুল_সাইজটি প্রাথমিকভাবে ৮০ গিগাবাইট, একটি পরীক্ষায় 10 গিগাবাইট (অন্য একটি উদাহরণ বন্ধ হয়ে আছে)। এটি আপাতত ঠিক আছে।
  • ইনোডব_ফায়াল_পার_সামগ্রী = চালু

সম্পাদনা 2

  • ইন্নাডব_ফ্লুশ_লগ_এটি_আরটিএক্স_কমিট = 2
  • ইনোডাব_উইজ_সিস_মলোক = চালু
  • ইনোডাব_ফ্লুশ_মোথারটি O_DIRECT হওয়া উচিত (তবে ভ্যারিয়েবলগুলি এটি দেখায় না)
  • innodb_doublewrite = বন্ধ
  • ফাইল সিস্টেম = জেডএফএস (এবং আমার সিসাডমিন এটি খুঁজে পেয়েছে: http://blogs.oracle.com/realneel/entry/mysql_innodb_zfs_best_practices )

পরীক্ষা করার জন্য

  • ইনোডাব_ফ্লুশ_মোথার কখন O_DIRECT হওয়া উচিত তা দেখাচ্ছে না
  • RolandoMySQLDBA এর সেটিংস অনুসরণ করবে

আমি কোনও গুরুত্বপূর্ণ কিছু মিস করেছি কিনা তা আমাকে জানান

চিয়ার্স

হালনাগাদ

রোল্যান্ডোমাইএসকিউএলডিবিএর উত্তরে ইনোডোবি_ফ্লুশ_মোথোড + 3 এক্স থ্রেড সেটিংস পরিবর্তন করা হয়েছে
ফলাফল:> পরীক্ষাগুলির জন্য 1 কোর ব্যবহৃত হয়েছে = ইতিবাচক ফলাফল


@ পরীক্ষা: ইনোডাব_ফিল_পিটার_ টেবিল = চালু। ইঞ্জিন ইনোডব স্ট্যাটাস OW জি কেবল কমান্ড লাইন?
gbn

@ টেস্ট: এসকিউএলজিতে আমি কোনও আউটপুট পাইনি এবং কাউকে কমান্ড লাইন থেকে এটি চালাতে বলতে হবে
gbn

1
webyog.com/forums/index.php?showtopic=1290 এ ছাড়া কাজ করা উচিত \G। এছাড়াও, আমি মনে করি SHOW INNODB STATUSপক্ষে অবচিত SHOW ENGINE INNODB STATUSমধ্যে 5.5 (আমি কম্যান্ড-লাইন প্রাক্তন চলমান কোনো ত্রুটির সম্মুখীন হয়েছেন।
ডেরেক ডৌনী

1
যদিও অন্য সমস্ত উত্তরগুলি ভাল, আপনি যেহেতু একজন বিকাশকারী, তবুও আমি শারড ক্যোয়ারী কোড. google.com/p/shard-query এ একবার দেখার পরামর্শ দিচ্ছি এটি আপনাকে বিশেষত একটি ডেটাওয়ার হাউস পরিবেশে সহায়তা করতে পারে।
জোনাথন

ধন্যবাদ, এটি একটি বিকল্প যা আমরা ভেবেছিলাম। আমি = আমি ডিবিএর ভূমিকাও নিচ্ছি।
জিবিএন

উত্তর:


123

আমি প্রকৃতপক্ষে ইনকোডব_থ্রেড_কনকোর্সিটি ২০১১ সালের মে মাসে ফিরে পেরকোনা লাইভ এনওয়াইসি সম্মেলনে একটি মাইএসকিউএল বিশেষজ্ঞের সাথে আলোচনা করেছি

আমি অবাক করার মতো কিছু শিখেছি: ডকুমেন্টেশন সত্ত্বেও innodb_thread_concurrency0 (অসীম সম্মতি) এ রেখে যাওয়া ভাল । এইভাবে, InnoDB innodb_concurrency_ticketsপ্রদত্ত মাইএসকিউএল ইনস্ট্যান্স সেটআপের জন্য খোলার সেরা সংখ্যার সিদ্ধান্ত নিয়েছে ।

একবার আপনি innodb_thread_concurrency0 তে সেট হয়ে গেলে আপনি সেট করতে পারবেন innodb_read_io_threadsএবং innodb_write_io_threads(মাইএসকিউএল 5.1.38 উভয় থেকেই) সর্বোচ্চ 64 এর মান নির্ধারণ করতে পারেন This এটি আরও কোরে জড়িত হওয়া উচিত।


এটি চেষ্টা করবে। আমি যেভাবে যাই পড়েছি তার উপর ভিত্তি করে 0 তে ইনোডব_থ্রেড_কেনকিન્સી সেট করতে যাচ্ছিলাম
gbn

9
ইনোডাব_থ্রেড_কোনক্রেন্সি = 0
র্যান্ডমেক্স

3
@gbn - ডিবিএ.এসইতে # 1 লোকের কাছ থেকে আগত, আপনাকে ধন্যবাদ একটি আত্মবিশ্বাস বৃদ্ধা এবং খুব প্রশংসিত আপনাকে ধন্যবাদ এবং আপনি স্বাগত !!!
রোল্যান্ডোমাইএসকিউএলডিবিএ

গ্লোবাল ইন্নাডব_ড্রেড_ও_থ্রেডস সেট করুন = 8 ত্রুটি কোড: 1238. পরিবর্তনশীল 'ইনোডাব_ড্রেড_ও_থ্রেডস' কেবল পঠনযোগ্য পরিবর্তনশীল
wgq3g23g

2
@ wgq3g23g আপনি আরডিএস করছেন, এটি ডিবি প্যারামিটার গ্রুপে পরিবর্তন করুন এবং পুনরায় বুট করুন। আপনি যদি ইসি 2 বা বেয়ার মেটাল করছেন তবে সেই বিকল্পটি যুক্ত করুন my.cnfএবং মাইএসকিএলডি পুনরায় চালু করুন। অনুগ্রহ.
রোল্যান্ডোমাইএসকিউএলডিবিএ

29

মাইএসকিউএল স্বয়ংক্রিয়ভাবে একাধিক কোর ব্যবহার করবে, সুতরাং আপনার 25% এর বোঝা কাকতালীয় 1 বা সোলারিসের একটি সম্ভাব্য ভুল কনফিগারেশন। আমি কীভাবে সোলারিস টিউন করব তা জানার ভান করব না, তবে এখানে একটি নিবন্ধ যা কিছু সোলারিস-নির্দিষ্ট টিউনিং তথ্যের উপরে যায় ।

InnoDB টিউনিং পৃষ্ঠাগুলি মাইএসকিউএল 5.5 তে একটি ওভারহোল দেওয়া হয়েছে, সুতরাং সেখানে কিছু ভাল তথ্য রয়েছে। থেকে InnoDB ডিস্ক আই টিপস :

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

পরীক্ষা করার জন্য আরও কিছু জিনিস:

  • ইনোডাব_ফ্লুশ_মোথারকে O_DIRECTস্যুইচ করা টেস্টের জন্য উপযুক্ত worth এটি যদি সহায়তা করে তবে আপনার forcedirectioবিকল্পের সাহায্যে ফাইল-সিস্টেম মাউন্ট করার প্রয়োজন হতে পারে

  • ইনোডাব_ফ্লুশ_লগ_্যাট_আরটিএক্স_কমিটটি 1 থেকে 0 থেকে পরিবর্তন করুন (যদি আপনি মাইএসকিএল ক্র্যাশে শেষ দ্বিতীয়টি হারাতে আপত্তি করেন না) বা 2 (যদি আপনি ওএস ক্র্যাশে সর্বশেষ দ্বিতীয়টি হারাতে আপত্তি করেন না)।

  • ইনোডাব_ ইউজ_সিস_মালোকের মান পরীক্ষা করে দেখুন । এই নিবন্ধে চলক সম্পর্কিত আরও তথ্য রয়েছে ।

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

    তবে ভেরিয়েবলটি চালু করার অর্থ কী তা সম্পর্কে বিভাগের শেষে কিছু সাবধানতা রয়েছে (এটি 5.5-এ ডিফল্টরূপে চালু আছে)।

    নোট করুন যে যখন InnoDB মেমরি বরাদ্দকারী অক্ষম হয়ে যায়, তখন InnoDB প্যারামিটার এর ইনডোডবি_ডাডিশনাল_মেম_পুল_সাইজের মানটিকে উপেক্ষা করবে।

  • এটি সম্ভব যে প্রতিরূপ কিছু সমস্যা তৈরি করছে। আমি বুঝতে পারি আপনি সমান্তরালে আগ্রহী নন, তবে এই ওয়ার্কলগের বর্ণনা থেকে :

    বর্তমানে, প্রতিলিপি মাল্টি-কোর মেশিনগুলিতে ভাল স্কেল করে না। একক দাস থ্রেড একের পর এক প্রতিলিপি ইভেন্টগুলি চালায় এবং পৃথক মাস্টার সার্ভারের সিপিইউ দ্বারা পরিবেশন করা একযোগে একাধিক ক্লায়েন্ট সংযোগ দ্বারা উত্পাদিত লোডের সাথে লড়াই করতে পারে না।

শেষ পর্যন্ত, ডিসো-ভিত্তিক ক্রিয়াকলাপগুলির কারণে ডানাওয়ারহাউজিংয়ের জন্য ইনোডিবি সেরা ইঞ্জিন নাও হতে পারে। আপনি ডেটাওয়ারহাউস টেবিল (গুলি) কে সংকুচিত হওয়া মাইআইএসএএম হিসাবে বিবেচনা করতে পারেন

1 কাকতালীয়ভাবে, আমার অর্থ একটি বাধা আছে যা আপনার বোঝা 25% এর উপরে বাড়তে বাধা দেয়, তবে অগত্যা বাধ্যতামূলক একক-কোর সমস্যা নয়।


ধন্যবাদ। সেটিংস বিভাগটি প্রশ্নটিতে যুক্ত হয়েছে। সমস্যাটি একক কোর ব্যবহার করে বেশ কয়েকটি নিবিড় প্রশ্ন: মেমরি বা থ্রেড সেটিংস এখনও নয় yet আরও থ্রেড এখনও একই
কোরটিতে চলছে

@gbn আপডেটের জন্য ধন্যবাদ, এখনও খুঁজছেন। আমি ভাবছিলাম এটি একটি 'কাকতালীয় ঘটনা'। আমি ভাবছি এটি যদি কেবল সোলারিস-ইস্যু হয় ( ডেভেলপারস.সুন. com/সোলারিস / পার্টিকেলস / মাইসকিএল_পারফ_টুন এইচটিএমএল ) তবে সে সিস্টেম সম্পর্কে খুব বেশি কিছু জানেন না।
ডেরেক ডাউনি

1
@ টেস্ট: আমি সেই নিবন্ধটি সোলারিস অ্যাডমিনের কাছে
ছড়িয়ে দেব

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

15

একটি একক সংযোগ কেবল একটি একক কোর ব্যবহার করবে। (ঠিক আছে, InnoDB কিছু আই / ও প্রসেসিংয়ের জন্য অন্যান্য থ্রেড, অতএব কোরগুলি ব্যবহার করে, তবে এটি তাত্পর্যপূর্ণ নয়))

আপনার কাছে 3 টি বিকল্প রয়েছে, সুতরাং আপনি 3 টির বেশি মূল্যের ব্যবহার করছেন না।

হায়, পার্টিশনও একাধিক কোর ব্যবহার করে না।

সম্প্রতি অবধি, একাধিক সংযোগগুলি 4-8 কোরের পরে সর্বাধিক আউট হবে। পারকোনার এক্সট্রাডব (মারিয়াডিবিতে অন্তর্ভুক্ত) একাধিক কোরের আরও ভাল ব্যবহার করে তবে প্রতি থ্রেডে কেবলমাত্র একটি। এগুলি প্রায় 32 টি কোরে সর্বোচ্চ।


(2015-এ আপডেট করুন :) প্রায় 48 টি কোরে 5.6 ম্যাক্স সহ একাধিক সংযোগ। 5.7 আরও ভাল হতে প্রতিশ্রুতি। (তাই ওরাকল বেঞ্চমার্ক বলেছেন।) তবে এখনও একটি সংযোগের জন্য একাধিক কোর ব্যবহার করা হয়নি no
রিক জেমস

আপডেট (ওরাকলের ওপেন ওয়ার্ল্ডে যাওয়ার পরে): নতুন সংস্করণ 8.x এর কোনও সমান্তরালতা থাকবে না।
রিক জেমস

9

আইএমএইচও এবং বর্ণিত ব্যবহারের ক্ষেত্রে আপনি কখনই একাধিক কোর ব্যবহার করবেন না। কারণটি হল আপনার কাজের চাপ আইও বাউন্ড, সিপিইউ বাউন্ড নয়। যেহেতু আপনার 3 সংযোগগুলি একটি নতুন সূচক তৈরি করছে, তাদের প্রত্যেককেই ডিস্ক থেকে পুরো টেবিলটি পড়তে হবে: সূচিগুলি গণনা না করে এটি সময় নিচ্ছে।


8

বিবেচনা করুন যে আপনার বাধাটি আপনার ফাইল সিস্টেমের আইও পারফরম্যান্স হতে পারে।

@ রোল্যান্ডোমাইএসকিউএলডিবিএর প্রস্তাবিত সেটিংস ছাড়াও আমি আমার মাইএসকিএল ডেটা ডিরেক্টরি ( আমার ক্ষেত্রে, মাউন্ট করা ) পার্টিশনের জন্য noatimeমাউন্ট সেটিংসও সেট করেছিলাম ।/etc/fstab/data01/mysql/dev/sdb1/data01

ডিফল্টরূপে লিনাক্স প্রতিটি ডিস্ক পড়ার বা লেখার জন্য অ্যাক্সেসের সময়টি রেকর্ড করে যা আইওর কার্যক্ষমতাকে নেতিবাচকভাবে প্রভাবিত করে, বিশেষত ডেটাবেসগুলির মতো উচ্চ আইও অ্যাপ্লিকেশনগুলির জন্য। এর অর্থ হ'ল এমনকি কোনও ফাইল থেকে ডেটা পঠনও ডিস্কে একটি লেখাকে ট্রিগার করে ... ওয়াট!

এটি অক্ষম করতে, পছন্দসই মাউন্ট পয়েন্টের জন্য noatimeমাউন্ট বিকল্পটি /etc/fstabনিম্নরূপে যুক্ত করুন (উদাহরণস্বরূপ আমার ক্ষেত্রে):

/dev/sdb1  /data01  ext4  defaults,noatime  0  2

তারপরে পার্টিশনটি পুনরায় মাউন্ট করুন:

mount -o,remount /data01

এটি সেই পার্টিশনটি ব্যবহার করে অ্যাপ্লিকেশনগুলির পঠন / লেখার কর্মক্ষমতা বাড়ানো উচিত। কিন্তু ... আপনার সমস্ত ডেটা মেমরিতে ধারণ করে কিছুই মারছে না।

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