মাইএসকিউএল 5.1 ইনোডিবি কনফিগারেশন / 24 জিবি র‌্যাম - দ্বি-এক্সেওন লোড


10

আমি একটি ফেসবুক অ্যাপ চালাচ্ছি যা বর্তমানে 300 - 600 সমবর্তী ব্যবহারকারী (এবং বর্ধমান) রয়েছে। হার্ডওয়্যার বাড়ানোর জন্য প্রস্তুত হওয়ার জন্য আমি আমার আই 7/12 জিবি র‌্যাম / 2 এক্স 80 জিবি ইন্টেল এক্স 25 এসএসডি এর (ডেবিয়ান 5.0 / মাইএসকিএল 5.0 / 64 বিট) একটি দ্বি-xeon / 24 জিবি র‌্যাম / 2 এক্স 120 জিবি ইন্টেল 320 এসএসডি (উবুন্টু 10.10 / মাইএসকিএল 5.1 / 64bit)।

এখন আমি এই সমস্যার মুখোমুখি হয়েছি যে "ছোট বাক্স" এর চেয়ে পারফরম্যান্স খারাপ। উভয় সার্ভারে আমি কন্টেন্টটি পরিবেশন করতে nginx / php fcgi ব্যবহার করে আসছি gi

আমি কেবল ইনডোডাব ব্যবহার করছি, প্রায় 65% / 35% রিড / রাইট রয়েছে। 800 - 1000 কিউপিএসের চারপাশে তবে সমস্ত ক্যোয়ারীগুলি সহজ এবং 1 টির বেশি টেবিলের সাথে কখনই যোগ দেয় না। সমস্ত সূচক সেট করা আছে এবং কোনও স্বতন্ত্র ক্যোয়ারী ধীর লগ (> 2 এস) এ লগ হয় না। এই মুহুর্তে আমার কাছে প্রায় 400 মিমি ডেটা রয়েছে (সূচী সহ 1 জিবি প্রায়) এটি প্রতি মাসে দ্বিগুণ হওয়ার আশা করে।

আমি সবাইকে আদর করতাম যারা এটিকে মসৃণ করার জন্য আমাকে কী পরিবর্তন করতে হবে তার একটি ইঙ্গিত দিতে পারে।

আই 7 বাক্সে পুরানো কনফিগারেশনটি এটির মতো ছিল (মিশ্রিত মাইসাম / ইনোডাব), 800+ ব্যবহারকারী পর্যন্ত বেশ ভাল অভিনয় করেছিলেন।

পুরাতন my.cnf

   key_buffer              = 3000M
   max_allowed_packet      = 128M
   thread_stack            = 192K
   thread_cache_size       = 8
   max_connections        = 400
   table_cache            = 8000
   thread_concurrency     = 16
   query_cache_limit       = 8M
   query_cache_size        = 128M
   wait_timeout            = 10
   interactive_timeout     = 10
   connect_timeout         = 600
   low_priority_updates    = 1
   join_buffer_size        = 8M
   read_buffer_size        = 2M
   sort_buffer_size        = 3M
   myisam_sort_buffer_size = 32M
   read_rnd_buffer_size    = 4M
   innodb_buffer_pool_size = 3G
   innodb_log_buffer_size  = 8M

দ্বি-xeon বাক্সে নতুন কনফিগারেশনটি এর মতো (খাঁটি ইনডোডাব), 300+ ব্যবহারকারীদের সাথে উচ্চ লোড সৃষ্টি করে। প্রক্রিয়া তালিকার শীর্ষে বসে প্রায় 30 টি মাইএসকিএল প্রক্রিয়া রয়েছে।

ডিস্ক I / O:

    avg-cpu:  %user   %nice %system %iowait  %steal   %idle
              36.28    0.00    1.60    0.17    0.00   61.95

my.cnf

    key_buffer              = 64M
    max_allowed_packet      = 1M
    thread_stack            = 192K
    thread_cache_size       = 128
    max_connections        = 500
    table_cache            = 512
    #thread_concurrency     = 10
    sort_buffer_size        = 256K
    read_buffer_size        = 256K
    read_rnd_buffer_size    = 256K
    tmp_table_size          = 32M
    max_heap_table_size     = 32M
    query_cache_limit       = 1M
    query_cache_size        = 128M
    query_cache_type        = 1

    innodb_file_per_table = 1
    innodb_data_file_path = ibdata1:1000M:autoextend
    innodb_buffer_pool_size = 16384M
    innodb_additional_mem_pool_size = 8M
    innodb_flush_log_at_trx_commit = 1
    innodb_support_xa = 0
    innodb_lock_wait_timeout = 50
    innodb_flush_method=O_DIRECT
    innodb_log_files_in_group = 2
    innodb_log_file_size = 128M
    innodb_log_buffer_size = 8M
    innodb_thread_concurrency = 12

