2010-08-16 11 views
8

के साथ कितना तनाव है, मैं एक बड़ा वेब ऐप विकसित कर रहा हूं और चाहता हूं कि यह उस कारक पर निर्भर हो जो डेटाबेस वर्तमान में तनाव से संबंधित है।पता लगाएं कि MySQL डेटाबेस वर्तमान में PHP

मुझे यकीन नहीं है कि मुझे सबसे सटीक/प्रभावी/सबसे आसान क्या होगा। मैं शायद मौजूदा कनेक्शन या सर्वर प्रतिक्रिया समय या सीपीयू उपयोग की संख्या पर विचार कर रहा हूं?

सबसे अच्छा और संभव क्या होगा?

धन्यवाद

उत्तर

0

दिलचस्प सवाल है। आप वास्तव में क्या चाहते हैं PHP के लिए mySQL सर्वर से दो प्रश्न पूछने का एक तरीका है:

सर्वर, क्या आप लगभग अपनी सभी सीपीयू क्षमता का उपयोग कर रहे हैं?

सर्वर, क्या आप लगभग अपनी सभी डिस्क आईओ क्षमता का उपयोग कर रहे हैं?

उत्तरों के आधार पर, मुझे लगता है कि आप अपने PHP वेब ऐप के काम को सरल बनाना चाहते हैं ... शायद किसी प्रकार की खोज क्षमता को समाप्त करके, या कुछ डेटा को आक्रामक तरीके से कैश करके।

यदि आपके पास अपने (लिनक्स या बीएसडी) mysql सर्वर के लिए एक खोल है, तो इन दो आदेशों से आउटपुट को नजरअंदाज करके आपके दो प्रश्नों का उत्तर दिया जा सकता है।

sar -u 1 10  # the %idle column tells you about unused cpu cycles 
    sar -d 1 10  # the %util column tells you which disks are busy and how busy. 

लेकिन, कोई मीठा छोटी क्वेरी नहीं है जो इस डेटा को आपके एसक्यूएल से आपके ऐप में लाती है।

संपादित करें: एक संभावना है कि एक छोटा PERL हैक या अन्य सरल प्रोग्राम जो आपके सर्वर पर चलता है, स्थानीय डेटा बेस से जुड़ता है, और एक बार हर बार (एक बार एक मिनट, शायद)% निष्क्रिय और% उपयोग निर्धारित करता है , और आपके डेटा बेस में एक छोटी-पंक्ति तालिका अपडेट करता है। यदि आप परवाह करते हैं, तो आप इस टेबल पर बहुत अधिक परेशानी के बिना सामान भी जोड़ सकते हैं। फिर आपका PHP ऐप इस तालिका से पूछ सकता है। यह स्मृति एक्सेस विधि का एक आदर्श उपयोग है। किसी भी दर पर, इसे सरल रखें: आप नहीं चाहते कि आपकी निगरानी आपके सर्वर का वजन कम करे।

एक दूसरी सबसे अच्छी चाल है, जिसे आप अपने ग्राहक से कर सकते हैं।

कमांड प्रॉस्सेलिस्ट पूर्ण आदेश जारी करें, पंक्तियों की संख्या (mySQL प्रक्रियाओं) की गणना करें जिसके लिए कमांड "क्वेरी" है, और यदि आपके पास उनमें से बहुत से हैं तो यह एक उच्च वर्कलोड होने पर विचार करें।

आप उन प्रक्रियाओं के लिए समय मान भी जोड़ सकते हैं जिनके पास स्थिति क्वेरी है, और उस समय के उच्च मूल्य का उपयोग थ्रेसहोल्ड के रूप में करें।

संपादित करें:

SELECT (COUNT(*)-1) P.QUERYCOUNT, SUM(P.TIME) QUERYTIME 
FROM information_schema.PROCESSLIST P 
WHERE P.COMMAND = 'Query' 
: यदि आप एक mySQL 5 सर्वर पर चल रहे हैं, और अपने सर्वर खाते MySQL से सुसज्जित INFORMATION_SCHEMA की पहुंच है, तो आप एक प्रश्न सीधे प्रक्रिया डेटा मैंने कहा पाने के लिए उपयोग कर सकते हैं

COUNT (*) - 1: क्योंकि उपर्युक्त क्वेरी स्वयं क्वेरी के रूप में गिना जाता है।

आपको इस काम को सही उत्पादन में लाने के लिए थ्रेसहोल्ड मूल्यों के साथ बेझिझक करना होगा।

