मैं php में set_time_limit() जैसे SQL क्वेरी के लिए अधिकतम निष्पादन समय सेट करना चाहता हूं। मैं कैसे कर सकता हूँ ?एक mysql क्वेरी के लिए अधिकतम निष्पादन समय कैसे सेट करें?
उत्तर
मुझे mysql में ऐसा करने के तरीके से अवगत नहीं है, लेकिन चूंकि आप set_time_limit()
से php में परिचित हैं, तो समय सीमा को सीमित करने के लिए SQL क्वेरी को php स्क्रिप्ट में क्यों नहीं चलाते?
आप इस अन्य एसओ पर जवाब पा सकते हैं। प्रश्न:
MySQL - can I limit the maximum time allowed for a query to run?
हर अपने डेटाबेस सर्वर पर दूसरा चलाता है कि, जोड़ने और कुछ इस तरह कर रही एक क्रॉन जॉब:
- शो PROCESSLIST
- एक प्रश्न समय के साथ सभी कनेक्शनों का पता लगाएं आपके अधिकतम वांछित समय से बड़ा
- उन प्रक्रियाओं में से प्रत्येक के लिए किल [प्रक्रिया आईडी] चलाएं
मैंने सोचा कि यह थोड़ी देर के आसपास किया गया है, लेकिन this के अनुसार,
MySQL 5.7.4 मिलीसेकंड में निर्दिष्ट सर्वर साइड निष्पादन समय सीमा निर्धारित करने की क्षमता है, शीर्ष स्तर पढ़ने के लिए, का परिचय केवल चयन कथन।
SELECT
MAX_EXECUTION_TIME = 1000 --in milliseconds
*
FROM table;
ध्यान दें कि के लिए यह केवल काम करता है केवल पढ़ने के बयान का चयन करें।
अद्यतन: यह चर MySQL 5.7.4 में जोड़ा गया और MySQL 5.7.8 में max_execution_time
को नाम दिया। (source)
केवल इस क्वेरी या सभी सत्रों को उसी सत्र (प्रक्रिया आईडी) साझा करने के लिए सक्रिय? – mgutt
यह केवल उस क्वेरी पर लागू होता है जिसमें यह निर्दिष्ट है। यदि आप मेरे उद्धृत स्रोत पर जाते हैं, तो आप वैश्विक या सत्र max_execution_time सेट कर सकते हैं। – Westy92
हाँ मैंने पढ़ा है कि है, लेकिन वहाँ व्याख्या क्या 'session' का मतलब है क्योंकि उदाहरण के लिए' KILL' स्पष्ट संशोधक 'QUERY' की जरूरत नहीं है: https://dev.mysql.com/doc/refman/5.7/en/kill। एचटीएमएल और यह जवाब '' session' connection' के लिए एक अन्य शब्द के रूप में स्पष्ट किया गया था में: http://stackoverflow.com/a/8800971/318765 – mgutt
आप उपयोग कर रहे हैं mysql native driver (आम php 5.3 के बाद से), और mysqli एक्सटेंशन, जिसे आप एक अतुल्यकालिक क्वेरी के साथ ऐसा कर सकते हैं:
<?php
// Here's an example query that will take a long time to execute.
$sql = "
select *
from information_schema.tables t1
join information_schema.tables t2
join information_schema.tables t3
join information_schema.tables t4
join information_schema.tables t5
join information_schema.tables t6
join information_schema.tables t7
join information_schema.tables t8
";
$mysqli = mysqli_connect('localhost', 'root', '');
$mysqli->query($sql, MYSQLI_ASYNC | MYSQLI_USE_RESULT);
$links = $errors = $reject = [];
$links[] = $mysqli;
// wait up to 1.5 seconds
$seconds = 1;
$microseconds = 500000;
$timeStart = microtime(true);
if (mysqli_poll($links, $errors, $reject, $seconds, $microseconds) > 0) {
echo "query finished executing. now we start fetching the data rows over the network...\n";
$result = $mysqli->reap_async_query();
if ($result) {
while ($row = $result->fetch_row()) {
// print_r($row);
if (microtime(true) - $timeStart > 1.5) {
// we exceeded our time limit in the middle of fetching our result set.
echo "timed out while fetching results\n";
var_dump($mysqli->close());
break;
}
}
}
} else {
echo "timed out while waiting for query to execute\n";
var_dump($mysqli->close());
}
झंडे मैं mysqli_query को दे रहा हूँ महत्वपूर्ण चीजें हासिल करें। यह क्लाइंट ड्राइवर को एसिंक्रोनस मोड सक्षम करने के लिए कहता है, जबकि हमें अधिक वर्बोज़ कोड का उपयोग करने के लिए मजबूर करता है, लेकिन हमें टाइमआउट का उपयोग करने देता है (और यदि आप चाहें समवर्ती प्रश्न भी जारी करते हैं!)। दूसरा ध्वज क्लाइंट को पूरे परिणाम सेट को मेमोरी में बफर न करने के लिए कहता है।
डिफ़ॉल्ट रूप से, php अपने mysql क्लाइंट लाइब्रेरी को आपकी क्वेरी के पूरे परिणाम सेट को स्मृति में लाने के लिए कॉन्फ़िगर करता है इससे पहले कि यह आपके PHP कोड परिणाम में पंक्तियों तक पहुंचने देता है। बड़े परिणाम को स्थानांतरित करने में लंबा समय लग सकता है। हम इसे अक्षम करते हैं, अन्यथा हम जोखिम लेते हैं कि बफरिंग को पूरा करने के लिए प्रतीक्षा करते समय हम समय निकाल सकते हैं।
नोट दो स्थानों पर जहां हम एक समय सीमा से अधिक के लिए जांच करने की जरूरत है कि वहाँ:
- वास्तविक क्वेरी निष्पादन
- जबकि परिणाम (डेटा) प्राप्त करने
आप समान पूरा कर सकते हैं पीडीओ और नियमित mysql विस्तार में। वे एसिंक्रोनस क्वेरी का समर्थन नहीं करते हैं, इसलिए आप क्वेरी निष्पादन समय पर टाइमआउट सेट नहीं कर सकते हैं। हालांकि, वे unbuffered परिणाम सेट का समर्थन करते हैं, और इसलिए आप डेटा को लाने पर कम से कम एक टाइमआउट लागू कर सकते हैं।
कई प्रश्नों के लिए, mysql के लगभग तुरंत करने के लिए परिणाम स्ट्रीमिंग शुरू करने में सक्षम है, और इसलिए unbuffered प्रश्नों अकेले आप कुछ हद तक प्रभावी ढंग से कुछ क्वेरी पर समय समाप्ति को लागू करने के लिए अनुमति देगा। उदाहरण के लिए, एक
select * from tbl_with_1billion_rows
पंक्तियों स्ट्रीमिंग तुरंत शुरू कर सकते हैं लेकिन,
select sum(foo) from tbl_with_1billion_rows
पूरे मेज पर कार्रवाई करने के पहले यह आप के लिए पहली पंक्ति लौट रहा शुरू कर सकते हैं की जरूरत है। यह बाद का मामला यह है कि एक एसिंक्रोनस क्वेरी पर टाइमआउट आपको बचाएगा। यह आपको सादे पुराने डेडलॉक्स और अन्य सामानों से भी बचाएगा।
ps - मैं कनेक्शन पर ही किसी भी समय समाप्त तर्क शामिल नहीं किया।
से/* + MAX_EXECUTION_TIME (1000) */* का चयन करें यह अविश्वसनीय है ..... मैं इसे आजमाने के लिए इंतजार नहीं कर सकता ..... अच्छा उदाहरण के लिए ग्राफ डेटा प्रश्नों .... –
यह एक mysql क्वेरी एसक्यूएल सर्वर पर इस प्रक्रिया में है कि बंद नहीं होगा। हालांकि, एक अलग सवाल का एक उत्कृष्ट समाधान। – TheSatinKnight
@TheSatinNight क्या आप इसके बारे में निश्चित हैं? 'क्वेरी()' पर कॉल async है, इसलिए यह तुरंत लौटता है। अगली कॉल 'मतदान() 'है, जिसमें एक टाइमआउट है। चुनाव केवल प्रश्नों कि काटा जा करने के लिए तैयार कर रहे हैं उत्पादन करेगा ... इसलिए जहां इस "इस प्रक्रिया में क्वेरी" आप की बात कर रहा है? – goat
pt_kill
इस तरह के लिए एक विकल्प है। लेकिन यह निरंतर निगरानी नहीं है, मांग पर है। यह करता है @Rafa क्या सुझाव दिया। हालांकि cron
के साथ आने के संकेत के लिए --sentinel
देखें।
कृपया तरह
select /*+ MAX_EXECUTION_TIME(1000) */ * from table
- 1. MySQL क्वेरी निष्पादन समय
- 2. PHP से MySQL क्वेरी का निष्पादन समय कैसे प्राप्त करें?
- 3. वैसे भी MySQL क्वेरी निष्पादन समय सीमित करने के लिए?
- 4. ओरेकल क्वेरी निष्पादन समय
- 5. jQuery के साथ AJAX पोस्ट के लिए अधिकतम निष्पादन समय कैसे सेट करें?
- 6. mysql निष्पादन समय
- 7. अधिकतम निष्पादन समय घातक त्रुटि
- 8. निष्पादन समय की गणना के लिए टाइमर कैसे सेट करें
- 9. अधिकतम निष्पादन समय त्रुटि हैंडलिंग
- 10. मैं PHP स्क्रिप्ट के लिए अधिकतम निष्पादन समय कैसे सेट कर सकता हूं?
- 11. वर्तमान जीएमटी समय के लिए MySQL क्वेरी
- 12. वास्तविक MySQL क्वेरी समय मापना
- 13. set_time_limit (0) और "अधिकतम निष्पादन समय" पीएचपी
- 14. हाइबरनेट शो क्वेरी निष्पादन समय
- 15. PHP MySQL INSERT एक क्वेरी निष्पादन के साथ वापसी मूल्य
- 16. SQL क्वेरी के निष्पादन समय की गणना करें?
- 17. मल्टीलाइन टेक्स्टबॉक्स के लिए अधिकतम लम्बाई कैसे सेट करें?
- 18. PHP: 30 सेकंड का अधिकतम निष्पादन समय
- 19. PHP अधिकतम निष्पादन समय त्रुटि फँसाने
- 20. केवल पढ़ने के लिए एक MySQL पंक्ति कैसे सेट करें?
- 21. एक MySQL क्वेरी शेड्यूल कैसे करें?
- 22. MySQL - क्या मैं क्वेरी को चलाने के लिए अधिकतम समय को सीमित कर सकता हूं?
- 23. डब्ल्यूपीएफ में कम्बोबॉक्स के लिए अधिकतम लम्बाई कैसे सेट करें?
- 24. के लिए एक MySQL पीडीओ क्वेरी
- 25. तालिका के लिए MYSQL क्वेरी
- 26. जेवीएम के लिए अधिकतम मेमोरी उपयोग कैसे सेट करें?
- 27. रेल्स MySQL क्वेरी समय भ्रम
- 28. एक MySQL क्वेरी
- 29. एक mysql क्वेरी
- 30. जावा थ्रेड निष्पादन समय को मापने के लिए कैसे करें?
आपकी क्वेरी को फिर से लिखने मैं बहुत यकीन है कि PHP स्क्रिप्ट के बाद बाहर निकल जाता है, भले ही समय समाप्त, MySQL क्वेरी को दिया गया था प्रसंस्करण रखेंगे हूँ। – Rafa
डेटाबेस निष्पादन समय को प्रभावित नहीं करता 'set_time_limit()' – JamesHalsall
@JamesHalsall (विंडोज, जहां 'set_time_limit()' एक दीवार घड़ी समय सीमा के बजाय एक निष्पादन समय सीमा के सेट पर छोड़कर।) –