Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> MySQL

MySQL में INFORMATION_SCHEMA.key_column_usage खराब प्रदर्शन कैसे ठीक करें?

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 सेकंड) कैश अवधि नियंत्रित करता है।
  1. MySQL डेटाबेस में एक टेबल का बैकअप कैसे लें? MySQL डेटाबेस में एक टेबल का बैकअप कैसे लें?

    सिंगल टेबल का बैकअप लेने के लिए mysqldump यूटिलिटी का उपयोग करें। यह MySQL 5.0+ में मानक तरीका है। कमांड लाइन से बैकअप लें कमांड प्रॉम्प्ट खोलें (Win+R → cmd) MySQL के bin फोल्डर में जाएं: cd C:\Program Files\MySQL\MySQL Server 8.0\bin mysqldump चलाएं: E:\student.sql Enter password: ***********

  1. MySQL में sql_mode को स्थायी रूप से कैसे सेट करें? MySQL में sql_mode को स्थायी रूप से कैसे सेट करें?

    कॉन्फ़िगरेशन फ़ाइल (my.cnf / my.ini) संपादित करें sql_mode को स्थायी रूप से सेट करने के लिए MySQL कॉन्फ़िगरेशन फ़ाइल में [mysqld] सेक्शन के तहत जोड़ें। चरण डेटा डायरेक्टरी पता करें: SELECT @@datadir; उस निर्देशिका में my.cnf (Linux) या my.ini (Windows) खोजें। [mysqld] सेक्शन में जोड़ें: sql_mode=T

  1. - MySQL क्वेरी में 'Empty set' को कैसे बदलें?

    परिचय जब कोई क्वेरी कोई पंक्ति नहीं लौटाती (Empty set), और आप इसके बजाय एक डिफ़ॉल्ट मान दिखाना चाहते हैं, तो MySQL का COALESCE() फंक्शन उपयोगी है। यह पहला नॉन-NULL मान लौटाता है। उदाहरण: टेबल बनाना और डेटा डालना ); Query OK, 0 rows affected (1.64 sec) INSERT INTO DemoTable VALUES(78); Query OK,