মেমরিতে ক্যাশে মাইএসকিউএল ডাটাবেস


11

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

আমি শীর্ষস্থানীয় প্রক্রিয়াগুলি পরীক্ষা করে দেখেছি এটি উচ্চ লোড বা কোনও কিছুর সাথে সম্পর্কিত নয়। এটি আইওপিএসের সাথেও সম্পর্কিত নয় কারণ আমি এইচডিডি 7.2 কে আরপিএম ড্রাইভ পরীক্ষা করেছি এবং এটি এখন ইন্টেল 320 এসএসডি ড্রাইভের সাথে পরীক্ষার ক্ষেত্রেও একই সমস্যা দিয়েছে, তাই আমি এটি উচ্চতর প্রশ্নের সম্পর্কেও ভাবি না।

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

আমার কাছে 16 জিবি র‌্যাম এবং আই 5-2400 4 কোর @ 3.1 গিগাহার্জ রয়েছে। ওএস সেন্টোস 5.7

top - 07:23:57 up 9 days, 12:15, 0 users, load average: 0.09, 0.04, 0.05
Tasks: 162 total, 1 running, 161 sleeping, 0 stopped, 0 zombie
Cpu(s): 8.2%us, 1.0%sy, 0.0%ni, 90.7%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Mem: 16367532k total, 3641628k used, 12725904k free, 612140k buffers
Swap: 1046520k total, 0k used, 1046520k free, 1538896k cached

উত্তর:


10

আমি যদি আপনি থাকতাম তবে আমি সমস্ত ডেটা ইনোডিবিতে স্যুইচ করতাম। টেবিল লকিং / সারি লকিং দীর্ঘকাল ধরেই অনেকে আলোচনা করেছেন। আমি সর্বদা InnoDB হাত নীচে চয়ন করব। তবে ইনোডিবি ... ক্যাচিং চয়ন করার আরও একটি গভীর কারণ রয়েছে

যদিও বেশিরভাগ লোক গর্ব করে যে মাইআইএসএএম পড়ার পক্ষে দ্রুত, তবে বেশিরভাগ লোক ভুলে যায় যে মাইআইএসএএম-র অনেকগুলি ক্যাশে, যাকে কী ক্যাশে বলা হয় (কী_বফার_সাইজ দ্বারা সেট করা হয়), কেবলমাত্র .MYI ফাইল থেকে সূচী পৃষ্ঠাগুলি ক্যাশে করে। এটি ডেটা পৃষ্ঠাগুলি কখনই ক্যাশে করে না। 32-বিট সিস্টেমে এটির অফিশিয়াল সর্বাধিক 4 জিবি রয়েছে। 8 গিগাবাইট 64-বিটের জন্য সেরা সর্বাধিক।

InnoDB বাফার পুল ডেটা এবং সূচী পৃষ্ঠাগুলি ক্যাশে করে। আপনার যে সার্ভারটি রয়েছে তার উপর নির্ভর করে আপনি র‌্যামে পুরো ডেটাসেট পর্যন্ত ক্যাশে রাখতে পারেন। আপনি 80% র‌্যাম এবং 10% ডিবি কনেনিজিশনের জন্য ইনোডিবি টিউন করতে পারেন এবং ওএসের জন্য 10% রেখে যেতে পারেন। এটি বিভিন্ন অপারেটিং সিস্টেমের ক্ষেত্রেও সত্য

আমি ড্রপাল গ্রাহকদের জন্য দুর্দান্ত সাফল্যের সাথে এই জিনিসগুলি সুপারিশ করেছিএটি ঠিক ওয়ার্ডপ্রেসের ক্ষেত্রেও প্রযোজ্য । আমি ওয়ার্ডপ্রেস সহ ক্লায়েন্টদের জন্য ডিবি সহায়তা সরবরাহ করেছি। একই উন্নতি।

আপনি InnoDB এর জন্য মেমরিটিকে আরও কার্যকরভাবে কনফিগার করতে পারেন যে আপনি আরও মাইআইএসএএম করতে পারেন can আপনার পারফরম্যান্সের প্রয়োজন অনুসারে সর্বদা InnoDB টুইট করার উপায় রয়েছে । আপনার ডেটা বাড়ার সাথে সাথে এটি শেষ পর্যন্ত একটি প্রয়োজনীয়তায় পরিণত হবে

আপডেট করুন 2011-11-21 11:44 EST

