INFORMATION_SCHEMA.key_column_usage धीमा होने पर समाधान
INFORMATION_SCHEMA.KEY_COLUMN_USAGE क्वेरी बड़ी संख्या में टेबल/इंडेक्स होने पर धीमी हो सकती है क्योंकि MySQL प्रत्येक टेबल के मेटाडेटा को ऑन-डिमांड पढ़ता है।
समाधान: innodb_stats_on_metadata अक्षम करें
SET GLOBAL innodb_stats_on_metadata = 0;
प्रभाव
- यह सेटिंग InnoDB को मेटाडेटा क्वेरी (
SHOW TABLE STATUS,INFORMATION_SCHEMAटेबल्स) के दौरान आंकड़े पुनर्गणना करने से रोकती है। - परिणामस्वरूप
KEY_COLUMN_USAGE,TABLES,STATISTICSआदि क्वेरी बहुत तेज़ हो जाती हैं। - आंकड़े केवल
ANALYZE TABLEया सर्वर रीस्टार्ट पर अपडेट होते हैं।
उदाहरण
SET GLOBAL innodb_stats_on_metadata = 0; SELECT REFERENCED_TABLE_NAME, TABLE_NAME, COLUMN_NAME, CONSTRAINT_SCHEMA FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE;
आउटपुट (नमूना)
674 पंक्तियां 0.28 सेकंड में (पहले कई सेकंड लग सकते थे)।
स्थायी बनाने के लिए
my.cnf / my.ini के [mysqld] सेक्शन में जोड़ें:
innodb_stats_on_metadata = OFF
चेतावनी
- आंकड़े पुराने हो सकते हैं, जिससे क्वेरी ऑप्टिमाइज़र सबऑप्टिमल प्लान चुन सकता है।
- नियमित
ANALYZE TABLEशेड्यूल करें (जैसे रात में) यदि यह सेटिंग OFF है। - MySQL 8.0+ में
information_schema_stats_expiryवेरिएबल (डिफ़ॉल्ट 86400 सेकंड) कैश अवधि नियंत्रित करता है।