MySQL-এ INFORMATION_SCHEMA.KEY_COLUMN_USAGE ক্যোয়ারি ধীর হলে, innodb_stats_on_metadata গ্লোবাল ভেরিয়েবল OFF (0) করে দিন। এটি মেটাডেটা স্ট্যাটিস্টিক্স রিফ্রেশ বন্ধ করে দেয় এবং ক্যোয়ারি গতি বাড়ায়।
সমাধান
SET GLOBAL innodb_stats_on_metadata = 0;
কারণ
ডিফল্টভাবে innodb_stats_on_metadata = ON থাকলে, INFORMATION_SCHEMA টেবিল ক্যোয়ারি করার সময় InnoDB প্রতিবার টেবিলের স্ট্যাটিস্টিক্স রিক্যালকুলেট করে। বড় ডাটাবেসে এটি দেরি করে।
উদাহরণ
SET GLOBAL innodb_stats_on_metadata = 0;
SELECT REFERENCED_TABLE_NAME, TABLE_NAME, COLUMN_NAME, CONSTRAINT_SCHEMA
FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE;
ফলাফল
674 rows in set (0.28 sec)
পূর্বে এটি কয়েক সেকেন্ড নিত。
স্থায়ী সমাধান (my.cnf / my.ini)
[mysqld]
innodb_stats_on_metadata = 0
MySQL রিস্টার্ট করলে লাগু হবে।
প্রভাব
- ফায়দা:
INFORMATION_SCHEMAক্যোয়ারি (SHOW INDEX, SHOW CREATE TABLE, ফরেন কি চেক) দ্রুত হয় - ক্ষতি: অপ্টিমাইজার পুরনো স্ট্যাটিস্টিক্স ব্যবহার করতে পারে, ক্যোয়ারি প্ল্যান সাবঅপ্টিমাল হতে পারে
- সমাধান: পিরিয়ডিক্যালি
ANALYZE TABLEচালান
স্ট্যাটিস্টিক্স ম্যানুয়ালি আপডেট
ANALYZE TABLE table_name;
সতর্কতা
প্রোডাকশনে এই সেটিং পরিবর্তন করার আগে টেস্ট এনভায়রনমেন্টে বেঞ্চмар্ক করুন। কিছু কেসে ক্যোয়ারি প্ল্যান খারাপ হতে পারে।