যদি আপনার সম্পূর্ণ ডেটাসেটটি যথেষ্ট ছোট হয়, আপনি মাইএসকিএল শুরু হওয়ার পরে ডানদিকে থাকা প্রতিটি টেবিলের উপর আপনি একটি নির্বাচন প্রশ্ন জিজ্ঞাসা করতে পারেন।

InnoDB এবং / অথবা MyISAM- র সমস্ত সারণীর জন্য, এই কোয়েরিটি চালান:

SELECT DISTINCT
    CONCAT('SELECT ',ndxcollist,' FROM ',
    db,'.',tb,' ORDER BY ',ndxcollist,';') SelectQueryToLoadCache
FROM (
    SELECT
        engine,table_schema db,table_name tb,index_name,
        GROUP_CONCAT(column_name ORDER BY seq_in_index) ndxcollist
    FROM (
        SELECT
            B.engine,A.table_schema,A.table_name,
            A.index_name,A.column_name,A.seq_in_index
        FROM
            information_schema.statistics A INNER JOIN
            (SELECT engine,table_schema,table_name
            FROM information_schema.tables
            WHERE engine IN ('InnoDB','MyISAM')) B
            USING (table_schema,table_name)
        WHERE
            B.table_schema NOT IN ('information_schema','mysql')
            AND A.index_type <> 'FULLTEXT'
        ORDER BY
            table_schema,table_name,index_name,seq_in_index
        ) A
    GROUP BY
        table_schema,table_name,index_name
) AA
ORDER BY
    engine DESC,db,tb
;

এটি আপনার চালনার জন্য প্রয়োজনীয় প্রতিটি নির্বাচনী ক্যোয়ারী আউটপুট দেবে যা রেফারেন্স করার জন্য সমস্ত সূচকে ডেকে আনবে। এই কোয়েরিটি /root/MakeSelectQueriesToLoad.sql নামে একটি ফাইলে রাখুন। স্ক্রিপ্টটি চালান এবং আউটপুট সংগ্রহ করুন / রুট / সেল্টকুয়েরিসটোলএড.এসকিউএল। শেষ পর্যন্ত, এটি চালান:

mysql -u... -p... -AN < /root/MakeSelectQueriesToLoad.sql > /root/SelectQueriesToLoad.sql
mysql -u... -p... < /root/SelectQueriesToLoad.sql

এটি অবশ্যই সমস্ত সূচী পৃষ্ঠাগুলি InnoDB বাফার পুল এবং মাইআইএসএএম কী ক্যাশে প্রিললোড করবে। যদি আপনার সমস্ত ডেটা InnoDB হয় তবে দুটি পরিবর্তন করুন:

  • WHERE engine IN ('InnoDB','MyISAM')সঙ্গে প্রতিস্থাপনWHERE engine='InnoDB'
  • CONCAT('SELECT ',ndxcollist,' FROM ',সঙ্গে প্রতিস্থাপনCONCAT('SELECT * FROM ',

এটি আরও তথ্য পৃষ্ঠাগুলি InnoDB বাফার পুলেও স্থাপন করবে।

শেষ নোট: নিশ্চিত করুন যে আপনার সমস্ত InnoDB ডেটা ধরে রাখতে InnoDB বাফার পুলটি যথেষ্ট বড়


2

আপনি ইতিমধ্যে মেমরিতে পুরো ডাটাবেসটি ক্যাশে করছেন। সমস্যাটি প্রায় অবশ্যই ডাটাবেস অনুসন্ধান করতে সময় লাগে, এমনকি র্যামেও।

আপনার ডিস্ক I / O পরিসংখ্যান দেখুন। আপনি সম্ভবত দেখতে পাবেন যে কেবলমাত্র ডিস্কের I / O এর মাঝে মাঝে এলোমেলো বিট থাকে। ডাটাবেসের হয় মেমরি। সমস্যা নেই। আপনাকে iostatপ্রথমে ইনস্টল করতে হবে । আপনি আপনার প্ল্যাটফর্ম বা বিতরণ উল্লেখ করবেন না, তবে এটি সম্ভবত বলা প্যাকেজে রয়েছে iostat। আপনি atopআরও বন্ধুত্বপূর্ণ হতে পারে ।

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


-1

ওয়ার্ডপ্রেসের জন্য একটি ভাল ক্যাচিং প্লাগইন ইনস্টল করুন, এটি সাহায্য করতে পারে। তবে শীঘ্রই বা পরে আপনাকে আপনার সিস্টেমে ধীরগতিতে দাঁড় করাতে হবে।

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