আমি যদি আপনি থাকতাম তবে আমি সমস্ত ডেটা ইনোডিবিতে স্যুইচ করতাম। টেবিল লকিং / সারি লকিং দীর্ঘকাল ধরেই অনেকে আলোচনা করেছেন। আমি সর্বদা 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 বাফার পুলটি যথেষ্ট বড়