হুঁ, skip-name-resolveঅক্ষম এবং এটি সক্ষম করা যায়?
উইক্কেন

উত্তর:


7

স্ট্যাকএক্সচেনেজে কিছু পোস্ট লিখেছি

  1. ইনোডিবি এবং মাইআইএসএএম এর জন্য মাইএসকিউএল টিউন করছে
  2. কীভাবে ইনোডিবি ডিস্কস্পেসকে নিয়ন্ত্রণে রাখবেন
  3. মাইএসকিউএল ডিস্কস্পেস ম্যান্যাগামেন্টের আরেকটি দৃষ্টিভঙ্গি
  4. InnoDB অপ্টিমাইজেশান উপর দৃষ্টিভঙ্গি
  5. ইনোডিবি ফাইন টিউনিং

আপনার প্রয়োজনীয় গাইডেন্সের জন্য দয়া করে এগুলি পড়ুন।

এখন, আরও চাপের বিষয়গুলির জন্য: আপনি উল্লেখ করেছেন যে আপনার কাছে 400MB ডেটা, ইনডেক্স সহ 1GB রয়েছে। এই ধরণের আমাকে ভয় দেখায় যে আপনার সূচিগুলি ডেটার চেয়ে 50% বড়। তবে, যেহেতু আপনার সমস্ত ডেটা ইনোডিবি এবং আপনি বর্তমান ক্যোয়ারী পারফরম্যান্সে সন্তুষ্ট, আপনার সেটিংস পর্যাপ্ত পরিমাণের চেয়ে বেশি, এস্পসালিভাবে ইনডোড_বফার_পুল_সাইজের 16384 এমবি। এটি 16 জিবি। আপনি সব সেখানে প্রস্তুত। কিন্তু অপেক্ষা করো !!! আপনার ইনোডাব_লগ_ফাইল_সাইজটি 128 এম? 16 গিগাবাইটের বাফার পুলের সাহায্যে খুব ছোট উপায়। আপনার আইবি_লগফাইল ফাইলগুলিকে পুনরায় আকার দেওয়া উচিত (আনোনডব_লগ_ফाइल_সাইজ 2047M তে সেট করুন)।

আপনি প্রতি-থ্রেড ভিত্তিতে লোড অনুভব করতে পারেন। আপনার সংযোগের বাফারগুলি সেট করার চেষ্টা করুন (join_buffer_size, সাজানো_ বাফার_সাইজ, read_buffer_size, read_rnd_buffer_size)

আমার কাছ থেকে: মাইএসকিউএল কেন বলে যে আমি স্মৃতি থেকে বেঁচে আছি?

@ ডিস্টেস্ট থেকে: আপনি কীভাবে মাইএসকিএল সর্বাধিক সংযোগের ভেরিয়েবল গণনা করবেন?

একবার চেষ্টা করে দেখো !!!


এটি সমস্ত কিছু সূচী স্থাপনের বিষয়ে ছিল ... এখন আমার কাছে কিছু কলাম রয়েছে যা অন্যান্য সংমিশ্রণগুলিতে দ্বিগুণ সূচীযুক্ত ... এবং আমার কাছে এখন 35 জিবি ডেটা এবং 10'000qps ... এবং এটি রেশমের মতো মসৃণ কাজ করে।
কিলিয়ান

0
  • আপনি মাইআইএসএএম থেকে কিছু টেবিলকে ইনোডিবিতে রূপান্তর করেছেন?
    যদি তা হয় তবে http://mysql.rjweb.org/doc.php/myisam2innodb এ সূক্ষ্ম কর্মক্ষমতা উন্নতি / অবনতি পরীক্ষা করুন
  • innodb_flush_log_at_trx_commit = 1
    - প্রতিটি লেনদেনের পরে লগে একটি লিখিত কারণ । ব্যবহার বিবেচনা করুন = 2
  • max_connections- SHOW GLOBAL STATUS LIKE 'max_used_connections'
    - এটি আপনাকে জানাবে যে প্রারম্ভকাল থেকে আপনার কয়টি প্রয়োজন needed
  • ক্যোয়ারী ক্যাশে:

    query_cache_size        = 128M
    query_cache_type        = 1

    এগুলি ব্যথা হতে পারে। উপরে, বলুন, 50Mকিউসি রক্ষণাবেক্ষণে খুব বেশি সময় ব্যয় করে। এটি থাকার অপচয়ও ONহতে পারে। কি SHOW GLOBAL STATUS LIKE 'Qc%'কার্যকারিতা পরীক্ষা করার জন্য।

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