अपने वेब एप्लिकेशन को तेज़ करने के सर्वोत्तम तरीकों में से एक है अपने डेटाबेस में क्वेरी कैशिंग को सक्षम करना, जो आमतौर पर उसी पृष्ठ पर वस्तुतः तत्काल पहुंच के लिए स्मृति में SQL क्वेरी का उपयोग करता है जो वही अनुरोध करता है।
इस विधि इतनी शक्तिशाली है कि आपको अपने वेब एप्लिकेशन में कोई बदलाव नहीं करना है, आपको बस थोड़ी सी स्मृति बलिदान देना है। यह आपकी सभी समस्याओं को ठीक करने वाला नहीं है, लेकिन यह निश्चित रूप से चोट नहीं पहुंचा सकता है।
नोट: यदि आपका एप्लिकेशन अक्सर टेबल अपडेट करता है, तो क्वेरी कैश लगातार शुद्ध हो जाएगा और आपको इससे अधिक या कोई लाभ नहीं मिलेगा। यह एक ऐसे एप्लिकेशन के लिए आदर्श है जो अधिकतर डेटाबेस के खिलाफ पढ़ता है, जैसे वर्डप्रेस ब्लॉग। यदि आप साझा होस्टिंग पर चल रहे हैं तो यह भी काम नहीं करेगा।
सर्वर रनिंग के साथ कैशिंग सक्षम करें
पहली चीज जो आप करना चाहते हैं, यह सुनिश्चित कर लें कि MySQL की आपकी स्थापना में वास्तव में क्वेरी कैशिंग समर्थन उपलब्ध है। अधिकांश वितरण करते हैं, लेकिन आपको वैसे भी जांच करनी चाहिए।
आप इस कमांड को अपने MySQL कंसोल से चलाना चाहते हैं, जो आपको बताएगा कि क्वेरी कैशिंग उपलब्ध है या नहीं।
mysql> show variables like 'have_query_cache'; +------------------+-------+ | Variable_name | Value | +------------------+-------+ | have_query_cache | YES | +------------------+-------+
इस अर्थ को गलती न करें कि क्वेरी कैशिंग वास्तव में सक्षम है, क्योंकि अधिकांश होस्टिंग प्रदाता डिफ़ॉल्ट रूप से इसे सक्षम नहीं कर पाएंगे। विचित्र रूप से पर्याप्त, मेरी उबंटू फीस्टी स्थापना पहले से ही सक्षम है …
इसके बाद हमें जांच करनी होगी कि क्वेरी कैशिंग सक्षम है या नहीं। हमें एक से अधिक चर की जांच करने की आवश्यकता होगी, इसलिए हम वैरिएबल क्वेरी% की जांच करके इसे एक साथ भी कर सकते हैं।
mysql> show variables like 'query%'; +------------------------------+---------+ | Variable_name | Value | +------------------------------+---------+ | query_alloc_block_size | 8192 | | query_cache_limit | 1048576 | | query_cache_min_res_unit | 4096 | | query_cache_size | 8388608 | | query_cache_type | ON | | query_cache_wlock_invalidate | OFF | | query_prealloc_size | 8192 | +------------------------------+---------+
सूची में महत्वपूर्ण आइटम यहां दिए गए हैं और उनका क्या अर्थ है:
- query_cache_size - यह बाइट्स में कैश का आकार है। इस मान को 0 पर सेट करना प्रभावी रूप से कैशिंग अक्षम कर देगा।
- query_cache_type - डिफ़ॉल्ट रूप से क्वेरी कैशिंग को सक्षम करने के लिए यह मान चालू या 1 होना चाहिए।
- query_cache_limit - यह अधिकतम आकार क्वेरी (बाइट्स में) है जिसे कैश किया जाएगा।
यदि query_cache_size मान 0 पर सेट है या आप इसे बदलना चाहते हैं, तो आपको यह ध्यान में रखते हुए निम्न आदेश चलाने की आवश्यकता होगी कि मान बाइट्स में है। उदाहरण के लिए, यदि आप कैश में 8 एमबी आवंटित करना चाहते हैं तो हम मूल्य के रूप में 1024 * 1024 * 8 = 8388608 का उपयोग करेंगे।
SET GLOBAL query_cache_size = 8388608;
इसी प्रकार, अन्य विकल्पों को एक ही वाक्यविन्यास के साथ सेट किया जा सकता है:
SET GLOBAL query_cache_limit = 1048576;
SET GLOBAL
query_cache_type
= 1;
अब हम कैसे बताते हैं कि यह वास्तव में काम कर रहा है या नहीं? हुड के नीचे क्या हो रहा है, इस पर एक नज़र डालने के लिए आप "क्यूसी" से शुरू होने वाले सभी चर खींचने के लिए SHOW STATUS कमांड का उपयोग कर सकते हैं।
mysql> SHOW STATUS LIKE 'Qc%'; +-------------------------+--------+ | Variable_name | Value | +-------------------------+--------+ | Qcache_free_blocks | 65 | | Qcache_free_memory | 201440 | | Qcache_hits | 18868 | | Qcache_inserts | 2940 | | Qcache_lowmem_prunes | 665 | | Qcache_not_cached | 246 | | Qcache_queries_in_cache | 492 | | Qcache_total_blocks | 1430 | +-------------------------+--------+ 8 rows in set (0.00 sec)
आप आंकड़ों में ध्यान देंगे कि मेरे पास बहुत सारी मुफ्त मेमोरी शेष है। यदि आपका सर्वर बहुत कम प्रमेय दिखाता है, तो आपको इस मान को बढ़ाने पर विचार करने की आवश्यकता हो सकती है, लेकिन मैं वेब सर्वर के लिए क्वेरी कैशिंग पर बहुत अधिक स्मृति खर्च नहीं करूंगा … आपको अपाचे, PHP, रूबी, या के लिए मेमोरी उपलब्ध कराने की आवश्यकता है जो भी आप उपयोग कर रहे हैं।
कॉन्फ़िगर फ़ाइल में सक्षम करें
यदि आप इन परिवर्तनों को रीबूट से बचने या MySQL सर्वर को पुनरारंभ करने के लिए चाहते हैं, तो आपको उन्हें MySQL के लिए अपनी /etc/mysql/my.cnf कॉन्फ़िगरेशन फ़ाइल में जोड़ना होगा। ध्यान दें कि यह आपके इंस्टॉलेशन पर एक अलग स्थान पर हो सकता है।
सूडो या रूट मोड में टेक्स्ट एडिटर का उपयोग करके फ़ाइल खोलें, और फिर इन मानों को जोड़ें यदि वे फ़ाइल में पहले से मौजूद नहीं हैं। यदि वे मौजूद हैं, तो बस उन्हें असम्बद्ध करें।
query_cache_size = 268435456 query_cache_type=1 query_cache_limit=1048576
क्वेरी कैशिंग आपके वेब एप्लिकेशन की गति में काफी सुधार कर सकती है, खासकर यदि आपका एप्लिकेशन अधिकतर पढ़ता है। उपरोक्त विधियों का उपयोग करके स्थिति की निगरानी करें और देखें कि यह समय के साथ कैसे काम करता है।