2012-05-12 11 views
7

हाय मेरे पास एक संग्रहीत प्रक्रिया है जो मैं हमेशा के लिए दौड़ना चाहता हूं, लेकिन एक लूप में एक सेकंड के लिए सो जाओ .. जब यह जागता है तो यह देखने के लिए एक टेबल को मतदान करेगा कि उसे कुछ काम करना चाहिए या नहीं। कार्य केवल हर मिनट किया जाना चाहिए, इसलिए एक ही समय में दो लेखकों के अपडेट के साथ मतदान तालिका में हिट होने की कोई चिंता नहीं है।एक संग्रहीत प्रक्रिया में नींद() के लिए एक रास्ता है?

एक स्पोक में अंतराल के लिए सोने का सबसे अच्छा तरीका क्या है? यह अच्छा होगा, वास्तव में, अगर यह 200 मिलीसेकंड (actuallY) के लिए सो सकता है लेकिन एक सेकंड भी काम करेगा। एक अनुसूचक की तरह, या SQL सर्वर एजेंट -

डॉन

+0

वहाँ डेटाबेस में एक शेड्यूलिंग सुविधा नहीं है? यहां तक ​​कि MySQL भी एक है। – EJP

+0

मुझे नहीं पता .. क्या वहां है? मुझे यकीन नहीं है कि डेटाबेस के अंदर नींद() सुविधा को कार्यान्वित करना कितना आसान होगा। वास्तव में, इसके बारे में सोचना, बेहद मुश्किल हो जाएगा। –

+0

http://dev.mysql.com/doc/refman/5.1/en/events.html – goat

उत्तर

0

आप जो डेटाबेस का उपयोग कर रहे निर्दिष्ट नहीं है, लेकिन आम तौर पर जिस तरह से हासिल करने के लिए आप क्या चाहते हैं एक infinetly चल sproc के लिए नहीं है, लेकिन कुछ बाहरी घटक है एमएसएसक्यूएल में - हर बार अक्सर स्पोक निष्पादित करें।

+0

प्रश्न mysql टैग किया गया है ... – eggyal

+0

डेटाबेस mysql है। हाँ - अगर डीबी के अंदर ऐसा करने का कोई तरीका नहीं है तो मेरे पास बाहरी प्रक्रिया होती है। –

0

मैं cron (लिनक्स) या Windows Task Scheduler (विंडोज़) का उपयोग प्रत्येक मिनट चलाने के लिए शेड्यूल करने के लिए करता हूं, और आपकी संग्रहीत प्रक्रिया अपना कार्य पूरा करती है, फिर बाहर निकलें।

संग्रहीत करने के बाद procs चलाने "हमेशा के लिए" एक वास्तव में बुरा विचार है। आप लंबे समय से आयोजित किया है कनेक्शन (जो मर सकते हैं), तो आप अनजाने में, एक मेज (हमेशा के लिए) ताला आदि सकता है

के बाद से वे एक दूसरे के साथ कुछ नहीं करना, अपने "काम" से अपने "लूप" को अलग करने से अच्छा है डिजाइन, और इसका मतलब है कि आप (अलग) उपकरण का उपयोग कर सकते हैं जो प्रत्येक भाग के लिए सबसे उपयुक्त हैं।

14

मुझे एक ही समस्या का सामना करना पड़ा है। बहुत कुछ करने के बाद, मुझे पता चला कि हम

SELECT SLEEP(<seconds>); 

इस कई सेकंड के लिए हमारी प्रक्रियाओं में देरी के लिए उपयोग कर सकते हैं। आपके मामले में,

SELECT SLEEP(0.2); 

का उपयोग ठीक है।

+2

इसके अलावा, यदि आपको क्वेरी के परिणाम की आवश्यकता नहीं है (जो संभवतः आप नहीं करते हैं, क्योंकि चुनिंदा नींद() सिर्फ 0 लाती है) तो आप "DO SLEEP () का उपयोग कर सकते हैं;" – Diego

+0

यह मेरे लिए काम नहीं किया। मैं ओरेकल 11 जी का उपयोग कर रहा हूँ। – sebadagostino

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