प्रश्न: MySQL स्वचालित रूप से info_schema को अपडेट क्यों नहीं करता है, और मैं इस व्यवहार को कैसे ठीक कर सकता हूं?
ए: InnoDB स्मृति में auto_increment मान रखता है, और यह डिस्क पर कायम नहीं रहता है।
मेटाडेटा प्रश्नों का व्यवहार (उदा. SHOW TABLE STATUS
) innodb_stats_on_metadata
. की सेटिंग से प्रभावित होता है और innodb_stats_persistent
चर।
https://dev.mysql.com/doc /refman/8.0/hi/innodb-parameters.html#sysvar_innodb_stats_on_metadata
जब भी हम मेटाडेटा की क्वेरी करते हैं, तो विश्लेषण के लिए बाध्य करना प्रदर्शन पर भारी पड़ सकता है।
उन चरों की सेटिंग के अलावा, या मैन्युअल रूप से ANALYZE TABLE
निष्पादित करके आंकड़ों को एकत्रित करने के लिए बाध्य करना , मुझे नहीं लगता कि इस समस्या का कोई "समाधान" है।
(मुझे लगता है कि ज्यादातर इसलिए क्योंकि मुझे नहीं लगता कि यह एक समस्या है जिसे ठीक करने की आवश्यकता है।)
किसी तालिका में auto_increment कॉलम का उच्चतम मान प्राप्त करने के लिए, मानक पैटर्न है:
SELECT MAX(`ai_col`) FROM `myschema`.`mytable`
मेरे लिए पहेली यह है कि हमें इस विशेष जानकारी को पुनः प्राप्त करने की आवश्यकता क्यों है। हम इसका क्या उपयोग करने जा रहे हैं?
निश्चित रूप से, हम उस मूल्य को निर्धारित करने के लिए एप्लिकेशन कोड में उपयोग नहीं करने जा रहे हैं जो एक पंक्ति को सौंपा गया था जिसे हमने अभी डाला था। इस बात की कोई गारंटी नहीं है कि उच्चतम मान किसी अन्य सत्र द्वारा डाली गई पंक्ति से नहीं है। और हमारे पास LAST_INSERT_ID()
है हमारे सत्र में अभी-अभी डाली गई पंक्ति के मान को पुनः प्राप्त करने के लिए तंत्र।
अगर हम ANALYZE TABLE
. के साथ जाते हैं आँकड़ों को ताज़ा करने के लिए, उसके और उसके बाद के SELECT
. के बीच अभी भी कुछ समय है ... एक और सत्र दूसरे INSERT
. में खिसक सकता है ताकि एकत्रित आँकड़ों से हमें जो मूल्य मिलता है, वह हमारे द्वारा पुनर्प्राप्त किए जाने तक "पुराना" हो सकता है।