डेटा बेस सर्वर नहीं रख सकता है जब आपका PHP वेब ऐप शेड लोड होना अच्छा विचार है। फिर भी, एक बेहतर विचार है कि आप अपने लंबे समय से चलने वाले प्रश्नों की पहचान करें और उन्हें अनुकूलित करें।

+0

धन्यवाद। यह बहुत दिलचस्प लग रहा है। आपने समस्या को समझने के साथ सिर पर नाखून मारा। मैं एक समर्पण पर चल रहा हूं एड सर्वर तो मेरे पास खोल पहुंच है। मैं ऐसे आदेशों को PHP के भीतर से कैसे कॉल कर सकता हूं? – Pablo

+0

पाब्लो, मेरे संपादन देखें .... –

+0

मुझे लगता है कि मेरा एसक्यूएल 4 चल रहा है इसलिए क्वेरी काम नहीं कर सका। क्या mysql4 5 से काफी खराब है? क्या प्रश्न 4 के लिए पुन: बनाया जा सकता है? – Pablo

1

MySQL क्वेरी प्रोफाइलर जो आप खोज रहे हैं वह करता है।

http://dev.mysql.com/tech-resources/articles/using-new-query-profiler.html

यदि आप बल्कि पैसे का भुगतान एक ग्राफिकल प्रोफाइलर पाने के लिए चाहते हैं तो यह बाहर की कोशिश:

http://www.jetprofiler.com/

+0

मैं PHP में इस डेटा का उपयोग कैसे होगा? मैं कुछ मैं अपनी वेबसाइट के पन्नों कि कैसे पेज उत्पन्न होता है प्रभाव होगा पर चला सकते हैं के लिए देख रहा हूँ। – Pablo

+0

जेट प्रोफाइलर बहुत उपयोगी लग रहा है। यह नहीं ठीक वही नहीं जो मैंने पूछा लेकिन मुझे लगता है कि यह ध्यान में रखेगा। – Pablo

1

डेटाबेस "तनाव" की मात्रा बहुत असली मीट्रिक नहीं है। महत्वपूर्ण बात यह है कि यह पहचानना है कि एप्लिकेशन कितना स्केलेबल है, और एक्स्टनेट जिस पर डेटाबेस अस्वीकार्य प्रदर्शन में योगदान दे रहा है। यह एक गेट-आउट की तरह लगता है लेकिन आप जो हासिल करना चाहते हैं उसके स्पष्ट उद्देश्य के बिना कुछ समय और प्रयास करने में कोई बात नहीं है।

महत्वपूर्ण चीजें आपके वेबसर्वर लॉग में माइक्रोसॉन्ड स्तर प्रतिक्रिया समय रिकॉर्ड करना प्रारंभ करना और mysql में धीमी क्वेरी लॉगिंग सक्षम करना है। फिर धीमे होने, धीमा होने और अक्सर हिट करने के लिए अपने डीबीएमएस का परीक्षण करें, और मांग बढ़ने के साथ क्या धीमा हो जाता है।

निश्चित रूप से यदि आपके पास प्रदर्शन समस्याएं हैं तो हर तरह से सीपीयू, मेमोरी उपयोग और आई/ओ को देखना शुरू करें, लेकिन ये मुख्य रूप से प्रदर्शन समस्या के लक्षण हैं - वास्तविक संकेतक नहीं। आपके पास 10% CPU उपयोग हो सकता है और आपका सिस्टम कुत्ते की तरह चल रहा है, या 95% उपयोग और ग्रेहाउंड की तरह चल रहा है;)।

सिस्टम लोड (रन कतार की औसत लंबाई यानी सीपीयू तुलना में एक बेहतर सूचक है -। लेकिन अभी भी एक symtpom मापने सामान्य डेटाबेस संबंधित सुस्ती में आम तौर पर मुख्य रूप से मैं के बारे में मुद्दों है/हे, और आमतौर पर एसक्यूएल ट्यूनिंग द्वारा हल

सी

+0

धन्यवाद। मैं सराहना करता हूं और आपके इनपुट को ध्यान में रखता हूं। मैं सिर्फ सुरक्षा तंत्र चाहता हूं ... यदि सर्वर लोड बहुत अधिक हो जाता है। मेरे बीटा टेस्टर्स होने के बाद मैं अपने एसक्यूएल को ट्यून करना चाहता हूं :)। – Pablo

संबंधित मुद्दे